Files
Jyotisha/docs/tasks/PROGRESS-report-chapter-export-20260924.md
T
jesse-uxandClaude Code 1420471ab1
Independent Staging Quality Gate / validate (push) Successful in 10m34s
Independent Staging Quality Gate / publish (push) Successful in 3m36s
feat: add chart waiting states and report block exports
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>
2026-09-24 12:33:09 +08:00

146 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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失败数字。