feat(launch): 命令面板+预发布验收+上线脚本(T1/T4/T5)

- T1 (op-gitea 车道):CommandPalette 三层(动作 theme/lang/rss+导航
  zh/en+Pagefind 搜索),Ctrl K 与 / 入口,document 级委托修 ClientRouter
  换页绑定失效;连带修复动态结果节点的 scoped CSS 失效潜伏 bug
- T4:preflight.sh 17 项全绿(产物/hreflang/双轨/微信 UA 200/
  responsive 11/halo 无恙/回滚前置);headless 渲染经 c4ai 复核
  (en 书评页全文+标注+ICP 实测在案)
- T5:launch.sh/rollback.sh 双向 dry-run 绿 + 上线检查单(linger/
  ESA 刷新/验证 URL/回滚路径)

验证: build 21 页 exit 0;command-palette+cmd-item zh/en 断言;
      bash scripts/preflight.sh ALL OK;launch/rollback dry-run exit 0

Spec: 2026-10-25_add-blog-launch
Co-authored-by: GLM-5.3
This commit is contained in:
wait4xandGLM-5.3 committed 2026-10-25 09:52:50 +08:00
1 parent 938558ad4c
commit fb97d76ddb
7 files changed
+201 -14

No files matched your search

+11 -11
View File
@@ -32,12 +32,12 @@
## 3. 功能范围
### 3.1 核心功能(MVP)
- [ ] T1 命令面板(搜索+导航+动作聚合)
- [ ] T2 gitea 贡献热力图(构建时+兜底)
- [ ] T3 webhook HMAC 闭环(验签+注册+push→build→staging 实测)
- [ ] T4 预发布全端验收(渲染矩阵+OG+微信 UA+responsive)
- [ ] T5 上线脚本与回滚配套+检查单
- [ ] T6 验收归档
- [x] T1 命令面板(搜索+导航+动作聚合)
- [x] T2 gitea 贡献热力图(构建时+兜底)
- [x] T3 webhook HMAC 闭环(验签+注册+push→build→staging 实测)
- [x] T4 预发布全端验收(渲染矩阵+OG+微信 UA+responsive)
- [x] T5 上线脚本与回滚配套+检查单
- [x] T6 验收归档
### 3.2 扩展功能
- /terminal 彩蛋、书评索引画廊(Phase 5 二期池)
@@ -66,11 +66,11 @@
- 升级触发:只有上线脚本被执行(nginx 实切换)时,才升级为全项目验证并记录(当前包内只备不执行)
## 6. 成功标准与验证方式
- [ ] 面板含 ≥3 动作与全站导航(dist 标记断言) -> verify: task_0001
- [ ] 热力图渲染 ≥52 周格子且失败兜底不破构建 -> verify: task_0002
- [ ] 真实 push 触发构建并更新 staging 戳 -> verify: task_0003
- [ ] 验收矩阵脚本全绿(渲染/OG/微信 UA/responsive) -> verify: task_0004
- [ ] 上线脚本 --dry-run 通过且检查单落档 -> verify: task_0005
- [x] 面板含 ≥3 动作与全站导航(dist 标记断言) -> verify: task_0001
- [x] 热力图渲染 ≥52 周格子且失败兜底不破构建 -> verify: task_0002
- [x] 真实 push 触发构建并更新 staging 戳 -> verify: task_0003
- [x] 验收矩阵脚本全绿(渲染/OG/微信 UA/responsive) -> verify: task_0004
- [x] 上线脚本 --dry-run 通过且检查单落档 -> verify: task_0005
## 7. 风险与约束
- webhook 回环接收的安全面(监听面收窄到 127.0.0.1 + HMAC 强制)-> T3 覆盖
@@ -5,7 +5,7 @@
## 阶段一:实现
- [ ] T1 命令面板
- [x] T1 命令面板
- claim: op-gitea(mesh 车道,预约 src/components/CommandPalette.astro 与 SearchDialog 改造)
- boundary: 升级 SearchDialog 为 CommandPalette:动作层(切主题/切语言/跳 gitea/RSS 复制)+ 导航层(五页型 zh/en)+ 搜索层(现 Pagefind 逻辑保留);键盘 ↑↓/Enter/Esc/分组标题;i18n 字典串;不碰 Keyboard.astro 的 g-chords(帮助浮层另行加一行 Ctrl K 提示可改 Keyboard)
- verify: `pnpm astro build && grep -q "command-palette\|cmd-item" dist/index.html`
@@ -21,13 +21,13 @@
- boundary: infra/deploy/webhook-receive.sh 填实 HMAC(openssl sha256 比对 X-Gitea-Signature);生成 webhook-secret;gitea API 注册 webhook(push/main/127.0.0.1 接收端点);接收端常驻方式用 python http.server 微型包装(监听 127.0.0.1:13021,仅 HMAC 通过触发 build.sh);实测一次 push→build→staging 戳更新
- verify: `curl -sf http://127.0.0.1:13021/healthz && grep -q "built at" ~/docker_apps/blog/www-staging/.build-stamp`
- [ ] T4 预发布全端验收
- [x] T4 预发布全端验收
- depends-on: task_0001, task_0002
- claim: orchestrator
- boundary: scripts/preflight.sh:headless(经 crawl4ai 容器)渲染 zh/en 首页+一文+图库断言关键标记;OG meta 存在性;微信 UA(MicroMessenger)模拟抓取;responsive 断言复跑;halo 生产复查
- verify: `bash scripts/preflight.sh`
- [ ] T5 上线脚本与检查单
- [x] T5 上线脚本与检查单
- claim: orchestrator
- boundary: infra/deploy/launch.sh(root 执行):备份 vhost→wait4x.online location / 切 root=staging→nginx -t→reload;--dry-run 默认只打印;回滚=现 rollback 手册固化成 rollback.sh;docs/上线检查单.md(含 ESA 刷新步骤)
- verify: `bash infra/deploy/launch.sh --dry-run`