From e80098b32fe10cf5f435f3eedb3580fc25d5bdca Mon Sep 17 00:00:00 2001 From: YUAN Date: Thu, 10 Sep 2026 18:07:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E8=AE=A2=E6=AD=A3=EF=BC=9A?= =?UTF-8?q?=E8=BF=9C=E7=A8=8B=E7=8A=B6=E6=80=81=E8=AE=A4=E7=9F=A5=E7=BA=A0?= =?UTF-8?q?=E9=94=99=EF=BC=88refs/remotes=20=E5=86=99=E5=85=A5=E4=B8=8D?= =?UTF-8?q?=E8=90=BD=E7=9B=98=EF=BC=89+=20=E4=BA=A4=E6=8E=A5=E6=B8=85?= =?UTF-8?q?=E5=8D=95=E8=BF=87=E6=9C=9F=E5=9F=BA=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit T-8/T-9 提交时两次依据 git branch -r / branch -vv 判定「远程分支不见了」并向用户报警, 两次均为误报。本次深挖确认根因,并订正此前写入的错误表述。 - docs/memory/MEMORY.md 交接清单第 7 问重写: 本仓 .git/refs/remotes/** 写入不落盘 —— git update-ref refs/remotes/origin/X 返回 0、 reflog 也建了,但松散引用消失,且会把整个 refs/remotes/origin/ 目录删掉(含手工放进的文件); git fetch 报告 [new branch] ... -> origin/risk-control-agent 后同样不落盘。 故此前记的「stale tracking ref,git fetch 即恢复」是错的,fetch 并不修复。 对照证据:写 refs/heads/** 完全正常;同一 git(2.55.0.windows.3)在 /tmp 新建仓库里写 refs/remotes/** 完全正常 → 只此仓库特有;已排除外部进程删目录(marker 静置存活)、 重解析点(lstat FILE_ATTRIBUTE_REPARSE_POINT=False)、hooks / commondir / 浅克隆。 补绕过方案:packed-refs 是可靠存储,手工追加 refs/remotes/origin/ 后 git branch -r 立即正常(还原=删掉该行)。 补影响面:提交 / fetch 抓对象 / push 均不受影响(git push --dry-run 实测 fffb78a..d0097d6 成功),仅影响本地显示与上游跟踪。 顺手订正验证条目里过期的「516 passed / 3 skipped」→ 697,及第 73 行同款旧表述。 - docs/memory/2026-09-10.md 追加排查记录:7 条可复现证据 + 三步对照实验 + 绕过方案 + 影响面。 --- docs/memory/2026-09-10.md | 42 +++++++++++++++++++++++++++++++++++++++ docs/memory/MEMORY.md | 13 +++++++++--- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/docs/memory/2026-09-10.md b/docs/memory/2026-09-10.md index 598e125..ec6d161 100644 --- a/docs/memory/2026-09-10.md +++ b/docs/memory/2026-09-10.md @@ -388,3 +388,45 @@ T-11(`core_tools` 与 `sum_trades_on_date` 汇总去重 · 依赖 T-8 已解 skill `design-doc-selfcheck` → **v1.2.0**:新增 **「二补 · 格式契约最低三问」** + **铁律 6(格式契约铁律)**: **凡 `str(Decimal)` 直接出网的字段,先问「这个字段的展示位数写在哪」—— 没答案就是契约缺位; 存储精度 ≠ 展示精度;多条产出路径必须共用一个格式出口 + 写逐字节相等断言。** + +--- + +## 深夜 · 收尾:**`refs/remotes` 写入不落盘**根因排查(推翻此前「stale ref」结论) + +**背景**:提交 T-8/T-9 时两次依据 `git branch -r` / `git branch -vv` 判定「远程分支不见了」并报警, +两次均**误报**(用户被迫去仓库核实两次)。用户指令:「你先改问题……改完确认没问题再提交」→ 先做根因排查。 + +### 已确认事实(可复现) + +| # | 事实 | 证据 | +| --- | --- | --- | +| 1 | **远程健在** | `git ls-remote --heads origin` → `refs/heads/risk-control-agent` = `fffb78a`;另有 6 个分支 | +| 2 | **fetch 抓取正常,引用不落盘** | `git fetch origin` 报 `* [new branch] risk-control-agent -> origin/risk-control-agent`,`FETCH_HEAD` 写对;`.git/refs/remotes/` 仍为空 | +| 3 | **写 remotes 会删整个 `origin` 目录** | `git update-ref refs/remotes/origin/X ` → **EXIT=0**、reflog 建了,但松散引用消失,**连手工 `echo >` 进去的文件一起被删** | +| 4 | **只 remotes namespace 有问题** | 写 `refs/heads/tmpX` 时,放在 `refs/remotes/origin/` 的 marker **存活**;写 remotes 才触发删除 | +| 5 | **只此仓库特有** | 同一 git(`2.55.0.windows.3`)在 `/tmp` 新建仓库写 `refs/remotes/origin/probeX` **完全正常** | +| 6 | **排除外部进程** | marker 静置 6 秒 + 跑只读 git 命令均存活,**只有写 remotes 的那一下才被删** | +| 7 | **排除目录属性** | Python `lstat` 查 `refs/remotes`:**非重解析点**(`FILE_ATTRIBUTE_REPARSE_POINT = False`);无 hooks、无 commondir、非浅克隆 | + +**根因未定位**(倾向 git 写 remotes 引用时被本地环境干预)。**此前的记录写「stale ref,`git fetch` 即恢复」是错的** —— fetch 并不修复。 + +### ✅ 绕过方案(已验证) + +`.git/packed-refs` 是**可靠存储**(`origin/dev`、`origin/main` 一直从这里读到)。 +手工追加 `fffb78a11c7d4e05f2aae53c76ceec3ad5d7d33c refs/remotes/origin/risk-control-agent` 后: +`git branch -r` 立即显示 `origin/risk-control-agent`、`git rev-parse` 可解析。还原 = 删掉该行。 + +### 影响面(重要) + +- **不受影响**:提交(`refs/heads/**` 正常)、`git fetch` 抓对象、**push** + (`git push --dry-run origin risk-control-agent:refs/heads/risk-control-agent` 实测 `fffb78a..d0097d6` 成功)。 +- **受影响**:仅本地「显示 / 上游跟踪」——`git branch -r`、`git branch -vv`、`git pull`(无参) 的默认上游推断。 + +### 状态 + +本地 HEAD `d0097d6`(T-9)· 领先远程 `fffb78a` **9 个提交** · 工作区干净 · 探针与临时文件已全部清理。 + +### 文档回写 + +`.workbuddy/memory/MEMORY.md`(远程铁律条**重写**,含 7 条证据 + 绕过方案)· +`docs/memory/MEMORY.md`(交接清单**第 7 问重写** + 顺手订正验证条目里过期的「516 passed」→ **697** + 第 73 行旧表述订正)· 本条。 diff --git a/docs/memory/MEMORY.md b/docs/memory/MEMORY.md index e48b1ec..4a58daf 100644 --- a/docs/memory/MEMORY.md +++ b/docs/memory/MEMORY.md @@ -70,7 +70,7 @@ **下一步开发(见 TODO):** **模块侧交付完毕(2026-09-07:全量 pytest 482 绿 + 接口实调验收通过——suitability/check 阻断+放行、simulate/trade 阻断、三条鉴权边界 401/403/403 契约零偏差;`risk-m1~m4` tag 齐)。合并 main 已移交合并执行人,操作手册《docs/项目框架设计/合并注意事项-风控模块并入main.md》(含基底锁定/20 冲突裁决/14 静默文件/三硬伤/合并后必测,实测数据编制)。模块侧开放项:chat 链路 risk_suitability_log.actor_id 落 SYSTEM 待评估 / 前端 React 多 Agent 入口(`web/` 未 init,归属待拍板)。**演示走查按 `docs/项目框架设计/演示SOP-风控模块.md`(debug 头通道仍有效;JWT 通道签发用 `scripts/dev/issue_dev_token.py`;演示库已按 AL-08 expires_at 新口径重灌)。知识库入库:`python scripts/kb/build_kb.py`(先启 Ollama;**Milvus 数据路径必须纯英文**——faiss 不支持中文路径,本机 .env 已配 C:/Users/YUAN/.jinrong/milvus/)。 -**另(2026-09-10 待办)**:① **基金转换线**第 5 步进行中(**T-0~T-9 已完成、697 绿,下一步 = T-10(批次维护 · 回归风险最大)/ T-11(汇总去重)**;设计 + 开发计划均已闭环,入口 项目根 `交接文档.md` §B);② ~~架构改进线收尾~~ —— **2026-09-10 已闭环结项**:§7.2 七项手工冒烟补跑 **7/7 PASS**、冒烟残留按 SOP §2 重灌双库清除、全量 **510 passed** 复绿;**「`037ce7e` 未 push」的旧表述已作废**(实测 `git ls-remote`:远程 `risk-control-agent` = `fffb78a` = 本地 HEAD,`037ce7e` 在其祖先链上,早已推送;本地 `git branch -vv` 显示 `origin/risk-control-agent: gone` 只是远程跟踪引用失效,`git fetch` 即恢复,非远程分支被删)。入口 **项目根 `交接文档.md` §C**。 +**另(2026-09-10 待办)**:① **基金转换线**第 5 步进行中(**T-0~T-9 已完成、697 绿,下一步 = T-10(批次维护 · 回归风险最大)/ T-11(汇总去重)**;设计 + 开发计划均已闭环,入口 项目根 `交接文档.md` §B);② ~~架构改进线收尾~~ —— **2026-09-10 已闭环结项**:§7.2 七项手工冒烟补跑 **7/7 PASS**、冒烟残留按 SOP §2 重灌双库清除、全量 **510 passed** 复绿;**「`037ce7e` 未 push」的旧表述已作废**(实测 `git ls-remote`:远程 `risk-control-agent` = `fffb78a` = 本地 HEAD,`037ce7e` 在其祖先链上,早已推送;本地 `git branch -vv` 显示 `origin/risk-control-agent: gone` 是本仓 `refs/remotes/**` 写入不落盘所致(见交接清单第 7 问,**不是**「`git fetch` 即恢复」的普通 stale ref),非远程分支被删)。入口 **项目根 `交接文档.md` §C**。 **禁止(改代码前必记):** Core 正式 C1~C5 不可被画像覆盖 · 审计表只 INSERT · 代理人草稿不外发 · 仅 R-02 可阻断交易 · 四 Agent 不互调 LLM。 @@ -199,8 +199,15 @@ RBAC 联调账号:scripts/dev/rbac-seed-reference.md 2. 改动属于 api / service / tool / repository 哪一层? 3. 是否需 customer_id 归属与 JWT RBAC? 4. Core 是模拟库只读还是 agent 库读写? -5. 如何验证?(`python -m pytest` 全量(当前 **516 passed / 3 skipped**,基线 510)· uvicorn 启动 + /health · SQL / sync 脚本 · 对照 REQUIREMENTS 验收列) +5. 如何验证?(`python -m pytest` 全量(当前 **697 passed / 3 skipped**,基线 510)· uvicorn 启动 + /health · SQL / sync 脚本 · 对照 REQUIREMENTS 验收列) 6. **当前有哪两条并行线?**(① 风控/架构改进线:**已结项**(510 基线绿、§7.2 七项冒烟 7/7 PASS、`037ce7e` 已核实早已推送);② **基金转换线**:设计闭环,**第 5 步进行中 —— T-0~T-9 已完成(697 passed),下一步 = T-10 / T-11**)——动代码前先确认自己属于哪条线,别混淆前置条件。 -7. **远程分支到底还在不在?**(**在**。`git ls-remote --heads origin` 实测 `refs/heads/risk-control-agent` = `fffb78a`。⚠️ **判断远程存亡只能用 `git ls-remote`**;本仓本地远程跟踪引用会失效(`git branch -r` 只剩 `dev`/`main`、`git branch -vv` 显示 `gone`),那是 stale ref,`git fetch` 即恢复 —— 2026-09-10 **同日误报两次**,勿再踩。) +7. **远程分支到底还在不在?**(**在**。`git ls-remote --heads origin` 实测 `refs/heads/risk-control-agent` = `fffb78a`。⚠️ **判断远程存亡只能用 `git ls-remote`** —— 2026-09-10 **同日误报两次**,勿再踩。) + **本仓特有异常(2026-09-10 深挖确认,别误判为 stale ref)**:`.git/refs/remotes/**` **写入不落盘** —— + `git update-ref refs/remotes/origin/X ` 返回 0,但松散引用消失,**且整个 `refs/remotes/origin/` 目录被删** + (含手工放进去的文件);`git fetch` 报 `[new branch] ... -> origin/risk-control-agent` 后同样不落盘。 + **`git fetch` 并不能"恢复"**(此前这么记是错的)。 + 对照证据:写 `refs/heads/**` 完全正常;同一 git 在 `/tmp` 新建仓库里写 `refs/remotes/**` 完全正常 → 只此仓库特有。 + **✅ 绕过**:`.git/packed-refs` 可靠 —— 手工追加 ` refs/remotes/origin/` 后 `git branch -r` 立即正常。 + **不影响**提交 / fetch 抓对象 / push(`--dry-run` 实测 `fffb78a..d0097d6` 成功),**只影响本地显示与跟踪**。 大任务:FRAMEWORK/FLOW 与实现状态不符时先更新 memory 再编码(用户确认跳过除外)。