Files
Jyotisha/docs/tasks/TASK-upstream-sync-fix-20260903.md
T

10 KiB
Raw Blame History

任务书 · 上游同步修复单:全域咨询合同回归、finance 严格证据口径变化、模板注册表缺引用、门禁覆盖(2026-09-03)

基线:origin/staging @ c1e3f32a(含上游同步任务 0 / 1 / 2 / 4 / 645d13258f2241463734d2059,以及整备修复单 027e4b08c1e3f32a)。分支 codex/upstream-sync-fix-20260903。BUG 编号开工时以 docs/BUG_HISTORY.md 最大号 +1 为准(staging 现最大 BUG-513)。

这是 TASK-upstream-sync-20260903.md 任务 0 / 1 / 2 / 4 / 6 的验收修复单。任务 3 / 5 / 7 尚未开工,不在本单。


验收实证(2026-09-03,独立工作树 c1e3f32aCI 同款依赖:hypothesismcp 1.29

通过的部分

  • 任务 0references/cross_project_contract/imports/commit-a6f47abd….json 与镜像 SKILL.md 就位;tests/test_consultation_contract_golden.pytest_upstream_git_import_a6f47abd.pytest_import_yinduzhanxing.pytest_upstream_import_plan.py 绿;两份隐私扫描 pass: 0 findings;产品代码里 grep "14:49\|1993-04-17" 为空。
  • 任务 1:注册表 116 项,README 徽章 116 / 79 / 8 / 0 与之一致;test_readme_badgestest_capability_evidence_pooltest_commercial_skill_truth_contract 绿;6.9.15 版本目录新增、6.9.14 未动。
  • 任务 2 / 6 的产品路径端到端(本地起 API,虚构盘 2000-01-01 12:00 UTC 0/0career):传 lahiri → Moon Swati,传 raman → Vishakha,回执里所有 ayanamsa* 标签与请求一致(含 Gulika);响应顶层已有 timing_narrative / module_execution_audit / pratyantar_dasha_timeline / planetary_friendshipjyotish_api_server.py 11143 行 ≤ 上限 11363。
  • 任务 4tests/test_vedastro_rest_bridge.py 绿;默认 payload 不含 14:49
  • 前端:tsc 0 错、lint 0 error、全量 2575 pass / 25 fail / 10 skipped25 条全是 Docker / rsync / YAML / Playwright 环境项,class-name-definition-contract 已绿。
  • 全量 Python 跑完 git status --short 为空(整备修复单任务 4 达标)。

没过的部分

全量 Python--continue-on-collection-errors):c1e3f32a 90 红 / 0 收集错误,对比 01a45363(整备合入点)73 红17 条新红全部由上游同步引入,且这些文件都不在 run_quality_gate.py --profile quick 的 CORE 列表里,所以执行方的 "quick 门 503 passed" 与 staging 门禁都没拦住。

P1 · 全域咨询合同:非原生主题从 degraded 变成 blocked734d2059,任务 6

  • tests/test_consultation_workflow_domains.py::test_complete_consultation_workflow_handles_every_canonical_domain[*] 6 条红:general / timing / family / education / migration / annualthematic_report.themes[<domain>].status 现为 blocked,合同要求 degradedadapter.upstream_contract_available is Truef2241463 上该测试绿,734d2059 起红。
  • 机制:scripts/report_orchestrator.py:129 runtime_status = "degraded" if normalized_evidence or upstream_contract_available else "blocked";任务 6 在 _compute_consultation_workflowattach_merged_engine_fields(chart, …) 之后执行 chart['ai_prompt_pack'] = handler._build_chart_prompt_pack(chart),把原有 ai_prompt_pack.evidence_snapshot(含 strict_workflow_contracts)整体重建丢掉,upstream_contract_available 随之为假。
  • 产品影响待执行方用真实请求确认:对 timing / general 主题发一次 /api/consultation_workflow,看 thematic_report.themes[<domain>].status 与前端报告中心对 blocked 的处理(是否直接不出内容)。

