docs: ADR-018/README/Plan 5 移交清单

Plan 4 Task 9 收尾(阶段 4 收官):

- ADR-018(主题与构建决策八条):Astro 5.18 选型与 MIT/依赖只进主题包/
  vitest 双版本(根 2.1.9 + 主题 3.2.7——astro vite6 兼容);渲染信任链
  bodyHtml 不二次清洗(三段接力);分页 V1 不做——路由登记义务随迁移移交;
  P0 发布门禁偏离(issue 无 DB 源,Plan 5 SEO diff 重审);编码路径四层
  字节精确 + 资产键 URL 线形归一(236f3dc);预览零依赖 + host 白名单
  收紧(回环纪律,比 spec §12.2 更严);CSP style-src 'unsafe-inline'
  (Astro scoped 样式内联);报告 HTML 先写两域对齐
- README:快速开始补 publish→build→preview 全链命令链示例(含
  artifacts/jobs/<jobId>/ 产物路径);目录结构补 themes/ 与
  apps/preview-server/;当前状态阶段 4 完成(真实 hesupipe 190 页可
  浏览器预览/408 测试/23 验收断言/6 截图);ADR-001~018 导航;下一步
  指向 Plan 4 文末移交清单
- Plan 4 文档:Task 9 勾选 + 验收节 ✅ 全过;文末新增"移交 Plan 5 清单"
  7 项(SEO 三方 diff 新输入源/完整门禁六件含可复现双构建与 footer 年份
  固定化/sitemap-robots 预览可达/og 元数据/836 nginx conf 输出/Task 0.2
  备份续传/度量基线 ~64s 首跑·~15s 复跑)

