4.6 KiB
4.6 KiB
PROGRESS · 报告页星盘重叠 + 滚动重建(2026-09-09)
- 工作树:
.worktrees/report-chart-layout-fix-20260909 - 分支:
codex/report-chart-layout-fix-20260909(trackorigin/staging) - 基线:
origin/staging@584a56bd(任务书本身;代码基线17b36f3a) - BUG:BUG-616、BUG-617
- 未改
.gitea/workflows/**、frontend/src/app/page.tsx、下载剥围栏;不提升main,未 push
做了什么
| 任务 | 状态 | 说明 |
|---|---|---|
| 1 两栏成组 | 完成 | report-chart-grid-rehype.ts 把 D… / Moon Chart 标题 + 可选 p + jyotish-chart 围栏包进 .personal-report-chart-card,相邻卡进既有 .personal-report-chart-grid;删 float / margin-left: -50% |
| 2 滚动不重建 | 完成 | ReportToc 持有 activeId 与 observer;lead / LazyMarkdownSection 的 renderMarkdown 在 useMemo 内;LazyMarkdownSection memo() |
| 3 记录 | 完成 | BUG-616/617、CHANGELOG、DESIGN、走查清单第 7 节、本文件;任务板改「待验收」 |
没有砍让步项。rehype 两栏一次做成,未退到 D2 单栏。
口径(与任务书一致)
- 两栏保留,不再用浮动凑。
skipHtml/ 禁止rehype-raw/ 不新增 npm 依赖。- 下载
.md仍剥围栏、保留标题。 - 本仓测试无 DOM 运行时,重渲染次数不能自动验;真机两条写在走查清单第 7 节。
组件树(改动前后)
改前:
PersonalReportMarkdownView
useState(activeId) + IntersectionObserver ← 目录一变,整树重渲染
renderMarkdown(lead) ← 每次新建 components,子树卸载
LazyMarkdownSection (无 memo)
renderMarkdown(section) ← 同上
改后:
PersonalReportMarkdownView ← 无 useState,只随 markdown 变
ReportToc
useState(activeId) + IntersectionObserver
TocList × 2
article
lead = useMemo(renderMarkdown)
memo(LazyMarkdownSection)
content = useMemo(renderMarkdown | h2 占位)
滚动只重绘 ReportToc。文章树里的 SVG 保持同一组 DOM 节点(真机第 7 节)。
偏离
- 两栏折断点跟既有 document-view grid,是 760px 而不是任务书正文里的 860px。
globals.css里.personal-report-chart-grid的单栏媒体查询一直是max-width: 760px;860px 只折叠 TOC。未改这个既有数字。 - rehype 插件导出了
groupReportChartNodes。 给同一文件的工厂函数用,测试仍走PersonalReportMarkdownView的静态标记,没有另开 hast 单测。
测试数字
| 项 | 本轮实测 | 结论 |
|---|---|---|
tsc --noEmit |
0 错 | 通过 |
npm run lint |
0 error / 108 warning | warning 数与 BUG-607 收工相同;新文件无 error |
tsx --test tests/personal-report-markdown-view.test.tsx |
6 passed | 原 1 条 + 本单 5 条 |
globals.css gzip |
开工 35791 B → 工作树 35612 B |
−179 B / −0.50%,在 ±2% 内 |
next build --webpack / |
○ Static |
交叉 node_modules 符号链接,与 BUG-607 相同改用 webpack |
| 首页 CSS gzip(构建产物) | 最大块 a083d2bd2a5e75cb.css = 36,083 B |
相对 BUG-607 的 35,779 B 为 +0.85%,在 ±2% 内 |
npm test tests |
3008 | 高于 BUG-607 的 2975(staging 后来加了测试,本单 +5) |
npm test pass |
2997 | |
npm test fail |
11 | 全是 Docker Postgres fixture / 迁移 / 超时 / onboarding deadline flake,与图盘无关 |
npm test skipped |
0 | Docker 可用 |
11 条失败(均非本轮图盘代码):
admin-database.test.ts—database migration faileddatabase-admin-account-reset.test.ts— 同上database-admin-owner-recovery.test.ts— 同上database-billing-audit.test.ts— 同上(billing order adjustments…)database-billing-product-admin.test.ts— 300s 超时(当时并行跑过next build)database-migrate.test.ts— 300s 超时(同上)database-self-hosted-identity.test.ts— Better Auth OTP fixtureonboarding-route.test.ts—slow Agent generation把deadline当成了失败(flake) 9–11.rectification-v9-database.test.ts三条 —database migration failed
无 Docker 基线 28 条本轮未复跑(Docker 可用)。图盘相关 6 条 markdown-view + 既有 report-chart-block.test.ts 全绿。
没做的
- 没有在浏览器里打开过一份真实
/reports/<id>。 无登录态。走查清单第 4 节和第 7 节待真机。 - 未 push。代码进 staging 会走
Staging Backend Quality Gate。 - 收工时
origin/staging已含 BUG-614~615、BUG-618~620;合并写在本提交之后。