P1 · finance 严格证据口径变了,且没有记录(45d13258 / f2241463,任务 1 / 2

tests/test_mcp_strict_workflow_finance.py 从 1 红(01a45363,存量)变 10 红;tests/test_vedastro_external_technique_evidence.py 从 3 红变 4 红。原因不是环境:

现象 代码 性质
_derive_yogi_wealth_support 强钩子变 weakavayogi 判定翻转 mcp_server.py 合并时把 Yogi 点从 Sun+Moon 改为 Sun+Moon+93°20、Avayogi 改为 Yogi+186°40′(formula_profile: pyjhora_yogi_sphuta_v1 上游的计算正确性修正Yogi Sphuta 标准公式),但 PROGRESS 的 mcp 冲突表没有列出这一块,等于按硬红线 5(ii) 取了 theirs 却没写取舍
confidence_capmedium-highlow(完整 Shadbala 分量的用例) _collect_strict_evidence finance 分支 疑似真回归:完整分量却降到 low,需定位是哪个新检查把它压下去
d11_rudramsa 出现在 used techniques 首位,wealth_promise_strength 后移 _collect_strict_evidence 新增 "d11_rudramsa": _safe_get(modules, "varga_full", "D11_Rudramsa") 新增证据项本身合理,但顺序/断言未同步,且 d11_rudramsa 未在 PROGRESS 列出

这些直接影响聊天财富主题的置信度上限与技法审计表,属于任务书硬红线 4 "咨询响应契约不得变形" 的范围:golden 只锁键路径和类型,锁不住值,所以没拦住。

P2 · 解读模板注册表校验失败(f2241463,任务 2 快进了 interpretation_template_registry.json +145 行)

scripts/validate_interpretation_templates.pyvalid: false, problem_count: 4dual_luminary_timing_context / seventh_house_topic_split / empty_window_not_success / dasha_boundary_not_event_date 四个模板引用 references/mevg_chinese_full_layer_and_practice_audit_2026_08_26.md,本仓没有这个文件。tests/test_interpretation_template_registry.py 红。个人报告写作用这份注册表。

P2 · staging 部署链自 591ffd21 起没有成功过

Gitea 运行记录(本机只读 API):

运行 SHA 结果 我的判断
validate 01a45363 failure 门禁跑 npm test,当时 class-name-definition-contract
validate 734d2059 failure 同上
validate / publish 027e4b08 success 类名修复后
deploy 027e4b08 failure 原因看不到,需要仓库所有者贴日志
migrate c1e3f32a failure 同上;20260903010000_profile_ayanamsa.sqlgrant update (ayanamsa) … to authenticated 与其它 26 份迁移写法一致,角色由 deploy/postgres/001 / 002 保证,不像是它
validate c1e3f32a running(验收时)

staging health 仍是 591ffd21。整备的岁差设置、上游合并的所有东西,线上一个都还没落地。这条不归执行方修代码,归产品负责人先把 actions/runs/2358deploy)与 2360(migrate)失败步骤的最后 30 行贴出来。


决策记录

  1. Yogi / Avayogi 公式改为 PyJHora Yogi Sphuta 标准式:接受PM 判断:Sun+Moon 漏了 93°20′ 的 Pushya 起点常量,旧值是错的)。产品负责人若不同意,改回 ours 并在 PROGRESS 写明。
  2. d11_rudramsa 进入 finance 证据:接受,但顺序规则要写明(wealth_promise_strength 仍是主判据,分盘只作支持项)。
  3. confidence_capmedium-high 掉到 low不接受,视为回归,找到根因修回。
  4. 本单把 tests/test_consultation_workflow_domains.pytests/test_mcp_strict_workflow_finance.pytests/test_interpretation_template_registry.pytests/test_vedastro_external_technique_evidence.py 加进 run_quality_gate.py 的 CORE 列表;quick 门时长增加写进 PROGRESS。
  5. 上游同步任务 3 / 5 / 7 在本单合入之前不得开工(它们都建立在任务 6 的透传路径上)。

硬红线

  1. 不改 golden 的键路径来迁就;不删 strict_workflow_contractsreport_orchestrator.py:129 的判定规则不动。
  2. 改断言必须三栏(原值 / 新值 / 原因),且只允许在决策记录 1、2 覆盖的范围内改;决策 3 对应的断言不得改。
  3. jyotish_api_server.py 行数不增长;不动校正;不动数据库;不改 workflow。
  4. 不为了让模板注册表通过而删模板;缺的引用文档要么从上游镜像目录以只读快照方式带入(先过两份隐私扫描),要么把 source_refs 指向本仓已有文档并在 PROGRESS 说明。

任务分解

任务 1P1)· 恢复非原生主题的 degraded 合同

  1. _compute_consultation_workflow:重建 ai_prompt_pack 时保留原 evidence_snapshot 里已有的键(尤其 strict_workflow_contracts),或者只把新字段合并进现有 pack,不整体替换。
  2. 验收:tests/test_consultation_workflow_domains.py 12 条全绿;真实请求 timing / generalthematic_report.themes[*].statusdegradedupstream_contract_available 为真;career / marriage / wealth / health 仍 supported

任务 2P1)· finance 严格证据

  1. 按决策记录 1、2 更新 tests/test_mcp_strict_workflow_finance.pytests/test_vedastro_external_technique_evidence.py 的相关断言(三栏)。
  2. 定位 confidence_cap 降到 low 的检查并修回;该用例断言不改。
  3. CHANGELOG.md 新条目写明 Yogi Sphuta 公式修正与 D11 支持项;docs/BUG_HISTORY.md 记 confidence_cap 回归。
  4. 验收:两个测试文件红数回到 01a45363 基线(1 条存量 attaches_existing_interpretation_source_pack 与 3 条 vedastro 存量)或更少;存量红逐条写 BLOCKED 或修掉。

任务 3P2)· 模板注册表引用

按硬红线 4 二选一;验收 scripts/validate_interpretation_templates.pyvalid: true, problem_count: 0,测试绿。

任务 4P2)· 门禁覆盖

按决策记录 4 扩 CORE 列表;run_quality_gate.py --profile quick 本地退出 0tests/test_api_server_growth_contract.py::test_quality_gate_runs_api_server_growth_contract 类的守护测试仍绿。

任务 5(产品负责人)· 部署链

贴出 deploy 2358 与 migrate 2360 的失败日志;执行方据此另开修复或在本单追加。在 health gitCommit 前进到含岁差设置的 SHA 之前,docs/testing/ 的岁差实测不能做。

交付物

docs/tasks/PROGRESS-upstream-sync-fix-20260903.md;状态板本单一行;做不了的写 BLOCKED.md