# PROGRESS · 报告分块导出与列表管理(2026-09-24) ## 交付授权(2026-09-24) 产品在获知下述未通过项与环境缺口后明确要求“请你帮我push到staging”。本轮按此授权提交组合版本并快进推送staging;实际交付以push成功与远端SHA核对为准,不代表CRLF合同已获变更授权或部署验收通过。以下“未提交/未推送”均为推送前验证快照;BUG仍blocked,不提升main。 ## 当前结论 T1–T4 已实现并串行整合,但**不是全部验收通过**:独立审查复现 CRLF 输入保留图盘 JSON 的旧缺陷,与 D5 逐字节合同冲突,未授权改变 D5,记为未通过。构建、受控登录与真机仍有缺口。未 commit / push / 部署。 - 固定执行基线 `5ff43b47f38e378918c8b6bd967228185d7f02fe`,替代任务书事故实证旧基线。 - 实现树 `.worktrees/report-chapter-export-20260924`;最终组合树 `.worktrees/chart-report-integration-20260924`,分支 `codex/chart-report-integration-20260924`。 - Node v22.23.2 / npm10.9.8,复用已有依赖 junction,不安装或升级;42项顶层非可选依赖与 lock 精确匹配。 - 两份新记录最初受子代理报告写入限制,未绕过。用户随后明确选择“由主会话补齐”,本记录与 testing 清单由主会话按该授权创建。 ## 实现与逐项验收 | 项 | 实现 / 证据 | 结论 | | --- | --- | --- | | T1 正文分块 | 唯一来源 buildLongformOutline(projectOrdinaryReportMarkdown(...));补 sourcePreamble/sourceMarkdown 无损切片,原阅读字段不变;LF golden 正文全选等于旧导出 | 主路径通过;CRLF 无 JSON 合同未通过 | | T1 盘表 | 22个盘出现项(D9两次)+8组表;安全SVG优先复用,fallback共用 VedicChartSvgDrawing,无第二份几何或 react-dom/server;表格与页面共用显示转换 | golden与定向通过 | | T2 抽屉 | 原生底部dialog、三组/三套餐、替换式选择、手动取消高亮、全选/清空、实际字符计数、0选禁用 | 组件与隔离Chrome通过 | | T3 入口 | 旧整篇按钮替换为分块导出,#export ready后消费一次并清hash;打印及原始附录保留;只用已有数据/下载器 | 组件与隔离Chrome通过 | | T4 列表 | 中文日期/深度/主题,未知字符串原样回退;三色状态;行内确认删除、防重复DELETE、失败留行、成功移除与cache epoch/tombstone防旧GET回写 | 定向通过;真实持久化未验 | | T5 记录 | DESIGN、VOICE、CHANGELOG、BUG-1018/1019、任务书D13、本进度及真人清单 | 已补齐;BUG仍blocked | 无新网络请求用于导出,无剪贴板,无 spinner/骨架,不改数据库、GET API字段、生成管线、report-chart-grid-rehype、workflow、DNS或main。 ## 决策与技术勘误 1. 用户执行中明确“分盘导出也需要带出svg”,随后要求继续。任务书 D13 有限替代 D4/T1 禁 SVG,不追溯声称原单已授权。 2. D5 保持不变:常用/正文全选与旧普通导出逐字节一致;**所有组全选**额外附盘/表,不与旧纯正文文件相等。 3. golden 为25正文+22盘出现项+8表=55块;D9出现两次,不按id去重。 4. 文件名helper返回stem,`.md`由既有下载器追加;实际字符数含Markdown/SVG标记,按Array.from计算。 5. fallback SVG共用hook-free绘图与受限序列化,离线presentation attributes不依赖应用CSS;不放宽普通投影安全边界。 6. 实际主题使用既有success/warning/danger/canvas token,不新增不存在的别名。 7. 组合SVG同时保留星盘empty/skeleton与报告Drawing出口;secondary缓存同时保留星盘身份epoch、报告失效epoch及未知depth透传。 ## 独立审查:CRLF 合同缺口(未通过) 审查复跑105/105相关测试,但另以内存把真实虚构golden的LF转换为CRLF,发现正文下载仍有22个 `jyotish-chart` JSON围栏,同时仍与旧导出逐字节相同。已有测试通过不等于该边界安全合同通过。 根因:`report-chart-block.ts` 的 FENCE_RE 在语言标记后仅匹配 `\n`,不接受 `\r\n`;旧 ordinaryReportDownloadMarkdown 与新正文块共用此剥离器。这是**继承缺陷,不是本单新增回归**。新分盘提取已能识别CRLF,所以同一输入另可生成22盘块。 D13只授权SVG,不授权改变D5。本轮未静默修改剥离器或弱化JSON禁出断言。建议对CRLF围栏输入授权D5有限例外后,仅修语言标记后的换行匹配,冻结旧LF输出作独立回归;详见 `TASK-report-chapter-export-fix-20260924.md`。本项阻止把报告单称为全部验收通过。 另有非阻断观察:优先复用的旧golden引擎SVG实际为南印矩形布局,标题沿用chartAriaLabel的“北印度盘”;按D13保留原SVG,未擅改几何或原输出,图式/标题对齐待后续确认。 ## 验证实测 | 项目 | 固定基线 | 本轮 | | --- | ---: | ---: | | 报告八套件 | 140/140 | 扩展定向205/205 | | 报告基线测试名消失 | — | 0 | | 报告本单新增 | — | 23(纯块12、抽屉6、删除/元信息/cache5) | | 星盘定向 | 49/49 | 72/72 | | 组合首轮全量 | 3717 /3633pass/84fail | 3763 /3679pass/84fail | | 组合首轮名称多重集合 | — | 消失0,新增46全通过,既有状态变化0 | | 组合首轮tsc | 0错 | 0错 | | 组合首轮lint | 0error/119warning | 0error/119warning | | 默认build | junction越Turbopack root失败 | 同类失败 | | webpack build | 编译/类型过,Skill symlink EPERM失败 | 同类失败 | | Static / 动态路由标记、首页gzip±2% | 未取得完整构建产物 | 未验证 | 205与140的差额包含42条既有共享回归,不能写成本单新增65条。全量按名称**多重集合**比较,不只看汇总、不去重。 首轮84失败名称相同,83项归一化完整诊断直接一致;appendices owner-read用例首轮遇fixture `slot-1/pid ENOENT`,独立复跑恢复基线 `duplicate migration filename`。保留原失败日志,未将复跑写成通过。本轮Docker可用,不继承上一单地址池耗尽结论。 基线失败分类:migration symlink检出为文本38、Skill references链接文本9、Windows symlink EPERM13、双盘符路径6、POSIX路径/权限/UID/install11、python3/rsync不可用4、exit1且底因未证实3,共84。 首轮源码3305非md文件开始/结束SHA256均为 `e95f3f18801d10fa757e52622fa3fb850af2258fc0ff7c5667300b588f73a90c`。之后仅补未知depth parser与一条既有测试内断言,最终快照重验已完成,见末节;不将首轮数字冒称覆盖此末次修正。 证据均为本地artifacts,不提交:实现树 `report-baseline.log`、`report-final-targeted.log`、`report-tsc.log`、`report-lint.log`;固定基线树 `artifacts/chart-report-baseline-20260924`;组合树 `artifacts/combined-verification`(summary、名称/状态、完整诊断、单项复跑、源码hash)。 ## 隔离真实浏览器 系统Chrome153、全新profile、真实组件/CSS/缓存函数、虚构golden和白名单mock;单报告树13/13通过,pageerror及非白名单请求0,8个核心文件hash前后相同,浏览器已关闭。覆盖套餐/手选/空选、4种真实下载、Esc/遮罩回焦、hash一次、375/390/1280布局/44px/两列/避侧栏、删除失败/重复/旧GET/缓存重挂载。 | 实际下载 | 字节 | | --- | ---: | | 常用/全部正文 | 221792 | | 全部分盘(22 SVG) | 88288 | | 仅核对表 | 7512 | | 所有组全选 | 317596 | LF常用逐字节等旧导出,所有下载ordinaryOutputLeaks为空;无应用CSS的SVG截图可读。证据:主仓本地 `artifacts/chart-report-browser-20260924/report-2026-09-24T03-50-59-992Z/results.json`。组合树另跑14/14通过(新增真实fallback下载),详见末节。 仓内交互测试使用真实React reconciler/state/effect及已挂载handler,不模拟事件冒泡或布局。浏览器宿主提供Next router、mock接口,**不等于完整Next集成、真实数据库、iOS/微信、登录staging或部署验收**。 ## 既有断言三栏 | 原值 | 新值 | 原因 | | --- | --- | --- | | entry:Center含旧下载helper | #export且无旧helper/exportingReportId/exportError | D10改深链,删旧请求路径 | | entry:download含GET URL/filename helper | 无fetch,保留ordinaryReportDownloadMarkdown/projection | 保留历史纯转换,抽屉复用唯一下载器 | | entry:Center export error alert | 每行ReportRowDelete及错误role=alert | 导出移抽屉,删除失败行内反馈 | | view:旧下载helper | ReportExportDrawer且无旧helper | D1/D10 | | view:print disabled含exportBusy | exportOpen,仍保留printBusy/capability | 抽屉打开期间不同时打印 | | longform-md:导出报告(.md) | 分块导出 | 授权入口替换,其余writer断言保留 | 原测试名称保留;新测试无SVG要求按D13替换为安全SVG+无JSON/泄漏。未知depth追加真实readReports→rowMeta断言,不只直接喂rowMeta。 ## 历史核查 执行方已检索并阅读 BUG-125/154/156/247/352/455/486/496/526/534/574/610/966、999及1000–1015相关段。 - BUG-999/1003:普通投影、安全SVG、内部字段过滤不改;LF golden块leak=0与正文byte lock执行。CRLF围栏另列未通过,不据旧测试预写通过。 - BUG-154:报告入口不绑会话、生成/失败/未登录分支保留,API/entry回归通过,创建链不改。 - BUG-352/574:日期/card_summary/列表字段投影保留,当前路由读取独立card_summary。 - BUG-496:failure摘要fallback保留,不改writer预算/分类。 - BUG-526:仍用loadReportCandidateRange共享路径,不增加直接校正表SELECT。 - BUG-534:progress phase仍用isValidPersonalReportJobProgressPhase,不改job链。 - BUG-455:reports路由pricing_configuration_unavailable映射保留。 - BUG-966:共享壳、缓存、预热不搬;新增失效epoch回归,不增加报告等待动画。 - BUG-125/247/156/486/610:旧入口、生成/适配、引擎路径本轮未改,不以历史部署数字充当本轮证据,旧符号不保证逐字存在。 - BUG-1018/1019保持blocked,真实受控登录/持久化/部署未验。 ## 剩余事项 1. 最终depth快照全量/类型/lint及组合Chrome已完成,见下。 2. CRLF无JSON与D5冲突按修复单保留blocked,不擅改已确认合同。 3. 在可完整构建环境验证四路由标记和首页gzip;iPhone、微信、受控登录持久化与health SHA按testing清单补验。 4. 无commit/push/部署,不改main/workflow/DNS,不清共享Docker资源,不修任务外warning,不提交artifacts或依赖链接。 ## 最终组合快照复验(含未知depth修正) - tsc exit0;lint0error/119warning;全量3763/3679pass/84fail/skip0。 - 对固定基线3717/3633pass/84fail:新增46全部通过,名称多重集合消失0、旧状态变化0;84失败名称及84份归一化完整诊断全部一致。首轮fixture槽位竞态未复现,首轮日志仍保留。 - 3305个非md文件开始/结束SHA256均为 `b076a2c2f40d1fdac1520fa88b38818f14847b7e4710047571a0f73052d580ce`;无代码漂移,期间仅文档变化。 - 默认build仍因跨root junction失败;webpack编译/类型通过,但Skill symlink EPERM。本轮15worker中先报路由/api/consult,基线先报daily-starlanguage,不能把报错路由差异藏掉;相同底层链接权限原因,完整Static/动态标记及gzip依然未验。 - 证据独立存放组合树 `artifacts/combined-final-verification`,没有覆盖首轮。上述自动化不消除CRLF独立审查未通过项。 ## 最终组合Chrome复验 - 同一组合树重新打包并运行:星盘13/13,报告14/14,共27/27通过;pageerror与非白名单页面请求均0,两个context均已关闭。 - 人工合并VedicChartSvg的骨架与导出路径均实际执行。报告额外用真实golden去掉原SVG来源,真实Actions/Drawer下载触发VedicChartSvgDrawing fallback;离线无CSS时12宫轮廓、行星、星座号、图例、逆行线可读,截图已查看。 - fallback文件6095B、SHA256 `74c9e17eb97bcde581777c9dd0a2ffca80eed2ab89e4c2d0554205196921edd6`;其它四份下载hash与单树完全一致。D5证据限于该LF golden,不掩盖CRLF未通过项。 - 合并绘图文件SHA256 `c59bced71cc9433a32c09c68d5aa437f3b8de8e95f3cb9c8b88baeecc19a2a00`;chart10个/report9个源码hash前后均稳定。 - 主仓本地证据:`artifacts/chart-report-browser-20260924/chart-2026-09-24T03-59-56-966Z/results.json`、`report-2026-09-24T04-01-33-428Z/results.json`,后者目录含download-fallback.md及无CSS截图。仅专属artifacts,不提交;仍不等于登录staging、DB或iOS/微信真机。 ## 最终范围与跨语言合同复核 独立只读审计确认共享SVG/缓存两单逻辑并存,没有API路由、Python、依赖/锁文件、workflow、部署或引擎并发配置改动,无冲突marker,diff --check通过。精选整合点8/8通过。 根tests四套前端源码合同实跑18条:17通过、1失败。`tests/test_frontend_theme_contract.py:29`仍期待 `--color-ink-secondary: #676762;`,基线HEAD原始CSS已是 `#5f5f59`;同一测试以内存基线CSS重放亦失败,确认既有合同欠账,未顺修。其它session management / daily and rectification / birth time journey入口合同通过。此项不混入前端npm test的84失败数字。