Files
Jyotisha/docs/tasks/PROGRESS-chart-page-skeleton-wait-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

12 KiB
Raw Blame History

PROGRESS · 星盘页盘位骨架与等待出口(2026-09-24)

交付授权(2026-09-24)

产品已明确要求“请你帮我push到staging”,授权将两单组合版本提交并快进推送。实际交付以push成功和远端SHA核对为准,不将推送当作完整构建、受控真机或部署通过。下述未提交状态描述的是验证时快照,BUG仍blocked,不提升main。

当前结论

T1–T4 已实现,通过定向、独立review与隔离真实Chrome,已串行整合到 codex/chart-report-integration-20260924。首轮组合全量已对照固定基线,无新增失败;完整构建、受控真机与部署仍有缺口。报告末次depth修正后的最终组合重验亦已完成,详见末节。未 commit / push / stash / 部署。BUG-1016 / 1017 暂 blocked,不以任务书要求的 resolved 字样替代真实验收。

  • 实施基线:主会话已 fetch 并创建的 5ff43b47f;任务书旧基线 8902e484 仅作事故实证。本轮没有再切分支或改动主检出。
  • 分支 / 工作树:codex/chart-page-skeleton-wait-20260924 / .worktrees/chart-page-skeleton-wait-20260924。
  • 依赖:仅建立授权的 frontend/node_modules junction,未安装或升级。固定 D:/nvm/installs/v22.23.2/node.exe v22.23.2,与主会话基线相同。
  • 已读 AGENTS / CLAUDE、frontend AGENTS / DESIGN / VOICE、任务书、本地 Next use-client guide;本单纯前端与现有 BFF 投影,不运行基础设施预检。骨架只是既有空几何,没有数据编码或新分类调色板;不改原盘色。

逐项实施

项 实现 本地证据 / 尚欠
T1 主盘出口 共享 fetch(含侧栏预取、资料指纹重试)持有25秒 signal;client_timeout 映射 timedOut;JSON读取中超时不误判 schema;缓存已有view回填;401先呈现失败体再跳转 React真实生命周期与模拟fetch,含预取、缓存、过期身份、401;真人/部署尚欠
T1 层出口 Map逐层记录失败;再次点原入口清失败并pending;失败不置loaded;成功只合并请求层,保留其它已成功层;BFF rate_limited不冒充engine_busy assemble→fetch→hook四层429、catch重试、超时、坏429体、乱序成功与身份失效
T2 盘位骨架 VedicChartSvg导出空模型并支持skeleton,强制不画数据;西洋复用原SVG空模型;ChartPageSkeleton仅供星盘盘位;初始Tab可见禁用,主盘到后解禁 空盘几何与标签、busy、五禁用Tab、失败替换、静态表格均有渲染合同
T2 动效与边界 唯一CSS keyframe:2.4s ease-in-out / 0.35↔0.6,reduced-motion静止0.5;无spinner/旋转/扫光 CSS合同;真机视觉未验
T3 规则 AGENTS §6有限例外,DESIGN §9/§15及共享壳说明同步,VOICE新增唯一timedOut句 BUG-716/966防复发条款同时注明有限推翻;其它页不变
T4 记录 BUG-1016/1017、CHANGELOG、BLOCKED、状态板、本记录与真机清单 未将本地实现当上线;Skill不bump

任务书勘误与必要范围

  1. 真实 assembleChartView 的后续层失败先经 enginePayload 变成 null,再返回 HTTP200/status=ok。单改 hook 无法恢复 429 原因。主会话确认必要范围后,给 ChartViewOk 增加可选 layerFailures,在 chart-view-load.ts 保留既有 engine_busy / engine_timeout / engine_bad_payload / engine_http_error 分类。未改 /api/chart-view 路由、引擎10秒期限、HEAVY_COMPUTE_PATHS、并发或任何Python文件。
  2. 任务书 D5 写超时→timedOut;T1要求 status=client_timeout,以 T1 的明确状态要求为准:client_timeout 是状态,timedOut 仅是文案key。不把客户端超时加进出生资料失败原因数组。
  3. 首次请求真正从共享缓存发出,故超时由 refreshChartSnapshot 建立而非 hook 单独建一个被已在途promise忽略的signal。预取起计时、资料指纹重试共用同一期限;过期epoch失败转当前刷新,不写回旧fallback。
  4. BFF 自身 rate_limited 与引擎429不是同类,前者保留既有频繁打开句;只有引擎busy或没有有效业务体的HTTP429显示busy句。JSON读到一半发生abort仍是超时。
  5. 各层响应带D1与其它未请求层的空占位,整体覆盖会在西洋成功后点D9丢西洋结果。客户端仅合并当前请求层;暖缓存进页的后台D1刷新迟到时,同身份已成功层也保留,动态乱序与暖刷新回归确保成功数据不退化。
  6. 真机清单“断网→timedOut”并非浏览器必然行为:网络立即拒绝应unavailable,持续挂起才达25秒期限;已写明两种测试,不伪造速度承诺。AbortSignal按活动时间计时,后台休眠不承诺墙钟25秒。
  7. grep chart-skeleton-breathe 本身会命中声明与引用两行;按意图只允许CSS一个文件、一个keyframe定义、一处动画规则,不把合法引用误当第二套动画。

