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

13 KiB
Raw Blame History

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失败数字。