三绿全量:lint 过 / typecheck 五段过 / test 408(根 382 + 主题 26)全绿。
不 push——推送由用户执行。

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-22 15:59:48 +08:00
parent 5c2ee7dc5d
commit 87d6b9a777
3 changed files with 88 additions and 21 deletions
@@ -106,20 +106,32 @@ scripts/sf.ts # + content:publish / build:create / preview:star
- [ ] **Task 4 审查移交的 Task 8 观察项**:分派器对以下形态是有意明错(build 期 throw)——`/news/` 硬编码特判外的其他主列表路径、分类嵌套(/product-category/parent/child/)、分类索引路径(/product-category/ 裸前缀);真实 190 路由集若含这些形态构建会失败——**届时按错误信息补分派规则即可,非缺陷**
- [ ] 耗时记录(快照物化/astro 构建/媒体复制/门禁分解——对照 Plan 3 基线 51.8s);差异如实分析。证据文档 + commit `test(evidence): 阶段4端到端预览验收`;临时库 DROP;storage 副本保留
### Task 9: 收尾
### Task 9: 收尾 ✅ 完成(5c2ee7d helper 收敛 + docs 收官 commit;ADR-018 八决策/README 全链命令链与阶段 4 状态/Plan 5 移交清单 7 项;三绿全量 408(根 382 + 主题 26)+ lint + typecheck 五段;commit 两个不 push——推送由用户执行)
- [ ] ADR-018(Astro 5 选型与许可证/渲染信任链——bodyHtml 不二次清洗决策/分页 V1 不做及路由登记义务移交/P0 发布门禁偏离/编码路径贯穿规则/预览零依赖);README(preview 截图/命令链 publish→build→preview);typecheck 链含 themes/pilot-minimal 与 preview-server(如 TS);lint;三绿全量
- [ ] **Task 6 审查遗留**:① cleanupSiteRows/makeWork/seedPublishedSite 三份测试 helper 迁 tests/integration/helpers.ts(schema 再演进防漂移)② build.html 尾换行与 import 域对齐(若 Task 6 快修未覆盖)③ Plan 5 前置:绝对 origin 链接归一纳入死链检查;redirect 环/OG/hreflang 完整门禁;build:validate CLI;sitemap 重复 loc multiset 语义
- [ ] 移交 Plan 5 清单:SEO 三方 diff(source_rendered 抓取需求)/完整门禁(redirect 环/OG/hreflang)/可复现双构建/部署前置(836 nginx conf 输出);续传 Task 0.2 备份
- [ ] commit + push 由用户执行
- [x] ADR-018(`docs/adr/ADR-018-主题与构建决策.md` 八决策:①Astro 5.18 选型 MIT/依赖只进主题包/vitest 双版本(根 2.1.9 + 主题 3.2.7——astro vite6 兼容,不升根)②渲染信任链——bodyHtml 不二次清洗(三段接力:Plan 2 清洗 + Task 2 重写 + load-data 唯一入口)③分页 V1 一律不做(未登记路由自破门禁①死链——路由登记义务随迁移移交)④P0 发布门禁偏离(issue 无 DB 查询源,206 条真实现状会反堵发布;Plan 5 SEO diff 时重审)⑤编码路径贯穿规则(四层字节精确 + 资产键 URL 线形归一 236f3dc)⑥预览零依赖 + host 白名单收紧(比 spec §12.2 更严——回环纪律)⑦CSP style-src 'unsafe-inline'(Astro scoped 样式内联实证)⑧报告 HTML 先写两域对齐);README(快速开始 publish→build→preview 全链命令链含产物路径/目录结构补 themes 与 preview-server/当前状态阶段 4 完成 + 下一步指向移交清单/ADR-001~018);typecheck 五段链(含 themes/pilot-minimal);lint;三绿全量 408
- [x] **Task 6 审查遗留**:① cleanupSiteRows/makeWork/seedPublishedSite 三份测试 helper 迁 tests/integration/helpers.ts(5c2ee7d——Task 6 审查时三份,Task 7 preview-server 又落第四份一并收敛;seedPublishedSite 增 keyPrefix 参数保各文件站点 key 派生前缀不变;零行为变更由 408 测试守护)② build.html 尾换行与 import 域对齐——**Task 6 快修 fa27a3a 已覆盖**(writeAtomically(reportHtmlPath, `${render}\n`),与 import 域 `${html}\n` 同款,核实无需再动)③ Plan 5 前置四项(绝对 origin 归一/redirect 环/OG/hreflang 完整门禁、build:validate CLI、sitemap 重复 loc multiset)全部入文末移交清单第 2 项
- [x] 移交 Plan 5 清单(见文末新节定稿 7 项:SEO 三方 diff(source_rendered 抓取——旧站 HTML 抓取器是新输入源 + P0-P3 分级门禁)/完整门禁补齐六件(含可复现双构建与 footer 年份固定化)/sitemap-robots 预览可达/og:type=article·og:image·/category/ NewsCard/836 条 301 nginx conf 输出/续传 Task 0.2 cms 备份(阶段 6 L3 前必补)/度量基线(~64s 首跑·~15s 复跑·import 51s 占大头))
- [x] commit 两个(refactor(test) + docs);push 由用户执行
> 组件清单省略注记:快线 §8.2 的 ProductGrid/NewsList 由模板内联网格实现、TaxonomyList V1 无消费场景(首页不做分类导航)——避免与 §8.2 对照误判遗漏。
## 验收(对照快线 §8.7 + V2 §15 阶段 4 子集)
## 验收(对照快线 §8.7 + V2 §15 阶段 4 子集)✅ 全过(Task 8 验收 + 23 断言/6 截图,证据 `docs/evidence/phase4-preview.md`)
- [ ] 显式发布可用且导入产物发布前不可见(published 指针语义)
- [ ] Render Snapshot 冻结六文件 + 构建五禁(无库无网无 seed)
- [ ] 六类页面真实数据渲染 + 图片本地化
- [ ] Preview 200/301/404/noindex/回环
- [ ] 最小门禁五项全绿
- [ ] 真实 hesupipe 端到端验收 + 移动端截图证据
- [x] 显式发布可用且导入产物发布前不可见(published 指针语义——publish.test.ts + build-snapshot ADR-010 双修订测试锁定)
- [x] Render Snapshot 冻结六文件 + 构建五禁(无库无网无 seed——build-pipeline 五禁断言:loader 单一入口/DATABASE_URL 置空/fetch+net stub/无 seed/不读源快照)
- [x] 六类页面真实数据渲染 + 图片本地化(断言 ①a-①f + ② 10/10;媒体本地化 836 文件 sha256 全量校验)
- [x] Preview 200/301/404/noindex/回环(断言 ④a/④b/④c + ⑦a 190 全 200 + ⑦b 1746 全 301;绑定 127.0.0.1 断言)
- [x] 最小门禁五项全绿(断言 ⑨:min-gates-v1 PASS p0=0 p2=0——validation_runs 落库)
- [x] 真实 hesupipe 端到端验收 + 移动端截图证据(23/23 PASS + 双视口 6 截图 `docs/evidence/screenshots/phase4-{mobile-375,desktop-1440}-*.png`)
---
## 移交 Plan 5 清单(Plan 4 收官定稿——阶段 5:SEO 三方差异 + 完整门禁 = M1 完整迁移预览,计划的必读输入)
1. **SEO 三方差异(source_rendered 抓取需求——新输入源)**:旧站 HTML 抓取器是新输入通道(按 route origin 爬旧站页面取 source_rendered,与 dist 渲染输出、导入期 source Record 三方对拍——title/description/canonical/H1/og 逐项 diff);这是 Plan 2 以来第一个新输入源,register 侧需扩 source_type 与快照形态。**比较基准纪律**:source_rendered 对拍要求 dist 逐字节可信——ADR-018 决策二的信任链(不二次清洗)是该 diff 的前提,任何主题层改写都会破坏对拍。**P0-P3 分级门禁同此落地**(issue DB 化 + 分级——ADR-018 决策四 publish 门禁重审的前置)。
2. **完整门禁补齐**(gates.ts 扩展,五门禁 → 完整集):① redirect 环/多跳(manifest 范围内沿 Location 链跟随,环 = P0);② OG/hreflang 面;③ 绝对 origin 死链归一(internal-links 吸收 `https://<origin>/...` 形态——当前按外域豁免);④ sitemap 重复 loc multiset 语义(重复 loc = issue——当前集合语义测不出);⑤ build:validate CLI(对既有产物独立重跑门禁——runGates 运行面已有,缺 sf.ts 入口);⑥ 可复现双构建(冻结输入两次全构建 dist 哈希一致——**footer 年份固定化也在此时**:© 年份现取构建时刻年份,破坏可复现,双构建门禁前必须先固定化)。
3. **sitemap/robots 预览可达**:dist 已含两文件但 manifest 无对应行 → 预览 404(Task 7 真实发现,记 Plan 5);方案二选一——manifest 补 asset 行或预览发布道(不进 manifest 的直通道),与第 2 项 sitemap 门禁一起定(避免两处 sitemap 语义漂移)。
4. **SEO 元数据补齐**:og:type=article / og:image(SeoHead 扩展——Task 3 审查移交);/category/ 的 NewsCard 扩展(分类归档页新闻卡渲染——Task 4 时真实路由集未消费该形态,分派模式已预留)。origin 空守卫已在 load-render-data 落地(类型防御 + 空串缺省)——此项闭环。
5. **deploy 前置**:836 条 301 的 nginx conf 输出(V2 §14 route compile——route_registry redirect 行含 location,数据已齐);输出时 Location 复用 pipeline 的 URL 线形归一(ADR-018 决策五同款——生产面 nginx 先解码,与预览键归一同理防裸非 ASCII)。
6. **续传**:Task 0.2 cms 数据备份(用户暂缓——**阶段 6 L3 验收前必须补做**,责任链自 Plan 2 清单第 6 项 → Plan 3 清单第 7 项延续)。
7. **度量基线(Plan 5 优化对照)**:全链首跑 ~64s(import 51.1s + build 11.9s)/ spec 复审复跑 ~70s / 幂等复跑 ~15s(register 1.8s + import 复用 94ms + publish 164ms + build 复用读原报告);**import 占大头——优化方向 = 批量锚点解析**(逐事件串行分派的交互式往返口径,phase3-import.md §5 记录在案);astro 纯构建 4.9-7.5s + 媒体复制 836 文件 ~164.5MiB 占 building 相大头(量级自洽对账见 phase4-preview.md §4)。