Add bounded chart loading, per-layer retry states, and shared SVG skeletons. Add report block downloads with SVG, localized metadata, and inline deletion. Record verification and retain CRLF export, full-build, and controlled-device acceptance blockers. User authorized staging delivery with these gaps documented. Co-Authored-By: Claude Code <noreply@anthropic.com>
13 KiB
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。
决策与技术勘误
- 用户执行中明确“分盘导出也需要带出svg”,随后要求继续。任务书 D13 有限替代 D4/T1 禁 SVG,不追溯声称原单已授权。
- D5 保持不变:常用/正文全选与旧普通导出逐字节一致;所有组全选额外附盘/表,不与旧纯正文文件相等。
- golden 为25正文+22盘出现项+8表=55块;D9出现两次,不按id去重。
- 文件名helper返回stem,
.md由既有下载器追加;实际字符数含Markdown/SVG标记,按Array.from计算。 - fallback SVG共用hook-free绘图与受限序列化,离线presentation attributes不依赖应用CSS;不放宽普通投影安全边界。
- 实际主题使用既有success/warning/danger/canvas token,不新增不存在的别名。
- 组合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,真实受控登录/持久化/部署未验。
剩余事项
- 最终depth快照全量/类型/lint及组合Chrome已完成,见下。
- CRLF无JSON与D5冲突按修复单保留blocked,不擅改已确认合同。
- 在可完整构建环境验证四路由标记和首页gzip;iPhone、微信、受控登录持久化与health SHA按testing清单补验。
- 无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失败数字。