4.3 KiB
4.3 KiB
进度 · 普通用户报告公开内容分层(2026-09-22)
基线:origin/staging 10baeb2fa865743c428806e115ac92ca9d92fb71。分支 codex/report-public-content-20260922。未推送。
聊天消息行仍然不渲染 techniqueTruth、workflowReceipt、证据徽章和单条下载按钮(chat-message-row.tsx 无这些符号;consultation-report-export.test.ts 的「assistant answer does not expose internal report controls」仍在)。漏洞在导出和报告 API。
投影
- 新增
frontend/src/lib/report-public-projection.ts。文档类型是显式参数:chat_export、personal_report_detail、ordinary_markdown_download、professional_reference。不根据路由名决定可见性。 - 普通 allowlist:
title、prose、conclusion、action、limitation、chart_fence、engine_svg。 - 内部字段不序列化:
technique_truth、workflow_route、workflow_status、precise_timing、missing_layers、评分/权重/执行账本、内部 URL、secret、模型调试、raw tool response、job/attempt/provider。 - 限制改写成白话,不带内部键。没有这些信号时不补限制段。
接入
consultationReportMarkdown只走聊天导出投影。resolveReportRead的longformMarkdown与返回给浏览器的reportDocument走投影。持久化行不改。classifyReportEnvelope在详情阅读前再投影一次,旧响应也不能直接上屏。- 普通下载读
GET /api/reports/:id,并用ordinaryReportDownloadMarkdown投影后再去掉jyotish-chart围栏。不再请求 professional-reference。 - 列表
card_summary走同一段公开正文投影。 - professional-reference 仍是独立入口,响应
documentKind为professional_reference。本轮没有单独专业权限,正文 fail-safe 到普通投影,避免只靠接口名字放行内部字段。
断言变化
| 测试 | 原值 | 新值 | 原因 |
|---|---|---|---|
consultation-report-export.test.ts「exports latest consultation answer…」 |
匹配 technique_truth: partial、workflow_route: career、precise_timing: blocked、missing_layers: MEVG、未闭环内容不得包装成确定预测 |
仍匹配标题和「先看阶段」;匹配白话限制;不匹配上述内部键、MEVG、career、Claim boundary |
这些内部字段不再是普通导出的预期结果 |
personal-report-entry.test.ts「legacy consultation Markdown export…」 |
匹配 workflow_route: career、precise_timing: blocked |
匹配「先看阶段」和「这次说不到具体哪一天」;不匹配 workflow_route、precise_timing、technique_truth、MEVG |
同一导出合同,不能继续把泄漏当回归锁 |
personal-report-entry.test.ts「ready reports expose Markdown export…」 |
longformDownloadSource 匹配 professional-reference |
不匹配 professional-reference;匹配 projectOrdinaryReportMarkdown 和 GET /api/reports/:id |
普通下载不得再把专业参考当 fallback |
professional-report-reference-route.test.ts「cached appendix returns markdown…」 |
{ format: "markdown", markdown: "# Professional reference" } |
增加 documentKind: "professional_reference",markdown 仍是该句 |
响应必须显式标成专业参考;这条夹具没有内部字段,正文保持原样 |
personal-report-longform-md.test.ts 的 XSS / 表格 / skipHtml 断言未改。报告归属与 ready 检查的测试名未改,{ ok: true } 回放文档不是报告形状,原样返回。
验证
frontend:.\node_modules\.bin\tsc --noEmit退出码 0。npm run lint:0 error,119 条既有 warning(未改;新投影文件无 warning)。- 定向
npx tsx --test:report-public-projection9、consultation-report-export2、personal-report-entry20、personal-report-longform-md7、personal-report-view23、report-chart-block8、professional-report-reference-route4、personal-report-api58,全部 fail 0。 - 未跑全量
npm test和next build。 - 无登录态,浏览器导出未验收:
docs/testing/report-public-content-20260922.md。
Bug
BUG-999,resolved(本地候选,未部署)。相关记录 BUG-011、BUG-058、BUG-188。聊天层隐藏仍在,本条记导出/API 洞,不把旧记录改成复发。