docs(consult): evidence-card progress, device checklist, changelog (Skill 6.9.17)

PROGRESS with the final domain -> technique table, before/after
model-visible sizes over 3 public AA charts x 10 questions, answer-contract
keys kept/removed, red-line test list, lookup and clock design, telemetry,
assertion changes and test/build/gzip numbers. Device checklist for
parents/children/marriage/career, follow-up domain carry-over, D60 lookup
and waiting time. Task index row set to 待验收.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-09-27 02:54:11 +08:00
co-authored by Claude Opus 5.5
parent 48fb160fc9
commit 20b6473ccf
4 changed files with 229 additions and 1 deletions
+10
View File
@@ -1,5 +1,15 @@
# 印度占星 Skill 更新日志
## 2026-09-27 — 普通对话:回答只看这道问题需要的盘面数据;父母、子女分开看(待验收,Skill 6.9.17)
- 写回答的模型以前每轮要读约 13–14 万字的计算结果(一半是重复,其余多是研究用分盘、西洋层和状态说明)。现在只读一张「数据卡」:上升、十二宫、行星落宫与度数、功能吉凶与宫主、当前大运 / 子运 / 子子运起止、Narayana 当前段,加上这道问题所属领域要用的分盘、宫和行星。每轮约 7,300–15,500 字(其中领域检查清单 2,000–9,700 字,照旧随结果送达)。回答引用的上升、月亮、大运日期都直接抄自本轮计算。
- 全谱系照旧计算,「本轮技法」折叠面板的行数和内容不变,正式报告不受影响。
- 卡外的数据(比如用户点名问 D60、太阳回归、格局明细),模型可以从本轮已算好的结果里「多看一眼」,每轮一次,不重算;写作行会显示「正在多看一眼:D60 分盘…」。
- 「家庭」拆成「父母」和「子女」:问父母看 D12、4/9 宫、太阳、月亮;问孩子看 D7、5 宫、木星。「家里」「家庭氛围」这类问法仍是「家庭」。计算上两者仍按家庭主题算,不改引擎和数据库。
- 修正:引擎算出的当前 Narayana 段和子子运起止以前没送到模型(BUG-1054);调工具前没写完的半句过程说明会粘到回答开头(BUG-1059)。
- 每轮在日志里记 6 项(领域、卡版本、卡字数、token 估计、回答引用了卡上哪些字段名、赞踩),不记问题、回答和出生资料;赞踩目前不落库,先记为「无」。
- Skill 6.9.16 → 6.9.17:SKILL.md「关联技法完整调取」「0.0.1 全谱系真实调用」与 router 0.7 写明网页对话写答案读数据卡、完整结果留在回执 / 面板 / 报告。不改数据库。
## 2026-09-27 — 普通对话:回答改由看过星盘的那一步直接写(待验收)
- 以前本命提问算完盘后,看过计算结果的那一步写的回答被丢掉,用户看到的是另一个没看过星盘的步骤重写的(BUG-1053,staging 自 08-23 起;生产不受影响)。表现为回答说「没有这方面的盘面证据」,或引用和星盘页对不上的上升、月亮、宫位。
@@ -0,0 +1,169 @@
# PROGRESS · 普通对话改用「数据卡」· 2026-09-27
- 执行方式:直接执行(产品负责人授权子代理执行;Claude 事后独立验收)
- 基线:`origin/staging` `599fe7a9`(任务书提交)。开工时核对 `eef0cb74`(BUG-1053)与 `560d4fc2`(数据卡调研门禁补修)都是它的祖先(`base-ok`);`d8d03b5a` 同样在内。
- 分支:`codex/consult-evidence-card-20260927`,工作树 `.worktrees/consult-evidence-card-20260927`(本地提交,未推送)
- BUG 编号:修 BUG-1054;新缺陷 BUG-1059(BUG-1055~1058 由并行的校正任务预留,开工与提交时核对 `docs/BUG_HISTORY.md` 最大号为 1054)
- Skill:`jyotish-vedic-astrology` 6.9.16 → 6.9.17
## 提交
| 阶段 | 提交 | 内容 |
| --- | --- | --- |
| T1 | `128f67d6` | BUG-1054:`timingKeys` 放行 Narayana `md/ad/pd` 与 `pratyantar_dasha_timeline`;真实引擎 golden(3 张公开 AA 盘)+ 回归 |
| T2 | `4651f8bc` | 新领域 `parents` / `children`(引擎仍走 `family`) |
| T3 | `ffa107a5` | 数据卡构建器 + 模型可见视图(答题契约 + 卡),去掉单领域 `consultations` 整包复制 |
| T4 | `53b69498` | 系统提示与 Skill 对齐,Skill 6.9.17 |
| T5 | `dabc9652` | 只读补取工具(每轮一次、请求级缓存);回答中途补取的防截断 / 防重复;BUG-1059 |
| T6 | `b3f84fc8` | 6 项反馈记录(只写日志) |
| T7 | 本提交 | BUG 历史、CHANGELOG、DESIGN / VOICE、本记录、真机清单、任务索引 |
## 结论
| 项 | 结果 |
| --- | --- |
| T1 BUG-1054 | 完成。golden 回归逐盘断言 Narayana 当前 md/ad/pd(星座、主星、年数、起止年龄)与 `remaining_years`、PD 当前段与下一段起止原样出现在 timing 卡;修复前 2/4 失败。状态 resolved(部署后补 run 号) |
| T2 父母 / 子女 | 完成。注册表(中文名 父母 / 子女,别名按任务书)、方法学(无命名清单,如实上报)、`DOMAIN_MUST_USE_LAYERS`(family / parents / children)、zod 枚举与工具说明、回执与思考计划中文名。引擎请求发的是 `family` 的整套路由合同(Python `consultation_plan_contract.py` 逐项校验),不改 Python;会话主题写入口只收原十个(`chat_sessions.theme` CHECK 不动,不改数据库) |
| T3 数据卡 | 完成。`frontend/src/lib/consultation-evidence-card.ts`(纯函数);模型只看答题契约 + 卡;30 次单领域测量 7,278–15,550 字(改前 132,782–143,603),不含方法学 5,241–7,239;超 12,000 的 9 次全是事业 / 婚恋 / 财富的方法学清单(见「体量」);「本轮技法」逐行一致 |
| T4 提示与 Skill | 完成。「用尽每个已执行层」「must_use_layers 是清单」「technique_audit_table 是调用记录」三句改写为「以数据卡为准,卡外可补取一次」;SKILL.md 与 router 0.7 同步,版本 6.9.17 |
| T5 补取 | 完成(未降级)。见「补取设计与双钟」 |
| T6 反馈 | 只做日志(让步项):赞踩现在只在浏览器状态里,没有落库;`feedback` 恒为 `none`,建表与后台汇总另开单 |
| T7 记录 | 完成 |
## 最终领域 → 技法对照(数据卡)
每张卡都有**基础段**:上升(原始度数)、十二宫星座、行星落宫(星座 / 宫 / 度数 / 星宿 / 逆行 / 庙旺)、功能吉凶(吉 / 凶 / 中性 / Yogakaraka / 宫主归属)、Vimshottari 当前大运 / 子运 / 子子运起止与下一段、大运内全部子运起止、Narayana 当前 md/ad/pd(星座、主星、年数、起止年龄)与剩余年数。**领域段**如下(单一来源:`EVIDENCE_CARD_SPECS`,移植自调研草案 `CARD_SPECS`):
| 领域 | 引擎路由 | 分盘 | 宫(星座 / 宫内星 / 宫主) | 重点行星 | Arudha | Karaka | 其他层 | 与调研草案 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 事业 career | career | D10 | 10 | — | A10 | AmK | 格局、行运、Shadbala | 同 |
| 婚恋 marriage | marriage | D9 | 7 | Venus、Jupiter | UL、A7 | DK | 行运 | 同 |
| 财富 wealth | wealth | D2、D11 | 2、11、9、5 | — | — | — | 格局、Ashtakavarga(这几宫 SAV + 最强 / 最弱星座)、Shadbala | 同 |
| 健康 health | health | D6、D8、D30 | 6、8 | — | — | — | 行运、Shadbala | 同(D30 按 Python 焦点纳入) |
| 学习 education | education | D5、D24 | 5、9 | Mercury、Jupiter | — | — | — | 同(D5 按 Python 焦点纳入) |
| 迁居 migration | migration | D4、D12 | 4、12 | — | — | — | — | 同 |
| 家庭 family | family | D7、D12 | 4、5、9 | — | — | — | — | 同(仅兜底泛问) |
| 父母 parents | **family** | D12 | 4、9 | Sun、Moon | — | — | — | 同 |
| 子女 children | **family** | D7 | 5 | Jupiter | — | PK | — | 同 |
| 年运 annual | annual | D1 | 1 | — | — | — | 行运、Chara 大运 | **新增**(草案没有) |
| 时运 timing | timing | D1、D9 | — | Saturn、Jupiter | — | — | 行运、Chara 大运 | **新增**(草案没有) |
| 综合 general | general | D9、D10、D2 | 1、10、7、2 | — | A10 | — | 格局、行运、Ashtakavarga、Shadbala | 同 |
年运 / 时运草案没有卡,本单按注册表与必用层补了一版(双轨大运已在基础段;D1 / D9 作分盘核对、行运、Chara 大运),请产品与懂印占的人确认。
## 模型可见内容:前后对比(3 张公开 AA 盘 × 10 问法,均值)
改前 = 调研投影脚本在 `599fe7a9` 上对同一批引擎输出的实测;改后 = `scripts/research/measure_consult_evidence_card.ts` 跑生产计算工具(引擎输出取调研缓存)。字符数 = `JSON.stringify` 长度;token 估计 = 字符 / 3.5(调研口径,不是供应商分词器)。
| 问法 | 改前 | 改后 | 其中数据卡 | 答题契约等 | 方法学清单 | 不含方法学 | 改后 / 改前 | 3 盘最大 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| 事业 | 142,487 | 13,416 | 5,312 | 777 | 7,313 | 6,088 | 9.4% | 13,494 |
| 婚恋 | 142,766 | 15,476 | 4,980 | 775 | 9,708 | 5,753 | 10.8% | 15,550 |
| 财富 | 139,332 | 13,103 | 5,471 | 777 | 6,841 | 6,247 | 9.4% | 13,125 |
| 健康 | 138,816 | 10,048 | 5,449 | 813 | 3,772 | 6,261 | 7.2% | 10,135 |
| 学习 | 135,229 | 7,473 | 4,651 | 785 | 2,024 | 5,434 | 5.5% | 7,479 |
| 迁居 | 135,309 | 7,459 | 4,596 | 825 | 2,024 | 5,420 | 5.5% | 7,473 |
| 家庭 | 133,114 | 7,519 | 4,666 | 818 | 2,021 | 5,483 | 5.6% | 7,535 |
| 综合 | 135,207 | 9,213 | 6,397 | 780 | 2,022 | 7,176 | 6.8% | 9,276 |
| 父母 | 133,096 | 7,298 | 4,452 | 810 | 2,022 | 5,261 | 5.5% | 7,312 |
| 子女 | 133,098 | 7,313 | 4,465 | 812 | 2,023 | 5,275 | 5.5% | 7,329 |
- 改后约 2,100–4,400 token(改前约 3.8–4.1 万)。
- **超 12,000 的说明**:事业、婚恋、财富 3 × 3 = 9 次超出,原因全部是方法学清单(`methodology`:共用基线 + `career/relationship/finance-timing-strict` + `event_judgment_*.md`,从 live Skill 原文引用,6,841–9,708 字)。它是系统提示点名的顶层键(红线 1),也是 BUG-284 / BUG-287 以来随结果送达的领域检查清单,本单没有截短或拿掉;不含方法学时 30 次全部 ≤ 7,239。若要压到 12,000 以下,只能动 Skill 清单的送达方式,需产品另定。
- 两领域一轮(同一盘):子女 + 学习 9,117(不含方法学 7,067);事业 + 财富 23,921(不含方法学 11,765,方法学 12,141);婚恋 + 事业 26,148(不含方法学 11,125)。基础段只放一份;两个领域段各自带自己的格局 / Shadbala 等层。
- 数据卡本身 4,452–6,461 字,比调研草案(3,169–5,750)多约 700–1,300 字:基础段行星加了度数、星宿、逆行、庙旺(红线 3「原始度数」),大运加了子子运与大运内子运序列(草案时被 BUG-1054 裁空)。
## 答题契约(红线 1):保留与去掉
| 键 | 模型可见 | 说明 |
| --- | --- | --- |
| `status` | 保留 | 值与完整结果一致(测试逐项比) |
| `evidence_contract.answer_policy`(`can_answer_direction` / `can_answer_precise_timing` / `should_lead_with_limitations`,多领域时的合并字段) | 保留 | 原样;多领域仍是最严合并 |
| `evidence_contract.hard_blockers` / `missing_route_layers` / `available_layers` / `user_facing_limitation` | 保留 | 提示里「只有 hard_blockers 非空才说计算失败」「available_layers 里有就不许说没算」照旧 |
| `claim_cards` | 保留 | 内容换成数据卡:`natal_foundation`(基础段本命)、`timing`(基础段时间)、`domain`(领域段) |
| `rectification.boundary` | 保留 | 原样 |
| `methodology` / `domains` / `omitted_domains` / `success` / `question` / `route` | 保留 | 原样 |
| `consultations` | 仅多领域 | 每个领域自己的答题契约(`domain / route / status / evidence_contract / rectification`),不再带整包;单领域的整包复制去掉 |
| `evidence_card`(新) | 新增 | 卡版本、领域、D4 那一行、卡外可补取段名、`gaps` |
| `evidence_contract.technique_audit_table` / `varga_spectrum` / `western_spectrum` / `must_use_layers`、`validation` 卡、`presentation` | 去掉(D3) | 照旧计算并留在服务端:回执与「本轮技法」面板、思考计划、补取工具、报告都用服务端完整结果。`presentation.required_blocks` 里写着 `technique_audit_table`,与「正文不写审计表」矛盾,一并留在服务端 |
| `reference_transparency`、`chart`、`local_layers` | 本来就不是工具结果的顶层键 | 提示里的相关条款是条件句或已改指向卡 |
## 红线测试清单
| 红线 | 测试 |
| --- | --- |
| 1 答题契约 | `consult-evidence-card-20260927`「the model sees the answer contract and the card…」「a two-domain turn…」;`consultation-agentic-runtime`「the merged contract exposes every policy field…」(原测试,不改) |
| 2 事实逐字(golden) | `consult-evidence-card-20260927`「the card copies the engine's own facts verbatim」(上升星座 / 度数、月亮星座 / 宫 / 度数、MD/AD/PD 主星与起止、Narayana 星座与起始年龄、功能吉凶、D12 / D7 / D9 / D10 上升与全部行星落点,3 盘)、「every card value is a value the projection or the engine already holds」(卡上每个标量都能在投影或引擎值里找到,12 领域 × 3 盘,gaps 为空);`consult-projection-timing-20260927`(T1) |
| 3 Part B 覆盖 | `consult-evidence-card-20260927`「every domain's card covers Part B…」(12 领域 × 3 盘:双轨大运、规格里每张分盘、功能吉凶 + 宫主、原始度数与日期) |
| 4 BUG-1053 不回退 | `consult-evidence-lookup-20260927`:写答案那次调用的提示里有卡(`evidence-card-v1`、引擎 PD 起始、Narayana 星座、答题契约,且无审计表 / 西洋 / 研究分盘键);工具前文字不进回答;`content-filter` → `answer_truncated` 不扣点;续写提示带卡;补取在答题阶段的 5 条(见下)。`consult-single-pass-answer-20260927` 15 条原样通过 |
| 「本轮技法」一致 | `consult-evidence-card-20260927`「the 「本轮技法」 rows are exactly the rows the full result produced before the card」(3 盘 × 单领域 / 两领域,43 行) |
| 7 隐私 | `consult-evidence-card-telemetry-20260927`(字段白名单、严格 schema、虚构姓名 / 邮箱 / 生日 / 问题与匹配到的日期都不进日志) |
| 体量 | `consult-evidence-card-20260927`「model-visible size falls to card scale…」(golden 3 盘 × 12 领域:不含方法学 ≤ 12,000;除事业 / 婚恋 / 财富外整体 ≤ 12,000;全部 ≤ 18,000) |
## 补取设计与双钟(T5,红线 4)
- 工具 `read-consultation-evidence`,参数 `section` 是封闭枚举:20 张正式分盘(`varga:D1`…`varga:D60`)、`varga:research_dn`、`varga:extended`、`western:natal` 与 10 个西洋技法、`yogas`、`ashtakavarga`、`shadbala`、`transits`、`chara_dasha`、`arudha_padas`、`chara_karakas`、`kp_cusps`、`gulika`、`kakshya`、`vimshottari_mahadashas`、`domain_thematic_evidence`。卡上已有的段不列进 `evidence_card.supplementable_sections`。
- 只读请求级缓存:计算工具完成时把本轮各领域的投影与引擎上下文放进同一个 `createConsultationTools` 闭包;未命中返回 `{status: "unavailable", reason: "calculation_not_in_request_cache"}`,引擎没算出这一段返回 `section_not_computed`,都不重算。每轮第二次起返回 `refused / lookup_limit_reached`。回执记一条 `kind: tool, name: read-consultation-evidence`(成功 completed;未命中、未算、超次 failed + 机器码);活动行写「正在多看一眼:D60 分盘…」(复用写作行,见 DESIGN.md / VOICE.md)。
- 第 0 步仍只开放计算工具(`activeTools`),补取只可能发生在计算结果到手之后,也就是答题阶段。
- **双钟**:补取不开新钟、不重置钟。计算结果到手时循环已交给 70 秒答案钟(`onAnswerPhase` → `answerSignal()`,只起算一次);补取那一步与之后写回答的步都在这只钟里,110 秒工具钟过期也不掐它(测试:答案钟 300 ms 时补取 + 慢写 → `answer_truncated` 且答案钟只起算一次;工具钟 150 ms 过期后补取 + 写完 → 正常完成)。补取本身只读内存,不用信号。
- **已放出正文不截断、不重复**:
- 补取前的过程说明按 BUG-1053 规则随那一步丢掉;
- 若模型先写了已放出的正文(过了第一个标题或 160 字)再补取:这一步没写完的半句照样放出(BUG-1059 的修法,保证不截半句);下一步若把已放出的开头原样重写,从头逐字比对,连续 40 字(`LOOKUP_RESTART_MATCH_CHARS`)相同即认定为重写,重复部分边到边丢,记 `answer-restart-dropped` 校验步;不足 40 字就分叉的照常放出;接着写的正常放出;
- 结算仍看「最后一个写出正文的步」:接着写完 → `stop` → 完成扣点;补取后一个字不写就结束 → 以写正文那一步的 `tool-calls` 收尾 → `answer_truncated`、不扣点、已放出正文保留(回答确实停在一次工具调用上,按未完成处理)。
- 限制:模型换了措辞重写(不是逐字)无法识别为重复;系统提示与工具说明都要求「写正文之前调用」,工具结果里也带一句「若已开始写,就从停下处接着写,不要重复」。
- 续写:`length` 续写的证据 = 卡(计算结果);本轮用过补取时并上 `evidence_lookup`。
## 反馈记录(T6)
每轮本命回答结算后,另记一条 `[agent-observability]`:`{runId, agentVersion: "consultation-evidence-card-v1", evidenceCard: {domains, cardVersion, cardChars, cardTokenEstimate, citedFieldIds, feedback}}`。
- 存在哪:只在服务端日志(console),不落库;`runId` 是本次请求 id,这条记录里没有会话 id、用户 id。
- 引用判定按调研 R5:字段值是 ISO 日期、带小数的度数、或 ≥ 8 字符的「行星 in 星座」短语,原样出现在**已完成**的回答里才算;匹配到的原文丢掉,只留字段名(如 `base.timing.vimshottari.pratyantardasha.start`、`domain.vargas.D12.lagna`,领域名不进字段名)。失败 / 截断的回答不数引用(`onError` 形状不变,`consultation-stream-recovery` 合同照旧)。
- 赞踩:前端赞踩只在页面状态里(`page.tsx` 的 `messageFeedback`),没有接口也没有表,所以 `feedback` 恒为 `none`;要按轮关联需新表与接口,另开单。
## Skill 版本
- `SKILL.md`「关联技法完整调取」:「信息密度不受成本削减」后补上完整结果留在回执 / 「本轮技法」 / 报告,网页普通对话写答案读数据卡(基础段 + 领域段),卡外只读补取一次;口语回答改为先用卡上的原始结构。「0.0.1 全谱系真实调用」同步一句。`references/strict-workflow-router.md` 0.7 第 1、6 条补网页对话的落法。**计算口径(BUG-287 全谱系)不变**,`consultation-spectrum-parity` 钉的 SKILL.md 三句原样保留。
- 版本:`SKILL.md` frontmatter 与版本行 6.9.17、`jyotish_vedic/__init__.py` `__version__`(包版本常量,不是引擎逻辑;`tests/run_all.py`「Package version is consistent」三栏更新)。该 Skill 是 live 包,不在 `skills/skill-package-registry.json` 里,registry 未改;旧版快照目录早在 `5cbc2d00` 隐私清理时删除,没有可保留的 deprecated 目录。
## 改动的既有断言(原值 / 新值 / 原因)
| 文件 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| `tests/test_consultation_domain_registry.py` | TS 领域 id == Python 十个;别名表完全相等 | TS 引擎领域 == Python 十个;`parents/children` 引擎路由为 family;Python 每个别名在 TS 里落到的领域,其引擎路由等于 Python 归一结果;TS 独有别名只落在 parents/children | D2,不改 Python |
| `tests/test_consult_evidence_card_research.py` | `"family" not in must_use`;单领域整包复制字面量存在 | family/parents/children 有必用层、父母子女无命名清单;复制字面量不存在、`toModelEvidenceView` 存在 | 调研快照的缺口已按任务修掉 |
| `frontend/tests/consultation-domain-registry.test.ts` | 10 个领域;遍历全部领域都能落库 | 12 个领域(+两条无出生分钟问法);会话主题 10 个能落库、parents/children 不能 | D2;会话主题 CHECK 不动 |
| `frontend/tests/consultation-domain-migration.test.ts` | CHECK 值 == `consultationDomainIds` | CHECK 值 == `consultationEngineDomainIds`;差集正好是 parents/children | 同上 |
| `frontend/tests/consultation-workflow-contract.test.ts` | `toModelOutput(agentContext, domainPlan)`;`continueAfterLength(pendingAnswer(), calculationEvidence)`;`return { "run-jyotish-consultation": consultationTool }` | 多传 `domain`;续写带 `evidence`(卡 + 可选补取结果);工厂同时返回补取工具 | T2 / T5 |
| `frontend/tests/consultation-agentic-runtime.test.ts`「identical natal projection is carried once」 | 顶层只剩 natal 卡,各领域在 consultations 里带 timing / domain;本命不一致时顶层为空 | 顶层固定三张卡(基础段一次)、consultations 只留契约;本命不一致的领域段自带 `base` 并记 `base_differs` | D1 |
| `frontend/tests/consultation-voice-contract.test.ts` | `Skip an executed layer…`;`must_use_layers is the executed shortlist` | `Skip a card fact…`;「The evidence card is the shortlist」+「call read-consultation-evidence once…」,并反向锁旧句 | T4 推翻「用尽每个已执行层」 |
| `frontend/tests/consultation-spectrum-parity.test.ts` | `must_use_layers is the executed shortlist` | 「The evidence card is the shortlist for this answer」 | 同上;计算口径断言不变 |
| `frontend/tests/consultation-context.test.ts` | 提示里有 `evidence_contract.technique_audit_table` | 提示里没有它,改为「full invocation record … stays with the server」 | D3 / T4 |
| `tests/run_all.py` | `__version__ == '6.9.16'` | `'6.9.17'` | Skill 文本同步 |
## 测试与构建
(Node 22.14;无 Docker,DB / 部署套件按基线逐条比对)
| 项 | 基线 `599fe7a9` | 交付 `b3f84fc8` | 结论 |
| --- | --- | --- | --- |
| `tsc --noEmit` | — | 0 错 | 通过 |
| `npm run lint` | 0 error / 127 warning | 0 error / 127 warning | 通过(触及文件里唯一的 warning `sliceAddedVisibleText` 是基线已有) |
| `npm test`(全量,Node 22) | 4093 条:4041 过 / 24 败 / 28 跳 | 4136 条:4084 过 / 24 败 / 28 跳 | 失败名单与基线逐条相同(24 条全是需要 Docker / PostgreSQL 的数据库与部署套件);按名单比对 0 条消失、新增 43 条 |
| 中间阶段 | — | T2:4108 条、失败同基线;T3:4117 条、失败同基线 | 逐段 0 新增失败、0 消失 |
| Python 门禁集(`gate-pytest-args` + `test_consult_evidence_card_research.py` + `test_consultation_domain_registry.py`) | 953 过 / 1 跳(门禁集 + 调研);`test_consultation_domain_registry.py` 基线 15 过 | 968 过 / 1 跳 | 通过(含 `test_api_server_growth_contract.py`:未改 `jyotish_api_server.py`,新增 Python 文件只复用既有 handler,未新增伪造点,注释里也没有该字面量) |
| 读 SKILL.md 的 Python 测试(skill_hard_constraints 等 12 个文件) | 6 条失败(`test_character_level_inventory_manifest` 5 条、`test_research_governance_docs` 1 条,均为本机缺外部资料目录) | 同样 6 条 | 与基线一致 |
| `tests/run_all.py` | — | 102/102 | 通过 |
| `npm run build -- --webpack` | `/`、`/chart`、`/ephemeris`、`/people` ○ Static | 同 | 通过 |
| 首屏 gzip(level 9) | rootMainFiles 4 个 131,011 B;index.html 引用 36 个 662,657 B | 131,011 B(0.00%);662,898 B(+0.04%) | 通过 |
| `frontend/frontend/` 残留 | — | 无 | — |
## 偏离与未做
- 让步:T6 只做日志(赞踩未落库,`feedback` 恒 `none`)。T5 未降级。
- 年运 / 时运的领域段是本单补的(草案无),见对照表。
- 「追问未点领域时沿用上一轮领域」:现有行为保持(模型从会话历史选领域;不填 `domains` 时服务端用会话主题)。本单没有加服务端推断,真机清单 B 组验证。
- `/admin` 里没有显示咨询领域的地方(检索 `src/app/admin`、`src/components/admin` 无命中),中文名只出现在回执 / 思考计划 / 时间线,均取自注册表。
- 两领域一轮的模型可见内容 9,117–26,148 字,其中方法学最多 15,008 字;单领域 12,000 的目标未覆盖两领域,这里如实记数。
- 失败 / 截断的回答不数引用字段(保持 `onError` 合同不变)。
- 调研脚本 `scripts/research/project_consult_model_context.ts` 仍按改前形状复现基线,作为「改前」快照保留;「改后」用新脚本 `measure_consult_evidence_card.ts`。
+1 -1
View File
@@ -130,7 +130,7 @@
| — (产品 09-27 拍板 D1–D4,直接执行) | [PROGRESS](PROGRESS-home-landing-blank-20260927.md) | **登录后 / 裸 `/` 落空白首页**:真机登录后在「首页」提问其实问进了上一次生时校正。删登录返回存根(401 / 次级页链接写、登录后写回 `?c=` 打开),裸 `/` 不再落最近会话,一律当前人物的空白首页(复用空草稿);`?c=` / `?new=1` / 对话内刷新不变;推翻 BUG-1038 存根与 BUG-599 默认落点 | 已验收(真机欠) | `codex/home-landing-blank-20260927`(BUG-1052,本地未推) |
| — (产品 09-26 口头拍板 D1–D3,直接执行) | `PROGRESS-consult-answer-truncation-20260926.md` | **普通咨询回答写到一半被掐断仍扣点(BUG-1051,复发自 BUG-305)**:工具循环与写回答共用 110 秒 signal;Mastra 1.50 超时不抛错(`abort` 块 + `finish(tripwire)` 后正常关流),结算只认抛错与 `length`。D1 写回答自有 70 秒时钟(首用起算,续写 / 回答重试共用,最坏 180 秒,`maxDuration` 240);D2 写回答的最后一个流不是 `stop` 且有正文 → `answer_truncated`、不扣点、记 abort 步、不冲半句,`length` 续写不变;D3 观测加 `composeFinishReason` / `composeAborted` / `answerVisibleChars` | 已验收(真机欠) | `codex/consult-answer-truncation-20260926`(本地,未推送);新回归 15 条用真实 Mastra `Agent`(修复前 11 条红);全量失败名单 0 新增;Python 948/1;`/` ○、gzip 0%;真机清单 `docs/testing/consult-answer-truncation-20260926.md` |
| `TASK-consult-evidence-card-research-20260927.md` | `PROGRESS-consult-evidence-card-research-20260927.md` | **普通对话数据卡调研**:引擎输出逐项分五类计量(现约 4 万 token、父母问题相关约 3.5%);四处领域→技法来源对账并起草各领域数据卡(家庭拆父母/子女);卡体量与逐字一致性;按卡算的提速空间;反馈迭代埋点方案。只调研不改线上 | 已验收(待产品拍板 7 项) | `codex/consult-evidence-card-research-20260927` 快进 staging;报告 `docs/research/consult_evidence_card_research_2026_09_27.md`;投影缺口记 BUG-1054 investigating |
| `TASK-consult-evidence-card-20260927.md` | `PROGRESS-consult-evidence-card-20260927.md` | **普通对话改用数据卡**(产品 09-27 同意调研 7 项 + 补取一次):先修 BUG-1054 投影丢 Narayana 当前段/PD;新增父母/子女领域(引擎仍走 family);模型只读答题契约 + 基础段 + 领域段,研究/西洋/状态/不适用留后台;MEVG/真实案例只留一行;补取工具每轮 1 次;反馈 6 项日志 | 待领取 | 基线须含 eef0cb74(BUG-1053)与 560d4fc2 |
| `TASK-consult-evidence-card-20260927.md` | `PROGRESS-consult-evidence-card-20260927.md` | **普通对话改用数据卡**(产品 09-27 同意调研 7 项 + 补取一次):先修 BUG-1054 投影丢 Narayana 当前段/PD;新增父母/子女领域(引擎仍走 family);模型只读答题契约 + 基础段 + 领域段,研究/西洋/状态/不适用留后台;MEVG/真实案例只留一行;补取工具每轮 1 次;反馈 6 项日志 | 待验收 | `codex/consult-evidence-card-20260927`(本地 7 个提交,未推送);BUG-1054 resolved、新缺陷 BUG-1059;Skill 6.9.17;真机清单 `docs/testing/consult-evidence-card-20260927.md` |
| — (产品 09-27 拍板 D1–D3,直接执行) | `PROGRESS-consult-single-pass-answer-20260927.md` | **普通咨询回答没看过星盘(BUG-1053,引入 `04463e9a`,生产不受影响)**:本命主循环工具结果后那一步看得到证据、正文却被丢弃,用户看到的是另开的 compose 流(只有历史 + 问题、判断依据恒空)写的。D1 删 compose / interpret / drain,主循环最后一步的正文即回答(按步取答,调用工具的那一步正文整段丢);写作要求搬进用户轮;续写带计算结果;工具 110 秒不变,拿到计算结果后循环交给 70 秒答案钟,最坏 180 秒;BUG-1051 结算规则保留(按写回答那一步判定)。D2 观测字段名不变、含义改为写回答那一步 | 已验收(真机欠) | `codex/consult-single-pass-answer-20260927`(本地,未推送);新回归 15 条用真实 `getJyotishAgent` + 记录提示词的假模型 + golden 计算数据;全量失败名单 0 新增;Python 948/1;`/` ○、gzip +0.24%;真机清单 `docs/testing/consult-single-pass-answer-20260927.md` |
| `TASK-scroll-anchor-hook-fixes-20260926.md` | `PROGRESS-scroll-anchor-hook-fixes-20260926.md` | **滚动锚两处老问题**:直接打开已有会话时监听未挂上(BUG-1043)、校正长回答钉顶后因 96px 阈值被拉到底(BUG-1044)。排在 BUG-1042 合入后。挂载改由容器元素本身驱动(每次提交比对元素 / active / resetKey);钉顶只由用户滚动手势解除 | 已验收(Claude 09-26 直接执行:子代理复现两处根因并修复;Claude 独立复验 tsc/lint 0、全量 3970 条失败名单与基线逐条一致、四路由 ○、gzip 不变;iOS 惯性滚动留真机清单) | `da2613ff`(随 `f1d16405` 部署,health 一致) |
| `TASK-latest-turn-actions-gap-20260926.md` | — | **最后一轮正文与点赞 / 踩之间空大半屏**:BUG-930 钉顶留白(`min-height: 视口 − 本轮开头`)加在 `.message-assistant` 上,把兄弟节点 `.message-actions` 推到留白之后;改为加在整轮外层,按钮紧贴正文、空白落在后面;不动滚动 hook | 已验收(Claude 09-26 直接执行:子代理实现,Claude 独立复验 tsc/lint 0、全量 3961 条失败名单与基线逐条一致、四路由 ○、gzip 不变;CDP 实测间距 450–600px → 23px,钉顶仍在) | `080ea5ca`(已部署 `509987b9`,health 一致) |
@@ -0,0 +1,49 @@
# 真机清单:普通对话数据卡(2026-09-27)
对应任务书 `docs/tasks/TASK-consult-evidence-card-20260927.md`。部署到 staging 后照做;自动化覆盖不到的只有「真实模型怎么用这张卡」和「等待时间」。
准备:用一个出生时间已确认(能看「星盘」页)的账号。每条都在新的普通对话里问。默认模型做一遍,再把会话模型换成 gpt-5.6-luna 做一遍。
## A. 回答里的盘面事实与「星盘」页一致
每问完一条,打开「星盘」页,逐项核对回答里提到的:上升星座、月亮星座和宫位、当前大运(主星与起止日期)、子运 / 子子运日期、Narayana 当前星座、问题对应的分盘上升。
| # | 问法 | 应看到 | 通过 |
| --- | --- | --- | --- |
| A1 | 我和父母关系如何 | 回答围绕父母;提到的分盘是 D12,宫位是 4 宫 / 9 宫;日期与「星盘」页一致 | ☐ |
| A2 | 我和孩子的缘分怎么样 | 回答围绕子女;提到 D7 与 5 宫、木星;不把父母的内容混进来 | ☐ |
| A3 | 我的感情和婚姻怎么看 | 提到 D9;婚恋清单的写法照旧(心动 / 成对 / 领证分开) | ☐ |
| A4 | 未来一年事业该关注什么 | 提到 D10、A10、10 宫;大运日期对得上 | ☐ |
| A5 | 家里的氛围怎么样 | 仍按「家庭」回答(家里整体),不会只谈父母或只谈孩子 | ☐ |
回答里不应出现:「技法审计表」「technique_audit_table」「VedAstro」「数据卡」「补取」这类内部词;不应把折叠的「本轮技法」表抄进正文。
## B. 追问沿用领域
| # | 操作 | 应看到 | 通过 |
| --- | --- | --- | --- |
| B1 | 在 A1 那条对话里接着问「那明年呢」 | 仍在谈父母,时间落到明年;大运 / 子运日期仍与「星盘」页一致 | ☐ |
| B2 | 在 A4 那条对话里接着问「那明年呢」 | 仍在谈事业 | ☐ |
## C. 点名卡外数据:「多看一眼」
| # | 问法 | 应看到 | 通过 |
| --- | --- | --- | --- |
| C1 | 我的 D60 分盘怎么看 | 写作行短暂出现「正在多看一眼:D60 分盘…」;回答里的 D60 上升与「星盘」页 D60 一致 | ☐ |
| C2 | 我的太阳回归盘有什么要注意的 | 出现「正在多看一眼:太阳回归…」 | ☐ |
| C3 | 同一轮里再追一个卡外的东西(例如先问 D60 又问 D45) | 每轮最多多看一次;另一个会说这次没取,不会编 | ☐ |
回答正文不应出现重复的一段开头(多看一眼之后从头再写一遍的内容会被服务端去掉)。
## D. 等待与收口
| # | 看什么 | 应看到 | 通过 |
| --- | --- | --- | --- |
| D1 | 从发出到第一段正文出现的时间 | 与改前差不多或更快(模型要读的字少了约九成);记下秒数 | ☐ |
| D2 | 回答写完 | 正常扣点;「本轮技法」折叠面板的行数与改前同一问法一致(约 43 行) | ☐ |
| D3 | 回答没写完(如网络中断) | 仍提示「回答未完成」、不扣点 | ☐ |
## 记录
- 环境缺口:本机没有真实模型凭据,真实模型是否按卡引用、是否只在需要时多看一眼,只能在这里看。
- 日志(运维可看):每轮一条 `[agent-observability]`,`agentVersion` 为 `consultation-evidence-card-v1`,只含领域、卡版本、卡字数、token 估计、引用字段名、赞踩(目前恒为 none)。