From 534aa4224cb8f1bbd4fdb3f314167cf7bb9d7329 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 27 Jul 2026 10:29:31 +0800 Subject: [PATCH] docs: migrate project memory for Codex --- .codex/memory/MEMORY.md | 13 +++++++++ .codex/memory/feedback_routing.md | 11 +++++++ .codex/memory/feedback_scripts_gitignore.md | 11 +++++++ .codex/memory/feedback_version_bump.md | 7 +++++ .codex/memory/project_frontend_ehs_web.md | 21 ++++++++++++++ .codex/memory/project_gx_db_access.md | 13 +++++++++ .../project_material_ofrom_merge_bug.md | 29 +++++++++++++++++++ .codex/memory/reference_ehs_web_release.md | 14 +++++++++ .codex/memory/reference_python_venv.md | 15 ++++++++++ .codex/memory/reference_wrapper_apps.md | 8 +++++ 10 files changed, 142 insertions(+) create mode 100644 .codex/memory/MEMORY.md create mode 100644 .codex/memory/feedback_routing.md create mode 100644 .codex/memory/feedback_scripts_gitignore.md create mode 100644 .codex/memory/feedback_version_bump.md create mode 100644 .codex/memory/project_frontend_ehs_web.md create mode 100644 .codex/memory/project_gx_db_access.md create mode 100644 .codex/memory/project_material_ofrom_merge_bug.md create mode 100644 .codex/memory/reference_ehs_web_release.md create mode 100644 .codex/memory/reference_python_venv.md create mode 100644 .codex/memory/reference_wrapper_apps.md diff --git a/.codex/memory/MEMORY.md b/.codex/memory/MEMORY.md new file mode 100644 index 00000000..6bf064fe --- /dev/null +++ b/.codex/memory/MEMORY.md @@ -0,0 +1,13 @@ +# Factory 项目记忆索引 + +- [前端路由由后端下发](feedback_routing.md):新增 `ehs_web` 页面时不要修改静态路由表。 +- [scripts 目录脚本不入库](feedback_scripts_gitignore.md):一次性回刷脚本不得强制加入 Git。 +- [发版只在明确要求时执行](feedback_version_bump.md):普通改动不自动 bump 或 release。 +- [后端配套前端](project_frontend_ehs_web.md):后端 API 改动时检查 `../ehs_web` 及统计页面惯例。 +- [生产数据只读验证](project_gx_db_access.md):涉及真实数据形态时的安全查询原则。 +- [合批原料字段历史问题](project_material_ofrom_merge_bug.md):`material_ofrom` 不一致的既有排查结论。 +- [前端独立发版流程](reference_ehs_web_release.md):发布 `ehs_web` 时使用。 +- [项目 Python 虚拟环境](reference_python_venv.md):运行 Django、pytest 和脚本时使用。 +- [两个 WebView 套壳 App](reference_wrapper_apps.md):修改 h5x 与扫码、返回键交互时使用。 + +这些文件记录的是长期约定或历史上下文。执行任务前应结合当前代码和数据重新验证,尤其不要把历史缺陷结论直接当成当前故障原因。 diff --git a/.codex/memory/feedback_routing.md b/.codex/memory/feedback_routing.md new file mode 100644 index 00000000..0b2ec0c9 --- /dev/null +++ b/.codex/memory/feedback_routing.md @@ -0,0 +1,11 @@ +# ehs_web 路由由后端下发 + +`ehs_web` 使用后端下发的动态菜单和路由。新增管理页面时,不要向 `src/config/route.js` 添加条目;该文件中的既有静态路由属于历史或局部用法,不能作为新页面的默认范例。 + +通常只需: + +- 创建 `src/views//.vue`。 +- 补充 `src/api/model/.js` 中的接口。 +- 在后端菜单与权限配置中设置组件相对路径和权限码。 + +若页面未出现在菜单中,应检查后端菜单、权限与组件路径配置,不要用新增静态路由规避问题。 diff --git a/.codex/memory/feedback_scripts_gitignore.md b/.codex/memory/feedback_scripts_gitignore.md new file mode 100644 index 00000000..72aa41a5 --- /dev/null +++ b/.codex/memory/feedback_scripts_gitignore.md @@ -0,0 +1,11 @@ +# scripts 目录脚本不入库 + +仓库 `.gitignore` 中的 `scripts/*.py` 是有意设置的:`correct_*` 等一次性回刷、修数脚本只在本地或服务器按需运行,不进入版本库。 + +编写这类脚本后: + +- 正常保留在本地工作区。 +- 提交时不要执行 `git add -f`。 +- 不因仓库中存在少量历史已跟踪脚本而推断新脚本也应提交。 + +只有用户明确要求某个脚本入库时,才可改变这一规则。 diff --git a/.codex/memory/feedback_version_bump.md b/.codex/memory/feedback_version_bump.md new file mode 100644 index 00000000..d8ed01fc --- /dev/null +++ b/.codex/memory/feedback_version_bump.md @@ -0,0 +1,7 @@ +# 发版只在用户明确要求时执行 + +不要在每轮代码修改完成后自动提升版本号、生成 release commit 或打 tag。版本对应实际部署,多轮改动可以合并到一次发版。 + +普通任务完成后可以正常提交代码,但只有用户明确说“发版”“走 release”或“bump 版本”时,才读取并执行 `.agents/skills/release/SKILL.md`。 + +后端与前端有各自独立的发版流程;后端 release skill 不适用于 `../ehs_web`。 diff --git a/.codex/memory/project_frontend_ehs_web.md b/.codex/memory/project_frontend_ehs_web.md new file mode 100644 index 00000000..f4e77551 --- /dev/null +++ b/.codex/memory/project_frontend_ehs_web.md @@ -0,0 +1,21 @@ +# Factory 配套前端 ehs_web + +当前仓库是 Django 后端,配套 Vue 前端位于 `../ehs_web`(通常解析为 `D:\projects\ehs_web`,也可从 `factory.code-workspace` 核对)。 + +修改 serializer 字段、API 返回结构或接口行为后,应主动检查前端中消费该接口的: + +- `src/views/` 页面。 +- `src/api/model/` 接口定义。 + +路由和菜单规则见 [前端路由由后端下发](feedback_routing.md)。 + +统计页面现有惯例可参考 `src/views/statistics/good_check_gx2.vue` 和 `zt_batch_gx.vue`: + +- Options API 与 `el-container` 布局。 +- 复杂查询通过 `$API.wpm.batchstquery` 调用后端 `ComplexQueryMixin`。 +- `querys` 使用外层 OR、内层 AND 的 `{field, compare, value}` 条件。 +- JSONField 中文键常直接从 `scope.row.data` 读取。 +- 表格导出使用项目现有 `$XLSX` 封装。 +- JSONField 键的子串匹配使用 `icontains`;`contains` 表示 JSON 包含语义。 + +这些是现有实现惯例,不替代对当前页面和接口代码的检查。 diff --git a/.codex/memory/project_gx_db_access.md b/.codex/memory/project_gx_db_access.md new file mode 100644 index 00000000..e12aab45 --- /dev/null +++ b/.codex/memory/project_gx_db_access.md @@ -0,0 +1,13 @@ +# 生产数据只读验证 + +各工厂 PostgreSQL 连接参数保存在本机被 Git 忽略的配置中。涉及批次谱系、统计口径或真实数据形态时,可以在任务确有需要且用户允许的范围内做只读抽样查询。 + +安全要求: + +- 从本地忽略配置读取连接参数,不在文档、脚本、命令记录或提交中复制凭据。 +- 数据库会话显式设为只读。 +- 禁止执行 INSERT、UPDATE、DELETE、DDL、修数或其他写操作,除非用户针对该操作另行明确授权。 +- 临时查询脚本放在不会提交的本地位置。 +- Windows 中文输出需要时设置 UTF-8 编码。 + +真实数据可能包含拆合批循环、自环边和期初断头批。修改统计或谱系算法前,优先用少量只读样本验证数据假设。 diff --git a/.codex/memory/project_material_ofrom_merge_bug.md b/.codex/memory/project_material_ofrom_merge_bug.md new file mode 100644 index 00000000..ff92f872 --- /dev/null +++ b/.codex/memory/project_material_ofrom_merge_bug.md @@ -0,0 +1,29 @@ +# 合批原料 material_ofrom 历史排查 + +## 历史现象 + +曾出现合批或生产流转后,批次签带显示的原料类型与实物板段棒签不一致。同一工序可能存在多条并行原料输入,因此也可能发生真实混料。该问题当时决定暂缓,只有再次出现并取得可复现样本时再继续调查。 + +## 已确认的代码风险 + +`WMaterial.locked_get_or_create`(`apps/utils/models.py`)命中既有行时直接返回,不会应用 `defaults`。在 `apps/wpm/services.py` 的合批或流转逻辑中: + +- `material_ofrom`、`batch_ofrom`、`number_from` 只放在 `defaults`。 +- 定位既有行的键不包含 `material_ofrom`。 + +因此,一旦命中相同业务键的旧行,后续不同原料流入时,`material_ofrom` 可能继续保留首次建行时的值。该字段又是单个外键,结构上无法表达混料。签带展示值来自 serializer 中的 `material_ofrom_name`。 + +## 历史样本结论 + +当时抽样数据中的相关 `WMaterial` 行已经归零,来源记录也指向原有材料;实物板段号在当前 WPM 相关表中没有找到。由此推测,实物棒签的材料源和板段号可能来自上游拉丝或滚圆子系统,单靠当前库无法闭环证明。 + +## 下次接续 + +再次出现时应先取得一个“实物棒签材料与批次签带材料不一致、且两者来源可在同一系统追踪”的批次样本,然后: + +1. 确认实物棒签由哪个系统和表生成。 +2. 用只读查询验证流转前后定位键是否命中旧行。 +3. 区分真实混料、上游标签来源和 `defaults` 未更新这三种原因。 +4. 在复现前不要直接修改字段结构或流转逻辑。 + +查询时遵守 [生产数据只读验证](project_gx_db_access.md)。 diff --git a/.codex/memory/reference_ehs_web_release.md b/.codex/memory/reference_ehs_web_release.md new file mode 100644 index 00000000..3a6222de --- /dev/null +++ b/.codex/memory/reference_ehs_web_release.md @@ -0,0 +1,14 @@ +# ehs_web 前端独立发版流程 + +`../ehs_web` 有独立于后端的发版流程。`.agents/skills/release/SKILL.md` 只适用于当前 `factory` 后端。 + +前端发版要点: + +1. 权威版本号位于 `src/config/index.js` 的 `APP_VER`。 +2. 在前端仓库运行 `update_changelog.sh`,使用脚本生成的 `3.1.YYYYMMDDHH` 版本号。若上一个 tag 过旧,可向脚本传入合适的起点 ref,并检查提交分类。 +3. 把 `APP_VER` 更新为相同版本。 +4. 只暂存前端的 `changelog.md` 和 `src/config/index.js`。 +5. 提交信息使用 `release: `,tag 使用无 `v` 前缀的 ``。 +6. 推送到前端仓库配置的 `coding` 远端,而不是默认假设使用 `origin`。 + +前端 `package.json` 中的旧 `version` 字段不是当前权威版本。仍须遵守“只有用户明确要求才发版”的约束。 diff --git a/.codex/memory/reference_python_venv.md b/.codex/memory/reference_python_venv.md new file mode 100644 index 00000000..88670ed2 --- /dev/null +++ b/.codex/memory/reference_python_venv.md @@ -0,0 +1,15 @@ +# Factory 项目 Python 解释器 + +项目根目录包含 Windows 虚拟环境 `.venv`。运行 `manage.py`、pytest 或项目 Python 脚本时使用: + +```powershell +D:\projects\factory\.venv\Scripts\python.exe manage.py check +``` + +从 Git Bash 调用时可使用: + +```bash +/d/projects/factory/.venv/Scripts/python.exe manage.py check +``` + +不要直接依赖系统 `python`,因为系统环境可能缺少项目依赖。 diff --git a/.codex/memory/reference_wrapper_apps.md b/.codex/memory/reference_wrapper_apps.md new file mode 100644 index 00000000..7c33997d --- /dev/null +++ b/.codex/memory/reference_wrapper_apps.md @@ -0,0 +1,8 @@ +# Web 前端的两个套壳 App + +`ehs_web` 的 h5x 页面还由两个 WebView 壳工程加载: + +- 原生 Android 壳:`C:\Users\caoqi\AndroidStudioProjects\BxErp`,包名 `com.example.bxerp`。核心入口是 `app/src/main/java/com/example/bxerp/MainActivity.kt`,通过 `window.Android` 暴露扫码能力,常用交互为 `Android.openScanner()` 和页面回调 `onScanResult(data)`。 +- uni-app 壳:`D:\projects\mp_shell`,Vue 3/HBuilderX 工程,应用名“光芯ERP”。`pages/index/index.vue` 使用 `` 加载 h5x,并处理返回键与状态栏适配。 + +修改 h5x 的扫码、返回键或 WebView 消息交互时,应检查这两个壳的约定。工程位置和加载地址可能随部署变化,操作前以当前本地代码为准。