历史检索与旧防线核查

以等待原句、/api/chart-view、hook、层日志关键词检索并完整阅读 BUG-715/716/717/718/723/966/996(最大号1015,本轮1016/1017未被占用)。

原防线 核查
BUG-715/723:引擎失败分档、429独立、日志不吞 chart-view-engine 与既有定向测试仍在;此次补后续层到UI透传,不改既有引擎分类
BUG-716:静态壳、只取D1、其它层按需 静态route未改,engine/route合同通过;仅“不得骨架”按授权有限推翻
BUG-717:不改并发、不预取西洋/七政、不写速度成本眉标 路径/并发未动、按需入口不变,成功和失败视图合同保留
BUG-718:跳过页面无需的外部证据 birthPayload标志未动,route合同仍通过
BUG-966:模块缓存、同inflight、稳定壳 缓存/共享壳不搬;预取共享期限补上;星历/报告无骨架断言不改
BUG-996:账户+资料指纹、旧结果不可回写、错误分档 原定向全过;新增旧请求异常与旧层完成不得写新身份缓存

验证实测

日志均只在本树 artifacts,不纳入提交。

命令 / 范围 基线 当前
固定5套定向:chart-page-view / secondary-page-entry / chart-profile-update-consistency / chart-view-engine / chart-view-route 49 pass / 0 fail / 0 skip 54 pass / 0 fail / 0 skip
新增 chart-page-hook 真React生命周期 不存在 18 pass / 0 fail / 0 skip
合计定向 49 72 pass / 0 fail / 0 skip
tsc --noEmit 主会话持有 0错,exit0
npm run lint 主会话持有 0error / 119warning,exit0;不顺修既有warning
组合首轮全量npm test 3717 /3633pass/84fail 3763 /3679pass/84fail;新增46全过、名称消失0、旧状态变化0
组合首轮build、Static、gzip 默认junction失败;webpack Skill symlink EPERM 两类失败相同;webpack编译/类型过,Static与gzip仍未验证
隔离Chrome — 星盘单树及组合树分别13/13通过
受控登录、iOS与staging health 未执行 环境/验收缺口,见BLOCKED与真机清单

使用 node --import tsx --test,不是新增测试运行器;日志 artifacts/chart-targeted-baseline.log、chart-targeted-final.log、chart-tsc.log、chart-lint.log。新增测试真实执行 hook 与 fetch/schema/assemble,不仅匹配源码;仍不替代浏览器布局或后端线上压测。

既有断言变更(三栏)

原值 新值 原因
chart-page-view 冷主盘等待不得骨架 必须data-skeleton + aria-busy、五Tab禁用,仍无spinner/正在加载 D1有限授权,增加反向约束
chart-page-view 西洋pending不得skeleton 必须data-skeleton,仍保留原等待句且禁止InlineSpinner D2复用西洋空模型
secondary-page-entry 星盘源码禁止skeleton 必须ChartPageSkeleton引用,仍禁止InlineSpinner/正在加载 只放开星盘;星历与报告原断言不变

定向日志名称实测:原49个名称无消失,新增23个全通过。所有原测试名称保留,未删除测试;主会话最终还需对全量名称多重集合与基线逐项比较。

