diff --git a/docs/tasks/README.md b/docs/tasks/README.md index a94dc263..b904daaf 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -131,6 +131,8 @@ | — (产品 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 项日志 | 已验收(真机欠) | `75a1844c`…`20b6473c`(T1–T7);BUG-1054/1059;Skill 6.9.17;遗留 3 项见 PROGRESS 验收节 | +| `TASK-consult-evidence-card-v2-20260927.md` | `PROGRESS-consult-evidence-card-v2-20260927.md` | **数据卡 v2(采纳占星顾问意见)**:基础段加 D9 摘要;年运卡加年盘(年主/Muntha/Mudda/Tajika 相位,参数敏感);时运加罗睺计都、双重过运、木土 SAV/BAV、分盘随领域;Chara Dasha 移出卡;事业/婚恋/财富按逐项标注增补,清单精简为「必看+分三层+禁写」;引擎接入已有模块(Python) | 待领取 | 串行在前;性别单在后 | +| `TASK-consult-gender-optional-20260927.md` | `PROGRESS-consult-gender-optional-20260927.md` | **星盘资料加性别(选填)**:本人与星盘档案可填女/男/不填;婚恋卡按性别取夫星/妻星,未填两边都看;加可空列(test:db 以门禁为准) | 待领取 | 串行在数据卡 v2 之后 | | — (产品 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 一致) | diff --git a/docs/tasks/TASK-consult-evidence-card-v2-20260927.md b/docs/tasks/TASK-consult-evidence-card-v2-20260927.md new file mode 100644 index 00000000..1690d1ca --- /dev/null +++ b/docs/tasks/TASK-consult-evidence-card-v2-20260927.md @@ -0,0 +1,96 @@ +# TASK · 数据卡 v2:按占星顾问意见调整各卡,把引擎已有但未接入的技法接进普通对话(2026-09-27) + +## 基线 + +- 开工时 `git fetch` 后的最新 `origin/staging`(须含数据卡 v1 `cd4dde9d` 与校正 grounding `261d7b2e`),写进 PROGRESS。 +- 分支 `codex/consult-evidence-card-v2-20260927`,工作树 `.worktrees/consult-evidence-card-v2-20260927`。 +- **串行**:`TASK-consult-gender-optional-20260927`(性别选填)排在本单之后,基线须含本单。 + +## 背景与依据 + +- 数据卡 v1 已上线(`docs/tasks/PROGRESS-consult-evidence-card-20260927.md`)。产品就「年运 / 时运卡」「三类检查清单」「基础段是否带 D9」请教了懂印度占星的顾问,请教单见 https://claude.ai/artifact/TTLEGmYt6m9R9sFnzynVJU 。顾问意见以本仓 `skills/jyotish-vedic-astrology/references/strict-workflow-router.md`、事件裁决文档与 2026-09-15 能力真值索引为据,产品 2026-09-27 全部采纳。 +- 核实(Claude,2026-09-27,数据卡调研缓存的 `_compute_consultation_workflow` 原始输出,公开 AA 盘,VedAstro 关): + - 普通对话输出里**没有**:Tajika / Varshaphala / Muntha(只出现在 `technical_debt_contract` 与 `technique_debt` 清单里)、Mudda Dasha、双重过运结论、Punarphoo 判定、Argala、Karakamsha、Vargottama 与 D9 旺弱标记。 + - 有:`machine_evidence_packet.sections.sahams`(婚恋问法含 Vivah)、Ashtakavarga SAV/BAV、KP 结构、Chara Dasha、`is_day`、Arudha / Upapada。 + - 引擎代码里已有模块:`scripts/tajika.py`、`scripts/varshaphala.py`、`scripts/muntha.py`、`scripts/annual_tajika_pack.py`(Mudda)、`scripts/punarphoo.py`、`scripts/argala.py`、`scripts/jyotish_engine.py`(vargottama)、`scripts/jaimini.py`(karakamsha);双重过运相关逻辑见 `scripts/reading_orchestrator.py` / `scripts/unified_consultation_orchestrator.py`(执行方先定位真正的原生实现)。`unified_consultation_orchestrator.py` 里 annual 主题已声明需要 `TAJIKA`,执行方核实 annual 问法下是否已有产出。 + - 产品当前**不记录用户性别**(数据库与资料页均无),性别由串行的下一单处理;本单婚恋卡写「性别未知」并按下文规则处理。 + +## 决策记录(产品 2026-09-27,采纳顾问意见) + +**基础段(每张卡)新增 D9 摘要**:D9 上升星座;各行星在 D9 的星座与旺弱;Vargottama 标记;相对 D1 的重大旺弱反转标记(如 D1 入旺 / D9 落陷)。D9 宫位与相位不进基础段(婚恋卡的 D9 完整段保留)。 + +**年运卡**: +- 必须带年盘:年盘上升与年主(Varshesha)、Muntha 落宫与 Muntha 主、Mudda Dasha 全年分段及起止日期、年盘中太阳 / 月亮 / 年主的 Tajika 相位(至少标 Ithasala / Easarapha)。年盘结论带 `parameter_sensitive` 标签(Tajika 只完成首批目标集验证,不能写成全局闭环)。 +- 宫位从「只 1 宫」改为:1 宫 + 当前 AD 主与下一 AD 主所主管的宫 + 全年木星、土星过境所落的本命宫。 +- 行运只列关键日期:木星换座、土星换座、逆行 / 顺行转向、罗睺计都换座;不逐月列。 + +**时运卡**: +- 加:罗睺 / 计都行运(必加);双重过运判定结果(木土同时激活的宫 / 星,结论列表,不给原始度数);木星、土星当前所在星座的 SAV 值与 BAV 值(不放全表)。 +- 月亮行运:不进卡,用户问到月份级或更细时经补取工具取。 +- 分盘不再固定 D9:随同轮另一领域切换(事业 D10、婚恋 D9、财富 D2/D11 等);只有时运一个领域时默认 D9(基础段已有 D9 摘要)。 + +**Chara Dasha**:从年运、时运、事业、婚恋卡中移除,改为可补取(路由文档应期为 partial、对 KN Rao 基准匹配率约 24%,固定放卡会诱导模型当第三条时间轨)。双轨仍是 Vimshottari + Narayana(基础段已有)。 + +**三类卡与清单(顾问逐项标注,「必看」进卡、「可选」补取、「可删」移除)**: + +| 领域 | 进卡(在 v1 基础上新增) | 改为可补取 | 移除 | +| --- | --- | --- | --- | +| 事业 | AL(A10 已有);10 宫 SAV 与木星 / 土星当前所在宫 SAV;D9 确认由基础段 D9 摘要覆盖 | Karakamsha、宫主链、D1→D9→D10 联动、Argala、KP 副主星 | Chara Dasha | +| 婚恋 | 5 宫 / 5L 专项;昼夜盘(`is_day`);Punarphoo 判定(布尔,标 `observation_only`);双重过运激活 7 宫 / 7L / DK / UL;Vivah Saham(度数与落宫) | KP 7 宫副主星 | Chara Dasha | +| 财富 | 8 / 12 宫在卡里点名(宫位数据基础段已有) | D10(收入来自工作时)、Argala、KP 到账类 | — | + +- KP:精确宫头仍 blocked,**任何卡都不得把 KP 当依据放进卡**,只能补取且需带 blocked 说明。 +- **清单精简为方案 B**:普通对话给模型的领域清单缩成每类 5–8 行「必看项 + 分三层说 + 禁写规则」。分三层必须保留:事业「接触 / 结构性机会 / 公开落地」,婚恋「心动接触 / 关系成对 / 社会法律落地」;禁写规则至少含「5L 大运不等于法律婚」「金星过本命月不等于心动月」「Punarphoo 不得写成结婚」「Saturn 回归本命月是观察项不是结婚」。 +- 性别:本单婚恋卡写「性别未知」;在性别未知时模型须同时看金星与木星、不按性别下夫星 / 妻星定论(写进精简清单)。 + +## 硬红线 + +1. 引擎接入只**新增输出**,不改既有计算结果、打分、候选、冻结计分文件(ERR-110)。`scripts/jyotish_api_server.py` 不得增长:新接入放独立模块、由主文件或编排器薄注册(`tests/test_api_server_growth_contract.py`:类方法数与 handler 伪造点不得增长,注释里也不得出现伪造点字面量;行数粗护栏)。 +2. 年盘、Mudda、双重过运、Punarphoo、D9 旺弱与 Vargottama 的数值必须是引擎原生输出,卡只复制不换算(AGENTS §7.4);新增 golden 回归必须来自真实引擎响应(公开 AA 盘)。Vargottama / 反转标记若引擎没有现成字段,由引擎侧计算输出,不在前端卡构建器里推导。 +3. 数据卡 v1 的全部红线继续有效:答题契约不丢、事实逐字、Part B 覆盖(双轨大运、领域分盘、功能吉凶、原始数据)、BUG-1053 不回退、补取工具每轮 1 次且只读缓存。 +4. 精简清单只作用于**普通对话**给模型的领域清单。`strict-workflow-router.md` 同时服务报告等其他路径:执行方先查清谁在消费 `methodology` 与该文档;首选做法是新增普通对话专用的精简清单章节(或独立 reference)并只在咨询里下发,完整路由文档保持不变。若必须改 Skill 文本,按版本规则 bump(快照、测试三栏),CHANGELOG 写明。 +5. 体量:单领域模型可见内容(含答题契约与清单)目标 ≤ 12,000 字符;年运卡加年盘后若超出,在 PROGRESS 说明构成。 +6. 前端红线全套 + **全量 Python 门禁集必跑**;改既有断言写三栏。 +7. 本单不动数据库;不改 `.gitea/**`、`deploy/**`。 +8. 禁止 `git stash`;只 `git add <具体路径>`,提交前看 `git diff --cached --stat`(ERR-112);不推送。 + +## 任务分解(每条带验收标准) + +### T1 引擎:把已有技法接进普通对话输出(Python) +- 定位原生实现,给普通对话输出新增:年盘包(annual 问法)、双重过运结论(时运 / 婚恋问法,或全局按需)、Punarphoo 判定、D9 摘要(D9 上升、各行星 D9 星座与旺弱、Vargottama、重大反转)、罗睺计都行运与关键换座日期(若现有行运输出没有)。 +- 每项带来源模块名与边界标签(年盘 `parameter_sensitive`)。 +- **验收**:Python 定向测试 + golden(3 张公开 AA 盘,含 annual 与 timing 问法);growth contract 通过;本机一轮耗时变化写进 PROGRESS(预期毫秒级)。 + +### T2 投影:新字段进入模型可见投影 +- `frontend/src/mastra/consultation-workflow.ts` 白名单放行新字段(参照 BUG-1054 的做法,嵌套键逐一放行,不放宽深度 / 条数上限)。 +- **验收**:golden 断言新字段原样出现在投影里(不能只断言键存在)。 + +### T3 数据卡 v2 +- `frontend/src/lib/consultation-evidence-card.ts`:按上文决策调整 `EVIDENCE_CARD_SPECS` 与基础段;Chara Dasha 从卡移到补取清单;时运分盘随同轮领域切换;卡版本 `evidence-card-v2`。 +- 补取工具(`read-consultation-evidence`)的受限枚举同步:新增 Karakamsha、宫主链、D1→D9→D10 联动、Argala、KP(带 blocked 说明)、Chara Dasha、月亮行运、D10(财富用)。 +- **验收**:逐卡逐项测试(真实引擎 golden);3 盘 ×(10 问法 + 年运 + 时运)体量表;「本轮技法」折叠面板内容不变。 + +### T4 精简清单与禁写规则 +- 按硬红线 4 实现普通对话专用精简清单(每类 5–8 行,含分三层与禁写规则、性别未知规则);系统提示里对 `methodology` 的描述同步。 +- **验收**:记录提示词的假模型测试断言事业 / 婚恋 / 财富下发的是精简清单、含分层与禁写规则、不含完整长清单;报告等其他路径的方法文档输出不变(回归)。 + +### T5 记录 +- CHANGELOG;`docs/tasks/PROGRESS-consult-evidence-card-v2-20260927.md`(最终对照表、体量前后、红线测试、失败名单对比、三栏);`docs/testing/consult-evidence-card-v2-20260927.md`(真机:问「未来一年重点」看是否引用年主 / Muntha / Mudda 分段;问「今年婚恋」看是否分心动 / 成对 / 法律三层、不把 Punarphoo 写成结婚;问事业看是否提到 D9 旺弱确认);`docs/tasks/README.md` 本单一行改「待验收」。若发现缺陷,BUG 编号开工时核对最大号(当前 BUG-1059)续号。 + +## 让步顺序 +1. T1 的 D9 摘要、Punarphoo、双重过运,T2、T3、T4 必须完成。 +2. T1 的年盘包若原生实现不能稳定产出(例如 Mudda 分段缺失),年运卡写明「年盘未接入」并在 PROGRESS 记录阻塞原因,不得用本命数据冒充年盘;其余照做。 +3. 关键换座日期若行运模块无现成输出,可降级为「木星 / 土星当前所在宫 + 下一次换座日期」。 + +## 开工前置命令 + +```bash +cd /workspace/Jyotisha && git fetch origin --prune +git worktree add -b codex/consult-evidence-card-v2-20260927 .worktrees/consult-evidence-card-v2-20260927 origin/staging +ln -s /workspace/Jyotisha/frontend/node_modules .worktrees/consult-evidence-card-v2-20260927/frontend/node_modules +cd .worktrees/consult-evidence-card-v2-20260927 && git status -sb +python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45 # 涉及引擎,按 AGENTS §9 +export PATH=/exec-daemon:$PATH # Node 22 +``` + +先读:`AGENTS.md`(§5–§9、Part B)、`docs/research/pre_work_error_ledger.md`(ERR-110/111/112)、数据卡 v1 的任务书与 PROGRESS、`strict-workflow-router.md` §2–§5 与 §0.9、事件裁决文档(`references/event_judgment_*.md`)。开工先在未改动的基线上跑全量前端测试(Node 22)与全量 Python 门禁集,存日志作对比。 diff --git a/docs/tasks/TASK-consult-gender-optional-20260927.md b/docs/tasks/TASK-consult-gender-optional-20260927.md new file mode 100644 index 00000000..6c1204fa --- /dev/null +++ b/docs/tasks/TASK-consult-gender-optional-20260927.md @@ -0,0 +1,54 @@ +# TASK · 星盘资料加「性别(选填)」,接到婚恋数据卡(2026-09-27) + +## 基线 + +- **串行在 `TASK-consult-evidence-card-v2-20260927` 之后**:开工时核对该单已合入 `origin/staging`,以最新 `origin/staging` 为基线,写进 PROGRESS。 +- 分支 `codex/consult-gender-optional-20260927`,工作树 `.worktrees/consult-gender-optional-20260927`。 + +## 背景 + +- 顾问意见(请教单 https://claude.ai/artifact/TTLEGmYt6m9R9sFnzynVJU ):婚恋判断须先确认性别与昼夜盘,性别决定夫星 / 妻星取法(`strict-workflow-router.md` §4「Confirm gender and day/night context before spouse significator analysis」)。 +- 现状(Claude 2026-09-27 核实):数据库迁移与资料页均无性别字段;数据卡 v2 婚恋卡写「性别未知」,模型同时看金星与木星、不按性别下定论。 + +## 决策记录(产品 2026-09-27) + +- G1 在星盘资料里加**选填**「性别」:本人资料与星盘档案里的每个人都可以填;不填不影响任何功能,不在注册 / 开场流程里强制询问。 +- G2 取值:女 / 男 / 不填(存为空)。文案对照 `frontend/docs/VOICE.md`,给一句说明「用于婚恋解读里判断夫星 / 妻星,不填也能用」。 +- G3 填了就写进婚恋数据卡(基础段或婚恋段的一个字段),精简清单里的「性别未知」规则只在未填时生效;已填时按 `strict-workflow-router.md` §4 的取法。 +- G4 性别属于个人资料,按出生资料同等隐私级别处理:不进日志、遥测、反馈记录、BUG 历史、测试夹具里的真实数据。 + +## 硬红线 + +1. 数据库只做**加法**(AGENTS §7.6):给现有资料表加可空列(带取值 CHECK),不改旧列、不收紧约束;迁移对当前已部署代码向后兼容。**动表必须真跑 `npm run test:db`**(本机无 Docker 时以门禁 DB job 结果为准,写进 PROGRESS 并附 run 号);RLS 与现有资料列一致(只有本人可读写自己的资料)。 +2. 本人资料、星盘档案(多人物,BUG-1034~1036 相关)两处读写一致;切换当前星盘时婚恋卡用的是**当前人物**的性别,不串人(参考人物档案 P0 教训:他人报告用了用户主资料)。 +3. 不改引擎计算;性别只影响数据卡字段与清单规则。 +4. 前端红线全套 + 全量 Python 门禁集;改 UI 同步 `frontend/DESIGN.md`、新文案对照 `VOICE.md`;改既有断言写三栏。 +5. 禁止 `git stash`;只 `git add <具体路径>`,提交前看 `git diff --cached --stat`(ERR-112);不推送。 + +## 任务分解 + +### T1 数据层 +- 迁移:可空列 + CHECK(女 / 男);读写 API(本人资料、星盘档案增改查)带上该字段;类型与 zod 同步。 +- **验收**:DB 测试覆盖读写、RLS、他人不可读;旧数据为空正常工作。 + +### T2 界面 +- 星盘档案编辑表单与本人资料编辑处加选填单选(女 / 男 / 不填),附一句说明;详情页展示(未填不展示或展示「未填」,按 DESIGN 口径)。 +- **验收**:组件测试;390 / 1280 截图(虚构数据)存 `docs/testing/consult-gender-optional-20260927/`。 + +### T3 接入婚恋卡 +- 数据卡带当前人物的性别;精简清单的性别规则按有无切换。 +- **验收**:记录提示词的假模型测试:已填时卡里有性别、清单不出现「性别未知」规则;未填时相反;切换人物后取对应人物的值。 + +### T4 记录 +- CHANGELOG;`docs/tasks/PROGRESS-consult-gender-optional-20260927.md`;`docs/testing/consult-gender-optional-20260927.md`(真机:给本人和另一人分别填 / 不填性别,各问一次婚恋,看回答是否按性别取夫星 / 妻星、未填时是否两边都看);`docs/tasks/README.md` 本单一行改「待验收」。 + +## 开工前置命令 + +```bash +cd /workspace/Jyotisha && git fetch origin --prune +git worktree add -b codex/consult-gender-optional-20260927 .worktrees/consult-gender-optional-20260927 origin/staging +ln -s /workspace/Jyotisha/frontend/node_modules .worktrees/consult-gender-optional-20260927/frontend/node_modules +export PATH=/exec-daemon:$PATH +``` + +先读:`AGENTS.md`(§5–§8,尤其 §7.6 迁移两轮规则)、`deploy/README.md` 迁移一节、人物档案相关 BUG(搜索「人物档案」「chart_subject」「他人报告」)、最近一次加列迁移的写法(`frontend/supabase/migrations/2026092*`)。开工先跑基线全量前端测试(Node 22)与全量 Python 门禁集。