# BLOCKED ## BUG-1105:离线研究验收的本机环境缺口(2026-09-30) - 推送范围更新:用户要求阶段性归档到 staging;M0 全量 JSON 与原始日志保留本地不提交。明确暂存的研究代码、测试、M1 JSON、M0 smoke 及文档已随 tracked 隐私门复验(与研究定向合计 140 passed)。只解除提交子集的隐私覆盖缺口,不解除下述未提交产物、完整 quick 或研究验收阻塞。 - 当前 worktree 无可用项目 `.venv`,使用本机 Python 3.11.7,不改依赖锁或生产代码。 - 开工 `artifacts/varga-resolution/baseline-quick.log` 的 Python 测试子段通过,随后 npm 缺 `tsx`,quick 整体 exit 1;`pre-work.log` 是另一项失败,focused 测试要求不存在的历史 `.workbuddy/skills/jyotish-vedic-astrology` 镜像路径。没有伪造镜像或弱化测试。 - 本轮最终 quick **exit 1**:Python 子段 1000 passed、1 failed、1 skipped、3 subtests passed,失败为 `tests/test_consultation_native_layers.py::test_the_new_layer_leaves_every_existing_output_unchanged` 的原输出不变性断言。日志差异片段涉及 VedAstro 请求清单,输出被截断,根因未确定;不能归因为开工时的 tsx 缺失,也不能声称与基线失败逐项一致。详见 `artifacts/varga-resolution/closure-quick.log` 与 PROGRESS。恢复条件:独立定位新增失败后,在依赖齐全的验证环境复跑完整 quick;不修改生产代码或弱化断言消红。历史镜像断言由仓库环境合同维护方核实,不让研究脚本创建假镜像。 - quick 还重写了 `references/oracle/artifacts/pending_packets/` 下 5 个已跟踪 JSON。独立只读比对确认 JSON 语义与 HEAD 相同,字节差异仅 LF→CRLF;来源是 oracle dashboard 链调用 `tajika_annual_oracle_queue.py` 的文本模式写入。文件现场保留、未恢复、未暂存,不纳入 BUG-1105 研究候选交付;此副作用不是上条不变性失败的已证根因。 - 产物隐私补扫未通过:tracked 守卫 63 passed 不覆盖本轮未跟踪文件。显式复用隐私规则扫描新增产物时,M0 baseline JSON 的时刻数组 R003 命中 3 次;旧 baseline quick 日志混合编码无法以 UTF-8 或 GB18030 严格解码。未打印标记原值、未改既有隐私例外、未删除命中数据;需独立核查精确字段碰撞及完成日志保真扫描后,才可考虑纳入提交。证据 `artifacts/varga-resolution/closure-explicit-privacy.log`。 - M0 两次字节复跑未完成、M2/M3 not_started 是研究欠项,**不是上述环境失败的推断后果**。不得据此关单或宣称已交付。 ## 合规 A:用户协议 / 隐私政策 / 登录同意(2026-09-30) - **律师审定**:`frontend/src/lib/legal-documents.ts` 是依据代码写的初稿,页面顶部标「草稿 · 待律师审定」。其中 【待确认】 事实点共 13 条(`pendingLegalConfirmations()` 可列出),定稿前逐条确认;定稿后改 `legal-entity.ts` 的 `legalDocumentsVersion` 与 `legalDocumentsDraft: false`,老用户会在下次登录后看到一次「协议已更新」确认。 - **运营主体信息待产品提供**:`legal-entity.ts` 的 operatorName / address / contactEmail 仍是占位;生产发布前设 `JYOTISHA_REQUIRE_LEGAL_ENTITY=1` 跑 `tests/legal-consent-20260930.test.tsx` 会失败(见 deploy/README.md)。 - **数据库测试**:新表 `user_consents`(`20260930010000_user_consents.sql`,只加不改)没有跑 `npm run test:db`(本机无 Docker);staging 部署时由迁移步骤首次真实执行,部署后需用受控账号登录一次核对写入。 - **真机**:登录页勾选、协议页阅读、账户菜单链接未在真机走查(清单 `docs/testing/legal-consent-20260930.md`)。 ## 反馈与投诉 + 回复评价(2026-09-30):真实 PostgreSQL 与真机待验 - 缺什么:本机无 Docker,`npm run test:db` 跑不了;迁移 `20260930030000_user_feedback.sql` 里的函数(五次 / 小时限流、会话归属校验、管理员权限与审计写入)只有源码合同测试,没有真实库执行证据。无登录态与实体手机,弹窗与后台列表未在真实环境点过。 - 替代证据:`frontend/tests/feedback-complaints-20260930.test.tsx`(校验、错误映射、弹窗提交与限流提示、评价按文本哈希恢复、SQL 与 RBAC 合同);部署到 staging 时迁移会被真实执行一次。 - 解除条件:staging 迁移成功后,用受控账号提交一条反馈、连续提交第 6 条看到限流提示、在后台把它改为「已解决」并在审计日志看到记录;点赞后刷新对话仍在。 ## 自助注销账号(2026-09-30,PROGRESS-account-deletion-20260930):DB 测试、真实清除与端到端未跑 - 本机无 Docker:`frontend/tests/database-account-deletion.test.ts`(清除函数真库验证)skipped,需 `npm run test:db`。全量 `npm test` 的 24 条 DB / 部署套件失败与基线逐条同名。 - 迁移 `20260930020000_account_deletion_requests.sql` 只在 staging 部署时首次应用;清除任务的真实执行要等 7 天,或在 staging 库把测试账号的 `scheduled_for` 调早后观察。 - 无受控 staging 账号:注销 → 各端退出 → 重登见「账号注销中」→ 撤销注销,这条链路未在浏览器走过。 - 运营主体与联系邮箱仍是 `lib/legal-entity.ts` 占位值。 - 未推送、未部署。 ## 合规轮 · 敏感内容审核(2026-09-30) - **阿里云内容安全账号与密钥**:需产品开通「内容安全 · 大模型输入/输出审核(TextModerationPlus,llm_query_moderation / llm_response_moderation)」并提供 `ALIYUN_GREEN_ACCESS_KEY_ID` / `ALIYUN_GREEN_ACCESS_KEY_SECRET`(可选 `ALIYUN_GREEN_ENDPOINT`),再设 `MODERATION_PROVIDER=aliyun`。适配器按公开 API 文档写成、签名有单测,但**未对真实服务调用过**;接入后需在 staging 用受控账号发一条命中样例验证。缺钥匙时只用本地词表(启动日志警告一次)。 - **本地词表需法务审定**:`frontend/src/lib/moderation/lexicon.ts`(五类、保守短语),以及自伤求助句里的热线号码 12356。 - **数据库测试**:新表 `moderation_events` 与函数 `complete_consultation_moderated`(`20260930040000_moderation_events.sql`)未跑 `npm run test:db`(本机无 Docker);函数由 `complete_consultation_free` 逐行复制,仅改 responseKind、长度上限与释放原因。部署到 staging 时的迁移步骤是第一次真实执行。 - **真机**:命中后的前端表现(输入被拦的提示条、回答被整段替换)未在浏览器实测。 ## TASK-chart-surface-polish:受控登录、实体手机与基线全量失败(2026-09-29) - 本轮 Chrome、Edge、Docker 均可用,不套用历史“无 Chrome / 无 Docker”。真实 Chrome + golden 的本地组件验收及骨架高度修复后复验已完成(70+8 项通过);没有受控线上登录账号、实体手机和读屏实测;不能代替完整账户/人物/请求链路。清单见 `docs/testing/chart-surface-polish-20260929.md`。 - Linux 保真基线全量前端 4369 项,4340 通过 / 29 失败 / 0 cancelled / 0 skipped,exit 1;两个既有生命周期测试文件均报 `tailwind-merge/dist/bundle-mjs.mjs:99:50 Parse error`,定向及关闭 tsx 缓存仍复现。final-r2 为 4386 项、4357 通过 / 29 失败 / 0 cancelled / 0 skipped,exit 1;逐名逐原因核对无新增失败、无诊断变化。根因未定,直接 import 同包正常,不能称包损坏;不改依赖或测试消红,不声称全量通过。证据见本轮 PROGRESS 和 `artifacts/chart-surface-polish-validation-20260929/baseline-test-summary.json`。 - 本轮 pre_work_check exit 1:远端 verified、适配器成功,但碎片扫描 90 秒、focused tests 45 秒超时。未伪造历史镜像、未清其他会话目录。 - 真实 Chrome 前后对照发现既有印度盘多星同宫的个别字形边缘裁切,基线/实现坐标相同、可见中心仍能触发正确说明。本轮没有引入或修复该布局欠账;不将“无新增裁切”说成“全部字形无裁切”。证据见本轮 PROGRESS 的 `vedicVisibleAudit`。 - 前次任务书文档推送认证失败尚未解除;本轮只实施与本地验收,未提交、未推送、未部署,不借用任何凭据。 ## ~~TASK-birth-sky-cover T5:报告封面没有可靠的出生资料绑定(2026-09-28)~~ → 已解除:产品 2026-09-28 选 A → 2026-09-29 产品决定去掉报告封面(TASK-mobile-chart-and-confirmed-edit-20260929 M5;生成时写入的 `subject.birthFingerprint` 保留) - ~~任务书要求「只有报告生成时的出生资料与现在一致时才显示封面」。逐项查过,报告侧**没有任何出生资料指纹**:~~ - ~~`personal_reports` 表列(`20260806010000_personal_reports.sql` 及其后 `add column`):`chart_profile_id`、`request_fingerprint`、`calculation_hash`、`evidence_hash` 等,没有出生资料快照或 `profileFingerprint`。~~ - ~~`request_fingerprint` 只哈希 `reportType / presentationMode / depth / themes / sessionId / chartProfileId`(`personal-report-route-core.ts` `computeRequestFingerprint`),不含出生资料。~~ - ~~`calculation_hash`:普通报告取引擎 `result_hash`(含计算结果,不是出生资料指纹,且 BUG-693/694 记过哈希含墙钟);长报告取 markdown 全文的 sha256(`personal-report-longform-cover.ts`)。两者都不能和当前 `profileFingerprint` 比。~~ - ~~报告文档 `subject` 只有 `displayName / birthTimeStatus / birthPlaceLabel`;`personal_report_jobs`、`personal_report_sections`、`personal_report_longform_appendices` 也没有出生资料。~~ - ~~仓库里 `result_binding` 只出现在 Python 的 `calculation_profile_contract.py` / `full_report_quality_gate.py`,不进报告行。~~ - ~~按任务书:本单**不显示**报告封面,不拿当前资料冒充当时资料;`reportView` 未改、报告页未改、打印样式未改,旧报告不补算不补写库。~~ - ~~解除需要一个产品决定(二选一,都不改表结构):① 生成报告时把当时的 `profileFingerprint`(`resolveServerOwnedChartBirth(...).fingerprint`)写进报告文档(如 `subject.birthFingerprint`,v2 schema 加可选字段),只对新报告生效,旧报告永远无封面;② 接受「当前资料」作为封面依据并在封面上说明——与任务书红线冲突,需产品推翻。~~ - ~~`draw.ts` 的 `paper` palette 已实现并有单测(打印用),解除后报告封面可直接复用。~~ - 同单其余环境缺口:无登录态与真机(星盘页按钮、保存 / 分享、首次揭幕按 `docs/testing/birth-sky-cover-checklist.md` 走);无 Docker(24 条 DB / 部署套件失败与基线逐条同名)。未推送、未部署。 - **已解除(2026-09-28,TASK-birth-sky-followup-20260928 F1–F3)**:产品选方案 A。新生成的报告在 `subject.birthFingerprint` 写入生成时的出生资料指纹(与星盘页 `profileFingerprint` 同一算法、同取存储行);`GET /api/reports/:id` 在服务端比对当前指纹,只下发 `coverSubject`(人物 id 或 null),不下发指纹与出生资料。旧报告没有该字段,永远不显示封面,不补算不回填;不改表结构。 ## TASK-site-button-contrast(BUG-1079):真机、登录态与两条待决发现(2026-09-28) - 无受控登录账号与真机:各页实心按钮只在 harness(新 build CSS + 无头 Chrome,样本按源码类名渲染)上测,页面级走查按 `docs/testing/site-button-contrast-20260928.md`。 - 本机无 Docker:`npm test` 的 24 条 DB / 部署套件失败与开工基线逐条同名(PROGRESS 附 diff)。 - 待产品决定(未修,不在任务书范围):① 后台管理路由(`src/app/admin/layout.tsx`)只加载 `antd/dist/reset.css` 与 `admin.css`、不加载 `globals.css`,其中 52 个 shadcn `