diff --git a/docs/tasks/README.md b/docs/tasks/README.md index f56c3a33..dfc529fd 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -286,6 +286,7 @@ | `TASK-rectification-precision-gate-guided-collect-fix-20260916.md` | `PROGRESS-rectification-precision-gate-guided-collect-fix-20260916.md` | **验收修复单**:F1 `decision_receipt` 新增 `guided_collect_windows` 让 `test_rectification_engine_memoization` golden 红(在 CORE_PYTEST_TARGETS,staging 未部署 cfb41daf);F2 16 条既有校正断言红未按三栏改;F3 `mayDeliverOnPrecision` 缺省即放行、短路 BUG-654 且 `guidedCollectExhausted` 不含 refresh;F4 无领域轨道窗口轮询贴领域、一窗只问一领域;F5 离线回放注入 month_lo 非真值方向、0/20 不作数;F6 录入卡合成「或」列表句走模型轮;F7 page.tsx +1、手造 fixture。D6 产品已拍板:门槛只是必要条件,仍问完线再出。BUG 段 744 起 | **已验收通过,已合入 staging**;合入后 run `2697` 仍红 capability audit(`(secondary)/chart`),跟进 BUG-753 | `dc732825`(Opus 子代理实现,Claude 独立验收):tsc 0 / lint 0 error / npm test 3405 条 31 红与基线 a396bbe0 逐条一致(16 条校正红转绿、0 新红)/ pytest 193 通过 / `○ /` Static / gzip 582,552 → 582,800(+0.04%)/ page.tsx 1836 → 1835 / golden diff 仅加 `guided_collect_windows` 一键 / Skill 10.0.28。F5 真值方向回放三档仍 0 例靠引导件达标,作研究结论记录。D2+D6 合并后 10 分钟门槛只上报不改出卡时机 | | — (产品口头拍板,无任务书) | `PROGRESS-agent-voice-20260917.md` | **对话口气改形状(纯提示词与文案,无 BUG 号)**:产品判定现有人设出来的是顾问报告。人设改成「把人当一个人认真对待 / 行动力很强、嘴有点毒但靠谱的同事」;开场从「一句结论 + 2–3 条短要点 + 一句下一步」换成固定形状——**反差**(表面 A 底下 B,命名成一个格局)→ **谁在推谁在修**(大运主星推、行运修体面)→ **别去应 X 的象,去扮演 Y 的象** → **最多三条短行动**(各 ≤ 20 字),仍无标题、≤ 400 字。新增希望纪律:有转机且允许精确应期就说到月份,没有就说这段时间拿来干什么、能扮演哪个象,禁「一切都会好 / 相信自己 / 加油 / 你值得更好的 / 宇宙自有安排」。申报时段与无出生分钟两条降级路线形状照给、不编月份。改 `product-voice.ts` / `consult/route.ts` 用户回合文案 / 三处复述旧形状的系统指令 / `VOICE.md`(五条原则→七条)/ `CHANGELOG.md`。零业务逻辑改动,Skill 版本不变 | 已实现,待验收 | `codex/agent-voice-20260917`:tsc 0 / lint 0 error(118 warning 不变)/ npm test 3468→3471 条、36 红与基线 `ff0427cf` 逐条相同、0 新红 / `○ /` Static / 首屏 gzip 1,416,965 两侧**字节相同**(改动全在服务端模块,客户端 chunk 无该文本)。真机口气走查欠 | | — (产品口头拍板,无任务书) | `PROGRESS-settings-ui-20260919.md` | **设置面板布局与资料入口整理**:基线 `4f4cd684`;四分区继续共用固定 `.settings-modal`,桌面导航 176px→200px 并加分隔,内容区增加内边距,表单 cap 440px→560px,导航移除误导性右箭头;账户头像 48px→56px;“添加其他人”移到分组标题操作区。已同步 `frontend/DESIGN.md` 与合同测试;tsc 0、lint 0 error、定向测试 21/21;build 被 Windows Skill runtime symlink 权限阻塞,浏览器走查待受控环境;BUG-970 保持 `investigating` | 待验收 | `codex/settings-ui-20260919` | +| `TASK-owner-case-purge-20260919.md` | `PROGRESS-owner-case-purge-20260919.md` | **库主本人案例清除 + 冗余文档清理(两仓)**:上游 `yinduzhanxing` 运行时按库主生日分支注入其候选分钟(`_known_case_regression_hint` / `_load_1993_candidate_segment_table`)、两条引擎桥接脚本默认参数即本盘、36 个案例文件 + 94 个含标识文件 + 26 个测试、511 个文件含库主本机路径(42 MB 整机扫描清单为最大单文件)、根目录 3 份另一真实用户报告未跟踪;本仓 95 个文件残留(33 个在无引用的 `versions/` 快照 71.6 MB、13 个前端 fixture、10 个 Python 测试、11 份整机扫描台账、2 份会话转录)、镜像同步无隐私排除。产品拍板整体删除、不留匿名版;A 仓分支不推 GitHub 由产品过目;冗余零信息损失项(md5 全同 46 个、110 个漏归档 round 文件、死链 17 处、拷贝脚本漂移)直接做,版权 PDF / 七政紫微 650 文件 / 历史清洗等 7 项待拍板。BUG-972~975 | 待领取 | — | ## 命名与归档 diff --git a/docs/tasks/TASK-owner-case-purge-20260919.md b/docs/tasks/TASK-owner-case-purge-20260919.md new file mode 100644 index 00000000..5db461c7 --- /dev/null +++ b/docs/tasks/TASK-owner-case-purge-20260919.md @@ -0,0 +1,208 @@ +# TASK · 库主本人案例清除 + 冗余文档清理(2026-09-19) + +> 状态:待领取。两个仓库、两条分支、一份任务书。A 部分(上游库)与 B 部分(本仓)可并行,C 部分(冗余)串行在 A 之后。 +> 本任务书**不转录**任何出生日期、出生分钟、经纬度、本机用户名;检索键一律按符号定位到源文件行,执行方自己读。 + +## 0. 范围与仓库 + +| 代号 | 仓库 | 基线 | 交付 | +| --- | --- | --- | --- | +| A | `/workspace/yinduzhanxing`(GitHub `origin`,无 Gitea 门禁、无 CI) | `main` = `a6f47abd`(2026-09-03) | 分支 `codex/owner-case-purge-20260919`,**不 push**,等产品看过 diff 后再推 | +| B | `/workspace/Jyotisha`(本仓) | `origin/staging` = `b05d2fa1`(2026-09-19) | worktree `.worktrees/owner-case-purge-20260919`,分支 `codex/owner-case-purge-20260919`,验收后快进推 `staging` | + +A 仓的三份未跟踪根目录报告(`1997用户个人印度占星报告-*.md` 两份、`个人印度占星报告-多引擎参考版.md`)属于另一位真实用户,同样在 A2 处理。 + +## 1. 事故实证 + +### 1a. 上游运行时按库主生日分支(A 仓) + +- `scripts/active_rectification_questions.py:176-209` `_known_case_regression_hint`:用 `birth_time.startswith(<库主生日>)` 判断当前来访者是不是库主,是则读 `references/real_case_calibration/classical_zr_known_user_case_calibration_1993_2026_08_31.json`,返回 `target_minute` 提示。`:468` 在正式问题生成链里被调用。任何与库主同一天生日的用户都会拿到库主的目标分钟。 +- `scripts/jyotish_engine.py:2130-2160` `_load_1993_candidate_segment_table`:按 `year/month/day` 三个整数命中库主生日就加载 `references/oracle/1993_birth_time_candidate_segment_table_2026_08_23.json`;`:2072-2086` 把它塞进 intake 输出,`scripts/jyotish_api_server.py:14047-14049` 再读 `candidate_segment_table.recommended_next_pass`。 +- `scripts/panchanga_api_bridge.py:26-31`、`scripts/vedastro_rest_bridge.py:19-20`:两条外部引擎桥接脚本的**默认参数就是库主本人盘**,`SUBJECT = "yn-1993"` 注释写明「防止拿本盘代答他人」,但默认值本身就是本盘。 +- `scripts/classical_astrology.py:100-102` 三个 `DEFAULT_CLASSICAL_ZR_*` 常量指向库主 packet;`:3665-3673` `build_classical_zr_1993_event_feedback_template_packet` 硬编码 `case_id = "pl9_1993_user_case"`。 + +### 1b. 库主案例文件(A 仓) + +- 以文件名带 `1993` / `wenmo` / `1993_user` 计:36 个(`git ls-files | grep -iE "1993|wenmo|1993_user"`),分布 `docs/research` 9、`references/oracle` 8、`references/real_case_calibration` 9(含 `astrolog_parity/` 5)、`scripts` 6、`tests` 4。 +- 以内容含库主标识(案例 ID、生日字符串、经纬度、出生秒级时间、别名)计:94 个文件(排除 pdf / wasm / `references/open_source_sources`),其中 `tests` 26、`scripts` 20 余。 +- 26 个测试里,13 个直接断言库主案例存在(例:`tests/test_narayana_dense_observed_profile_matrix.py:22`、`tests/test_narayana_pl9_multi_case_promotion_gate.py:24`、`tests/test_classical_astrology.py:1242`、`tests/test_qizheng_practical_rule_pack.py:61`、`tests/test_ziwei_personal_report.py:125`、`tests/test_vedastro_1993_difference_attribution_ledger.py:13`、`tests/test_pl9_1993_case_contract.py:5`);其余 13 个只是把库主生日当通用 fixture(例:`tests/test_local_case_fill_checklist.py:11`、`tests/test_active_rectification_api.py:22`)。 +- `scripts/pl9_1993_case_contract.py:38` `PDF_PATH` 指向库主本机桌面的 PDF;`progress.md:3474` 转录了库主本机 `.codex/attachments/...` 附件路径与完整出生参数。 +- `SKILL.md:13,125,561` 三处提到 `yn-1993` 本盘适用性。 + +### 1c. 库主本机路径(A 仓) + +- `git grep -l "/Users/<库主用户名>"` 命中 511 个文件、122,274 处。字面值见 `tests/test_birth_time_rectification_skill_contract.py:10`(该行把本机绝对路径当测试 fallback,CI 上永远不可解析)。 +- 六个文件占绝大多数:`docs/research/character_level_external_manifest_latest.json`(42 MB,109,306 处,仓库最大的单个文件)、`docs/research/character_level_inventory_manifest_latest.json`、`references/real_case_calibration/classical_{zr,horary,electional}_{reviewer_freeze,domain_validation}_scoring_manifest_*.json`(6 × 2.9 MB,各 1,377 处)。这些是整机扫描清单,不是研究材料。 +- `docs/rfc/**` 内 6 处内链是本机绝对路径(`integration_plan.md:7-8`、`test_strategy.md:7-9`、`schema.md:5`)。 + +### 1d. 本仓残留(B 仓) + +- 库主标识命中 95 个文件,其中 33 个在 `skills/jyotish-vedic-astrology/versions/{6.9.14,6.9.15,6.9.16}/`。`frontend/src/lib/skill-package-registry.ts:711-764`、`frontend/src/mastra/skill-binding.ts:16` 明写 `versions/` 快照不在加载路径上;三份快照共 3,467 个文件、71.6 MB,除 `.gitignore:7-8` 与 CHANGELOG 历史外无引用。 +- `frontend/tests/` 13 个文件把库主生日当 fixture 日期(`birth-time-journey-test-support.ts:25,34,156`、`birth-time-intake.test.ts:25,336` 等),坐标已是上海,只剩日期。 +- `tests/` 10 个 Python 测试:`test_active_rectification_api.py:23,32-33,43,61,91,96,111` 用库主**生日 + 出生分钟**;`test_active_rectification_events.py`、`test_dynamic_rectification*.py`、`test_minute_rectification_feature_facts_v4.py`、`test_rectification_{horary,kp_cusp}_observation.py` 用生日;`test_deep_fragment_oss_reuse_gate_round2.py:20,30`、`test_truth_source_runtime_identity.py:14` 断言库主本机路径。 +- `references/oracle/` 11 份 2026-07 的整机扫描 / workbuddy 候选台账 + `references/rangacharya_source_manifest.json`,全部只被各自的合同测试读;`scripts/technique_promotion_audit_kp_gochara_muhurta.py:21` 把库主本机备份路径当 `kp_reference`。 +- `references/upstream/1993-session-{correction-rerun,repeated-questions}.txt` 是库主本人校正会话的原文转录(含出生参数与生活事件),只被 `docs/tasks/TASK-rectification-convergence-20260830.md` 引用。 +- 本仓 `tests/test_consultation_contract_golden.py:44` 已经把库主生日与出生分钟列为 `FORBIDDEN_PRIVACY_MARKERS`,但只检查咨询输出,不检查仓库文件。 +- `scripts/import_yinduzhanxing.py:36-53` 的排除清单没有任何库主案例模式,下次同步会原样带回。 + +### 1e. 冗余(A 仓,已逐条 md5 / diff 核实) + +| 项 | 证据 | +| --- | --- | +| `references/analysis-natal-full-part1..7-*.md` 7 个文件 | md5 全同,正文只剩一段匿名化墓碑 | +| `references/analysis-full-reading-v1.8-review.md` ≡ `-v4.0.md` | md5 同 | +| `references/oracle/cases/*.json` 12 个中 8 个 | md5 同,内容全是 4 个 `null` 键;`tests/test_oracle_benchmark_inventory.py:46-47` 断言其中两个存在 | +| `references/real_case_calibration/*.json` | 16 组 md5 全同、37 个冗余文件(同一模板换日期重发) | +| `docs/benchmark/tajika_sahams_annual_closure_status.md` ≡ `docs/research/tajika_annual_closure_status_latest.md` | md5 同;另 3 个 `docs/research/*_latest.md` 是 `docs/benchmark/` 看板的旧镜像 | +| `docs/research/antigravity_round{28,29,30}_*` + `antigravity_sidecar_work_order_round*` 110 个 | `docs/archive/research_2026_06/README.md` 记录 round 1–27 已于 2026-08-07 归档,28–30 漏归 | +| `AGENTS.original.md` | 是 `AGENTS.md` 的旧版子集,少两节;无引用 | +| `REPO_LAYOUT.md` | 指向不存在的 `docs/research/archive/`、`scratch/local/`;`docs/research/full_repository_inventory_audit_v1.md:68` 已标「历史布局说明」 | +| `benchmark/`(1 个文件) vs `benchmarks/` vs `docs/benchmark/` | `scripts/interpretation_source_inventory_gate.py:267` 为此特判三个前缀 | +| `skills/jyotish-engine-modules/scripts/` 5 个 `.py` | 是 `scripts/` 的拷贝,`special_lagnas.py`、`vimsopaka_calculator.py` 已漂移;`findings.md:246` 记过一次同因事故;只被 `tests/test_skill_truth_sync_scripts.py` 用来 `cp` 到本机 | +| `CHANGELOG.md:3→29` 从 v6.9.14 直接跳到 v6.1.12 | v6.2–v6.9.13 只在 `CHANGELOG_v6.2_to_v6.9.md`,**不是冗余,是缺口** | +| `Science of Light I/II.pdf`(32 MB,git 跟踪) | 版权书籍整本入库,仓库 MIT;`tests/test_book_admission_audit.py:30-50` 只需要路径 | +| 死链 | `SKILL.md` 3 个 `docs/research/*_2026_06_26.md` + 4 个 `verified-celebrity-cases-*.md`(真实文件带 `-part2/3/4-`);`mcp_server.py:335` 附近 3 个 `docs/research/local_drafts/**`;`references/quick-reference-guide.md` 5 个 | + +## 2. 根因 + +1. **库主用自己的盘做了全链路 golden。** 校正、Narayana、七政、紫微、VedAstro 差异归因、古典 ZR 全靠这一张盘当「已知用户案例」,于是运行时代码为它开了专用分支,脚本默认参数就是它,测试断言它存在。 +2. **整机扫描产物入库。** `character_level_*`、`whole_machine_*`、`workbuddy_round*` 是把库主电脑扫一遍生成的清单,路径原样写进 JSON,再被合同测试锁死。 +3. **本仓从上游镜像同步时没有隐私排除项**,只在咨询输出层加了 `FORBIDDEN_PRIVACY_MARKERS`。 +4. **无归档纪律。** `docs/research` 811 个文件里只有 1 个显式写「supersedes」,日期是唯一信号;同一模板换日期重发 37 次。 + +## 3. 决策记录 + +- 产品 2026-09-19 拍板:**库主本人案例整体删除**,不保留匿名化版本、不保留「候选分钟表」、不保留会话转录。这推翻 `TASK-rectification-convergence-20260830.md:199,407` 把两份会话转录当研究资料归档的做法,以及 `TASK-upstream-sync-20260903.md:70` 对 `_known_case_regression_hint` 「记录但不引入」的处理——现在上游也要删。 +- 产品要求同时扫冗余。本任务书把**零信息损失**的冗余项(md5 全同、墓碑、漏归档、死链)列为 C 部分直接执行;需要产品再拍板的项(版权 PDF、七政/紫微/大六壬 650 个文件的去留、`docs/superpowers` 归档、`progress.md` 三件套归档)列在 §9,**本轮不动**。 +- A 仓分支不推 GitHub:库主案例删除属于对外仓库的历史敏感操作,diff 由产品过目后自己推。是否 `git filter-repo` 清历史由产品另行决定,本轮只清 HEAD。 +- B 仓 fixture 日期替换:统一用**虚构**出生资料(日期、分钟、坐标均不得与任何真人一致),写进 `frontend/tests/birth-time-journey-test-support.ts` 与 `tests/conftest.py` 各一份常量,其余测试引用常量,不再散落字面量。 + +## 4. 硬红线 + +1. 任务书、进度记录、Bug 历史、commit message、测试名、新常量名里**不得出现**库主的出生日期、出生分钟、经纬度、别名、本机用户名。检索键从源文件读,读完即删。 +2. 不得为了让测试变绿而把断言改成「文件不存在」再保留文件;删文件就连带删或改测试,三栏说明「原值 / 新值 / 原因」。 +3. A 仓不 push;B 仓只快进推 `staging`,不动 `main`、workflow、DNS。 +4. §9 列出的待拍板项一个都不动。 +5. 不顺手升级依赖、不修不在本单内的 warning。 +6. B 仓 `frontend/src/app/page.tsx` 不增长;`scripts/jyotish_api_server.py` 不增长。 +7. 七政 / 紫微 / 大六壬的**非库主**文件本轮不删(在 §9 待拍板);只删其中库主案例那部分(`qizheng_1993_*`、`ziwei_*wenmo*`、`ziwei_wenmo_*`)。 + +## 5. 任务分解 + +### A. 上游库主案例清除(`/workspace/yinduzhanxing`) + +**A1 运行时去特判。** +删 `scripts/active_rectification_questions.py` 的 `_known_case_regression_hint` 及 `:468` 调用与返回字段;删 `scripts/jyotish_engine.py` 的 `_load_1993_candidate_segment_table` 与 `:2072-2086` 的 `candidate_segment_table` / `candidate_segment_reference` 两键;`scripts/jyotish_api_server.py:14047-14049` 对应读取删除(该文件受行数冻结,只减不增);`scripts/classical_astrology.py:100-102` 三个常量与 `:3665` 起的 `build_classical_zr_1993_event_feedback_template_packet` 及其调用方一并删除。 +验收:`git grep -nE "1993|known_user_case|candidate_segment_table" scripts/` 为 0;`python3 -m pytest tests/test_active_rectification_questions.py tests/test_active_rectification_api.py tests/test_classical_astrology.py` fail=0。 + +**A2 删文件。** +- 删文件名含 `1993` / `wenmo` / `1993_user` 的 36 个(清单见 §1b 的 `git ls-files` 命令)。 +- 删 `scripts/capture_1993_*.py`、`scripts/pl9_1993_case_contract.py`、`scripts/qizheng_1993_replay_packet.py`、`scripts/vedastro_1993_difference_attribution_ledger.py`、`scripts/ziwei_wenmo_parser.py` 与四个同名测试。 +- 删工作树根目录三份未跟踪的真实用户报告(`git status --short` 里的 3 个 `??`),并在 `.gitignore` 加 `*个人印度占星报告*.md`。 +- `scripts/panchanga_api_bridge.py:26-31`、`scripts/vedastro_rest_bridge.py:19-20` 默认参数改为公开名人(AstroDatabank AA 级,如乔布斯,资料已在 `references/real_case_calibration/replay_manifest.json`),`SUBJECT` 改为该名人 ID。 +验收:`git grep -lE "<从 panchanga_api_bridge.py 原 26-31 行读出的 4 个键>" -- . ':!*.pdf' ':!*.wasm' ':!references/open_source_sources'` 为 0(模式写在进度记录里时用 `` 占位)。 + +**A3 26 个测试三分。** +- 直接断言库主案例的 13 个:随文件删除,或删掉对应 `case_1993` 断言并保留其余(`test_narayana_*` 三个、`test_classical_astrology.py:1242` 段、`test_qizheng_practical_rule_pack.py:61`、`test_ziwei_personal_report.py:125`、`test_startrack_*` 两个、`test_vimshottari_first_balance_fix_ledger.py:23`、`test_xhs_minitool_bundle.py:113`)。 +- 当通用 fixture 的 13 个:换成 A2 选定的公开名人或虚构常量。 +- `tests/test_frontend_productization.py:381` 那条「源码不含库主生日」的守卫**保留并扩展**为 A5 的仓库级守卫。 +验收:每条改动在 `PROGRESS` 里三栏说明;`python3 -m pytest tests/ -x -q` 与基线失败清单逐条比对,0 新红。 + +**A4 本机路径清除。** +- 删 `docs/research/character_level_external_manifest_latest.json`、`character_level_inventory_manifest_latest.json` 及其余 `character_level_*_latest.*`(共 12 个);`scripts/build_legacy_vocabulary_cleanup_queue.py:27-28` 读它们的两处改为「文件不存在即跳过」并写进度记录。 +- 删 6 个 `classical_*_scoring_manifest_*.json`(各 2.9 MB、内容是本机扫描)及其合同测试断言。 +- `tests/test_birth_time_rectification_skill_contract.py:10` 删 fallback 行;`docs/rfc/**` 6 处绝对路径改相对路径。 +- 其余 `/Users/<库主用户名>` 命中按文件逐个判断:整机扫描清单删,研究文档里的路径改 ``。 +验收:`git grep -c "/Users/" -- . ':!references/open_source_sources'` 从 122,274 处降到 0(`open_source_sources/` 内第三方源码里的 `/Users/alice` 不算)。 + +**A5 仓库级隐私守卫。** +新增 `tests/test_repo_privacy_markers.py`:从 `tests/privacy_markers.local.txt`(`.gitignore` 排除,执行方本地放置检索键)读取模式,扫描全部 `git ls-files`(排除 pdf / wasm / `open_source_sources`),命中即失败;文件不存在时 skip 并打印提示。同时把 `/Users/` 绝对路径列为内置模式。 +验收:本地有模式文件时通过;CI 无文件时 skip。 + +**A6 `SKILL.md` 与 `progress.md`。** +`SKILL.md:13,125,561` 三处删掉「yn-1993 本盘」措辞;`progress.md:3474-3480,3588` 四段整段删除(不改写,直接删)。 + +### B. 本仓残留(`/workspace/Jyotisha`) + +**B1 删 `skills/jyotish-vedic-astrology/versions/`** 三份快照(3,467 文件、71.6 MB);`.gitignore:7-8` 两行随删。 +验收:`frontend` tsc / lint / `npm test` 与基线逐条一致;`next build` 后 `/` Static;`frontend/tests/skill-registry.test.ts`、`skill-binding.test.ts` 通过。 + +**B2 fixture 常量化。** +`frontend/tests/birth-time-journey-test-support.ts` 导出 `FIXTURE_BIRTH`(虚构),13 个前端测试全部引用;`tests/conftest.py` 导出 `FIXTURE_BIRTH_DATE` / `FIXTURE_BIRTH_TIME`,8 个 Python 测试引用。`test_active_rectification_api.py:32-33` 的扫描区间断言按新常量重算,三栏说明。 +验收:`git grep -nE "<库主生日字符串>" frontend/tests tests` 为 0;两侧测试数量不低于基线。 + +**B3 删整机扫描台账。** +删 `references/oracle/` 11 份(清单:`git grep -lE "<库主本机用户名>" origin/staging -- references/oracle`)与各自合同测试(`tests/test_{deep_fragment_oss_reuse_gate_round2,fragment_migration_registries,fragment_second_pass_candidate_ledger,high_value_gap_registries,technique_promotion_audit_kp_gochara_muhurta,truth_source_runtime_identity,whole_machine_jyotish_fragment_scan,workbuddy_round3_candidate_ledger,workbuddy_round4_*,workbuddy_round5_transfer_status}.py`);`tests/test_skill_truth_overlay_application.py` 中读 `technique_promotion_audit_*` 的段落删除;`scripts/technique_promotion_audit_kp_gochara_muhurta.py` 整个删除;`references/rangacharya_source_manifest.json` 与 `scripts/rangacharya_readiness.py` 里把本机路径改为 `` 占位(这份 manifest 有运行时读者,不删)。 +删 `references/upstream/1993-session-*.txt` 两份;`docs/tasks/TASK-rectification-convergence-20260830.md:199,407,457` 与 `PROGRESS-rectification-convergence-20260830.md:18-19` 改为「会话转录已按 2026-09-19 决策删除」。 +`docs/superpowers/plans/2026-07-17-birth-date-picker.md:52,418` 两处示例日期换成虚构常量。 +验收:`git grep -lE "<库主本机用户名>" HEAD` 为 0;pytest 数量 = 基线 − 被删测试数,进度记录列出被删测试名。 + +**B4 同步排除 + 仓库级守卫。** +`scripts/import_yinduzhanxing.py` 排除清单加 `**/*1993*`、`**/*wenmo*`、`**/*pl9_1993*`、`**/character_level_*`、`**/whole_machine_*`、`**/workbuddy_round*`;新增 `tests/test_repo_privacy_markers.py`(与 A5 同实现,内置 `/Users/` 与 `FORBIDDEN_PRIVACY_MARKERS` 复用 `test_consultation_contract_golden.py:44` 的列表)。 +验收:`.venv/bin/python -m pytest tests/test_repo_privacy_markers.py tests/test_import_yinduzhanxing.py` 通过。 + +### C. 冗余清理(A 仓,零信息损失项,串行在 A 之后) + +| 编号 | 动作 | 验收 | +| --- | --- | --- | +| C1 | 删 7 个 `references/analysis-natal-full-part*.md`、2 个 `references/analysis-full-reading-v*.md` | `SKILL.md` / `mcp_server.py` / `quick-reference-guide.md` 无引用(已核);`git grep` 为 0 | +| C2 | 删 `references/oracle/cases/` 8 个全 null 桩;`tests/test_oracle_benchmark_inventory.py:46-47` 对应断言删除 | 该测试通过 | +| C3 | `references/real_case_calibration/` 16 组 md5 全同:每组只留最新日期,删 37 个;读旧文件名的脚本 / 测试改指向最新 | `md5sum references/real_case_calibration/*.json \| awk '{print $1}' \| sort \| uniq -d` 为空 | +| C4 | 删 `docs/research/tajika_annual_closure_status_latest.md`、`tajika_annual_benchmark_dashboard_latest.md`、`public_benchmark_dashboard_latest.md`、`oracle_closure_master_dashboard_latest.md`(`docs/benchmark/` 为真源) | 无引用 | +| C5 | 110 个 `docs/research/antigravity_round{28,29,30}_*`、`antigravity_sidecar_work_order_round*` 移到 `docs/archive/research_2026_06/`,更新该目录 README 计数 | `ls docs/research \| grep -c antigravity` 为 0 | +| C6 | 删 `AGENTS.original.md`、`REPO_LAYOUT.md`;`REPO_LAYOUT.md` 里仍成立的三条规则并入 `AGENTS.md` | diff 可见 | +| C7 | `CHANGELOG_v6.2_to_v6.9.md` 内容插入 `CHANGELOG.md:3` 与 `:29` 之间,然后删小文件 | `grep -c "^## v6\.[2-9]\." CHANGELOG.md` ≥ 10 | +| C8 | `benchmark/validation-einstein-2026-06-04.md` 移到 `docs/benchmark/`,删 `benchmark/`;`scripts/interpretation_source_inventory_gate.py:267` 去掉 `"benchmark/"` 前缀特判;`docs/planning/` 唯一文件并入 `docs/roadmap/` | 对应测试通过 | +| C9 | 死链修复:`SKILL.md` 7 处、`mcp_server.py` 3 处、`references/quick-reference-guide.md` 5 处、`README.md` 2 处——目标不存在的**删引用行**,命名代差的改成真实文件名 | 写一个 `tests/test_doc_links_resolve.py` 扫这四个文件的仓内路径引用 | +| C10 | `skills/jyotish-engine-modules/scripts/` 5 个拷贝删除、改为从 `scripts/` import 或整个子技能删除(连同 `skills/jyotish-full-reading-integration/` 与 `tests/test_skill_truth_sync_scripts.py`,两者自述「历史方案」) | `cmp` 不再有漂移对 | + +## 6. 让步顺序 + +1. A1、A2、A4、A5、B2、B3、B4 不可让步。 +2. B1(删 `versions/`)若 `next build` 或 skill 加载出现任何回归,可退回「只删三份快照里含库主标识的 33 个文件」,写进度记录。 +3. A3 若某测试改 fixture 后数值断言大面积变化(例如 Narayana 黄金值),允许把该测试标 `skip` 并写 BLOCKED,不允许静默删断言。 +4. C 部分任何一条出现引用未查全,先跳过写进度记录,不硬删。 + +## 7. 开工前置命令 + +A 仓: +```bash +cd /workspace/yinduzhanxing && git status -sb && git checkout -b codex/owner-case-purge-20260919 a6f47abd +python3 -m pytest tests/ -q -x --co 2>/dev/null | tail -1 # 记录基线可收集数 +python3 -m pytest tests/ -q 2>&1 | tail -3 # 记录基线失败清单 +``` +B 仓: +```bash +cd /workspace/Jyotisha && git status -sb && git fetch origin --prune +git worktree add -b codex/owner-case-purge-20260919 .worktrees/owner-case-purge-20260919 origin/staging +cd .worktrees/owner-case-purge-20260919 && .venv/bin/python -m pytest tests -q 2>&1 | tail -3 +cd frontend && npm test 2>&1 | tail -5 && ./node_modules/.bin/tsc --noEmit && npm run lint +``` +B 仓涉及 `references/**`、`skills/**`、`tests/**`、`scripts/**`、`frontend/**`,全部在 `deploy/gated-paths.txt` 内,推 staging 会触发门禁并重新发布镜像。 + +## 8. BUG 编号起点 + +开工时核对 `docs/BUG_HISTORY.md` 最大号(写单时为 BUG-971),从 BUG-972 起: + +- BUG-972:上游运行时按库主出生日期分支并注入其候选分钟(A1)。 +- BUG-973:库主与另一真实用户的出生资料、会话转录、本机路径进入两仓跟踪文件(A2/A4/A6/B1/B2/B3)。 +- BUG-974:镜像同步无隐私排除项,咨询输出层的禁用标记未覆盖仓库文件(A5/B4)。 +- BUG-975:上游 `skills/jyotish-engine-modules` 拷贝脚本再次漂移(C10,关联 `findings.md:246` 的旧事故)。 + +## 9. 需产品拍板、本轮不动 + +| 项 | 体量 | 问题 | +| --- | --- | --- | +| `Science of Light I/II.pdf` | 32 MB,占 `.git` 约 1/4 | 版权书籍整本入 MIT 仓;建议 untrack + 本地路径,测试改为容忍缺失 | +| 七政四余 / 紫微 / 大六壬 | 约 650 个文件(references 215、tests 182、scripts 180、docs 73) | 不是印度占星;有活测试,建议拆到独立仓而不是删 | +| `docs/superpowers/`(82)、`progress.md`(690 KB)/ `findings.md` / `task_plan.md` | — | 外部规划工具与会话日志,无代码引用;建议移 `docs/archive/` | +| `chara_narayana_*`(25)、`raman_muhurta_*`(22)、`qizheng_remainder_*`(23) | 70 | 同题日期链,需人判断留哪几份 | +| `references/verified-celebrity-cases-*` 13 份 + `celebrity-cases.md` + `consultation-case-library.md` + `case-study-collection-*.md` + `indastro-case-studies.md` | — | 三代命名的同一名人库,真源是 `tests/celebrity_cases.json`(16 人)与 `tests/indastro_cases.json`(11 人);建议合并到 `references/famous-case-library.md` 一份索引 | +| A 仓 git 历史清洗 | — | 本轮只清 HEAD;历史里的库主资料是否 `filter-repo` 由产品决定 | +| `COVERAGE_AUDIT_REPORT.md` | — | v6.1.12 时代快照仍被 `SKILL.md:707` 链接,需重生成或摘链 | + +## 10. 验收口径 + +- A 仓:`python3 -m pytest tests/ -q` 失败清单与基线逐条比对,0 新红;隐私守卫本地通过;`git grep` 三组模式(案例标识 / 生日字符串 / 本机用户名)为 0;`git diff --stat a6f47abd` 附进度记录。 +- B 仓:tsc 0 错、lint 0 error、`npm test` 失败清单与基线 `b05d2fa1` 逐条一致、`next build` `/` Static、首屏 gzip ±2%、pytest 数量 = 基线 − 已列明的删除数、快速门 `run_quality_gate.py --profile quick`;推 staging 后 `/api/health` 的 `deployment.gitCommit` 等于该提交。 +- 两仓进度记录各一份:`docs/tasks/PROGRESS-owner-case-purge-20260919.md`(B 仓)、A 仓的写在同一文件的「上游」一节,不要在 A 仓新建进度文件。