独立复核与隔离浏览器(2026-09-24)

  • 独立只读审查未发现需阻断交付的正确性缺陷;复跑 hook/缓存/引擎/路由55条与视图17条全部通过;独立暖缓存乱序复现确认慢D1不会覆盖已成功D9。
  • 系统 Chrome 153、全新临时profile、真实 ChartPageRoute→useChartPage→fetchChartView、真实CSS,接口白名单mock消费真实assembler与虚构golden,13/13场景通过,pageerror=0。覆盖375/390/1280冷进、D9 429与原入口重试、西洋骨架、七政/大运静态等待、减弱动态、主盘/分盘超时、BFF限流及401导航。
  • 超时测试只在浏览器harness把原25000ms映射为500ms;未改业务源码。401证据为导航前DOM提交且布局可见,不保证实际快速跳转时足够读完。
  • 证据仅本地 artifacts/chart-report-browser-20260924/chart-2026-09-24T03-24-29-908Z/results.json。浏览器已关闭,不使用真实资料、账号或凭据。该证据不替代完整Next服务器、真实后端、登录staging、iOS真机或部署验收。

组合验收与剩余事项

  • 已完成两个工作树串行整合:secondary-page-data同时保留chart身份逻辑与reports通用cache epoch;VedicChartSvg同时保留骨架与报告hook-free Drawing,无第二份几何。
  • 首轮84失败名称多重集合一致,83项完整诊断直接一致;appendices owner-read一项首轮fixture槽位pid ENOENT,单项复跑恢复基线duplicate migration诊断,未写成通过。Docker本轮可用,不套用上一单地址池结论。
  • 固定基线失败分类:migration symlink文本38、Skill references文本9、Windows symlink EPERM13、双盘符路径6、POSIX路径/权限/UID/install11、python3/rsync不可用4、底因未证实exit1共3。明细在基线artifacts及组合 artifacts/combined-verification,不提交。
  • 首轮3305非md文件起止hash相同:e95f3f18801d10fa757e52622fa3fb850af2258fc0ff7c5667300b588f73a90c。此后仅追加报告未知depth透传/测试断言,最终重验结果见末节。
  • 待完整构建环境补Static/gzip,按真人清单完成受控验收后再决定BUG是否resolved;没有本轮commit/push/部署,不改main。
  • 报告独立审查的CRLF/D5冲突是另单未通过项,不冒称两单全部完成验收。

最终组合快照复验(含报告depth末次修正)

  • tsc0错;lint0error/119warning;3763 tests/3679pass/84fail/skip0。相对固定基线新增46全通过、名称多重集合消失0、旧状态变化0,84失败名称及84份归一化完整诊断全部一致;首轮fixture槽位竞态未复现。
  • 开始/结束3305非md文件hash同为 b076a2c2f40d1fdac1520fa88b38818f14847b7e4710047571a0f73052d580ce,无代码漂移,仅文档变化。
  • 默认build仍junction失败;webpack编译/类型过,Skill symlink EPERM未解除,本轮先报/api/consult而非基线daily-starlanguage(并行worker先报路径不同,底层原因相同)。Static/gzip仍未验,不写成通过。
  • 证据:组合树 artifacts/combined-final-verification;首轮日志保留。

最终组合Chrome复验

  • 组合树重新运行星盘13/13、报告14/14,pageerror/非白名单请求0;真实合并代码,不复用单树成绩。
  • 合并VedicChartSvg同时经星盘骨架与报告无原SVG fallback实际下载验证,SHA256 c59bced71cc9433a32c09c68d5aa437f3b8de8e95f3cb9c8b88baeecc19a2a00,两runner记录前后稳定;chart10个/report9个核心文件无漂移。
  • 组合星盘证据:主仓本地 artifacts/chart-report-browser-20260924/chart-2026-09-24T03-59-56-966Z/results.json;报告为 report-2026-09-24T04-01-33-428Z/results.json。浏览器已关闭;mock API边界、超时harness映射与无受控登录/iOS/部署的限制不变。

最终范围与根tests合同

独立审计未见两共享文件合并遗漏、无关源码或冲突marker;精选整合点8/8通过。根Python前端合同四文件18条:17通过、1既有失败。主题合同test_frontend_theme_contract.py:29期待旧ink-secondary #676762,基线HEAD的CSS已为#5f5f59,内存重放基线同样失败;未改CSS迎合旧合同。另三个session/daily/rectification/birth journey入口合同通过。无Python/API路由/依赖/workflow/并发改动,diff --check通过。