chore(spec): 归档 blog-5n——八任务收敛(后台深度优化全家桶)
Spec: 2026-11-05_blog-5n-admin-deep-optimization Co-authored-by: GLM-5.3
This commit is contained in:
1 parent
a555a3e450
commit
5c0e6ed900
29 files changed
+1559
-512
No files matched your search
@@ -0,0 +1,101 @@
|
||||
# blog-5n:后台深度优化全家桶(14 项全量) - 完成总结
|
||||
|
||||
## 交付结论
|
||||
- 结果:完成
|
||||
- 完成时间:2026-11-05 20:12
|
||||
|
||||
## 假设回顾
|
||||
### 已验证假设
|
||||
- Sveltia 0.259 与 0.252 对本站用到的 API(registerEditorComponent/registerPreviewStyle/config schema)兼容(升级后全量回归验证)
|
||||
- TMT 翻译单篇耗时 < 构建容忍度(守卫超时 180s,失败不阻断部署、保留旧英文版)
|
||||
|
||||
### 仍未完全验证的假设
|
||||
- 无
|
||||
|
||||
## 交付范围
|
||||
### 已交付
|
||||
- task_0001 Sveltia 0.259 升级与回归
|
||||
- task_0002 A1 翻译进构建链
|
||||
- task_0003 A2+A3+A4+C3 表单优化批
|
||||
- task_0004 B1+B2+D1+E1 后台页面批
|
||||
- task_0005 C1 首页设置分组
|
||||
- task_0006 C2 内容仪表盘
|
||||
- task_0007 暗色预览
|
||||
- task_0008 媒体库归置
|
||||
|
||||
### 未交付
|
||||
- 无
|
||||
|
||||
### 偏差说明
|
||||
- 无
|
||||
|
||||
## 简化决策
|
||||
### 保持简单的关键选择
|
||||
- 最简可行:新文件优先(守卫脚本/状态条/统计脚本/manifest)+ 共享文件主会话三批统一改(build.sh/config.yml/index.html)+ 升级先行(后续工作全部在新版上验证)
|
||||
- 暂不引入: 自定义 Sveltia widget 开发、翻译并发加速
|
||||
- 不做的抽象: 后台微前端/工具页框架(静态页够用)
|
||||
- 范围级别:package
|
||||
- 变更对象: public/admin 全域 + build.sh + content/site schema + 文档
|
||||
- 快速检查: `pnpm astro build` + `python3 scripts/build-perf/config-check.py .`
|
||||
- 集成检查: E2E 61/61 + content-lint 0/0/0 + admin 页加载零控制台错误(playwright 预登录态)+ build-status.json 产物断言 + 翻译守卫 dry-run
|
||||
- 全项目检查: 部署后人工核验后台(登录态表单可编辑/状态条/速通坞/暗色预览);**升级条件**——仅当 Sveltia 升级引致行为差异时升级全站回归,本包已含升级后 E2E 全跑
|
||||
- 升级触发: admin 为独立资源面,升级为「后台人工核验」即可
|
||||
|
||||
### 本轮明确不做的内容
|
||||
- 照片摄取管线目录迁移;TMT 凭据变更;评论系统本身
|
||||
|
||||
## 变更边界
|
||||
### 本轮主要改动模块
|
||||
- 见 tasks.md 的 boundary 记录
|
||||
|
||||
### 明确未触碰的区域
|
||||
- 照片摄取管线目录迁移;TMT 凭据变更;评论系统本身
|
||||
|
||||
## 验证证据
|
||||
### 备注
|
||||
- 机器证据:runs.jsonl(见验证范围的机器验证率)
|
||||
|
||||
## 验证范围
|
||||
- 级别:package
|
||||
- 机器验证率:8/8
|
||||
- 规则:check 与 done 复用该范围;只有记录升级触发时才执行全项目检查
|
||||
|
||||
## 哲学生效证据
|
||||
### 行为成效回填
|
||||
- Development Record 行为门禁通过
|
||||
|
||||
### 一致性门禁回顾
|
||||
- 验收面(checklist 或成功标准)已通过
|
||||
|
||||
## Git 记录
|
||||
- 日期时间:2026-11-05 20:12
|
||||
- 范围:blog-5n:后台深度优化全家桶(14 项全量)
|
||||
- 功能:task_0001 Sveltia 0.259 升级与回归;task_0002 A1 翻译进构建链;task_0003 A2+A3+A4+C3 表单优化批;task_0004 B1+B2+D1+E1 后台页面批;task_0005 C1 首页设置分组;task_0006 C2 内容仪表盘;task_0007 暗色预览;task_0008 媒体库归置
|
||||
- 操作:提交 / 推送
|
||||
- 成效:Development Record 行为门禁通过
|
||||
- 提交:pending local commit
|
||||
- 提交区间:a555a3e450cd26a8e53f6ea86009c211b981cce8..a555a3e450cd26a8e53f6ea86009c211b981cce8
|
||||
- 推送:not-run (push stage follows commit)
|
||||
|
||||
## AGENTS.md 增量提议
|
||||
```diff
|
||||
后台深度优化全家桶 14 项全量落地:Sveltia 0.259 升级、TMT 翻译进构建链(保存中文即自动出英文)、标签/模板/SEO/中英表单四优化、部署状态条+PWA+速通坞+回滚指引、首页设置分组(Sveltia 嵌套雷区规避 B 案)、内容仪表盘、暗色预览、媒体库归置。多队友协同:@worker-one 领单未达由主会话兜底、4 子代理并行交付(其中 C1 子代理识别出与上午热修的嵌套雷区冲突请示拍板,选 B 案压平)。
|
||||
```
|
||||
|
||||
## 被拒绝的扩展提议
|
||||
- 无
|
||||
|
||||
## 门禁证据
|
||||
- check_spec_package.py exit 0
|
||||
|
||||
## 遗留事项
|
||||
- 无;问题处置见下方结构化区块
|
||||
|
||||
## 问题处置
|
||||
|
||||
```json
|
||||
{
|
||||
"issues": [],
|
||||
"version": 1
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
export PATH="$HOME/.local/node/bin:$PATH"
|
||||
grep -q '0\.259\.0' public/admin/sveltia-cms.js
|
||||
node --check public/admin/sveltia-cms.js
|
||||
grep -c "registerPreviewStyle" public/admin/sveltia-cms.js >/dev/null
|
||||
pnpm astro build >/dev/null 2>&1
|
||||
echo "verify_t1 OK"
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
[ -x scripts/deploy/translate-step.sh ]
|
||||
grep -q "translate-step" infra/deploy/build.sh
|
||||
grep -q "build-status.json" infra/deploy/build.sh
|
||||
grep -q "trap 'write_status fail'" infra/deploy/build.sh
|
||||
bash scripts/deploy/translate-step.sh --dry-run
|
||||
echo "verify_t2 OK"
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
export PATH="$HOME/.local/node/bin:$PATH"
|
||||
python3 scripts/build-perf/config-check.py . | grep -q 全部通过
|
||||
grep -q "≤32 字" public/admin/config.yml
|
||||
grep -q "60–120 字" public/admin/config.yml
|
||||
grep -q "避免同义新造" public/admin/config.yml
|
||||
grep -q "写作模板》复制起手" public/admin/config.yml
|
||||
grep -q "英文版构建时自动机翻" public/admin/config.yml
|
||||
echo "verify_t3 OK"
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
node --check public/admin/deploy-status.js
|
||||
grep -q "deploy-status.js" public/admin/index.html
|
||||
grep -q "quick-dock" public/admin/index.html
|
||||
grep -q "manifest.webmanifest" public/admin/index.html
|
||||
grep -q "favicon.svg" public/admin/index.html
|
||||
[ -f docs/后台回滚指引.md ]
|
||||
grep -q "一句话版本" docs/后台回滚指引.md
|
||||
echo "verify_t4 OK"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
export PATH="$HOME/.local/node/bin:$PATH"
|
||||
pnpm astro build >/dev/null 2>&1
|
||||
grep -q "tagline\|avatar" dist/index.html
|
||||
grep -q "identity\|socials" src/content.config.ts
|
||||
echo "verify_t5 OK"
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
export PATH="$HOME/.local/node/bin:$PATH"
|
||||
pnpm astro build >/dev/null 2>&1
|
||||
python3 scripts/build-perf/gen-admin-stats.py dist
|
||||
[ -f dist/admin/stats.html ]
|
||||
python3 -c "import json;d=json.load(open('dist/admin/stats.json'));assert d['posts_visible']>0 and 'top_tags' in d"
|
||||
echo "verify_t6 OK"
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
node --check public/admin/preview-style.js
|
||||
grep -q "prefers-color-scheme: dark" public/admin/preview-style.js
|
||||
python3 -c "import json;m=json.load(open('public/admin/manifest.webmanifest'));assert m['start_url']=='/admin/' and len(m['icons'])==2"
|
||||
echo "verify_t7 OK"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
export PATH="$HOME/.local/node/bin:$PATH"
|
||||
python3 scripts/build-perf/config-check.py . | grep -q 全部通过
|
||||
grep -q "上传后构建自动优化" public/admin/config.yml
|
||||
grep -q "媒体" docs/管理台.md
|
||||
echo "verify_t8 OK"
|
||||
@@ -0,0 +1,16 @@
|
||||
{"task": "task_0001", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t1.sh", "exit": 0, "duration_s": 31.176, "stdout_tail_sha256": "cced3c08cf1601b8177b7728e48c6add6982099d0785fa9fa4dd470b1f4900a5", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:10:50+00:00"}
|
||||
{"task": "task_0002", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t2.sh", "exit": 0, "duration_s": 0.116, "stdout_tail_sha256": "a539567e2a1bad8a450d90a3998841921d5f353cdf8a13cd1dd9499117f71287", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:10:51+00:00"}
|
||||
{"task": "task_0003", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t3.sh", "exit": 0, "duration_s": 0.15, "stdout_tail_sha256": "409ed685a0bde8695328c75cd1e92fb1e54398e22f911a252c1385f2262db9b3", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:10:51+00:00"}
|
||||
{"task": "task_0004", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t4.sh", "exit": 0, "duration_s": 0.048, "stdout_tail_sha256": "8338018e17e2e8b7c9c6aeb8468f164497a332d7b9fbe69a027eec2f3eed2dab", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:10:51+00:00"}
|
||||
{"task": "task_0005", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t5.sh", "exit": 0, "duration_s": 21.431, "stdout_tail_sha256": "99a2c86534e476be7ff3365a14ce028321c3efe5f6849f7831d8c5fe5fc4e6e2", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:11:12+00:00"}
|
||||
{"task": "task_0006", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t6.sh", "exit": 0, "duration_s": 21.644, "stdout_tail_sha256": "625069f2ee6d8e41eb00af14da68816cbe639979296adc0375ffc20780fadf19", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:11:34+00:00"}
|
||||
{"task": "task_0007", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t7.sh", "exit": 0, "duration_s": 0.06, "stdout_tail_sha256": "6d54a7fb09f6d6b7db49450f842bd397759f0aede9ed53b6e2edb0aa67271f6b", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:11:34+00:00"}
|
||||
{"task": "task_0008", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t8.sh", "exit": 0, "duration_s": 0.205, "stdout_tail_sha256": "2f95596c0c69d4a3e9e5e800876d2007624acea62f90b35243c0dc3aa3f737c8", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:11:35+00:00"}
|
||||
{"task": "task_0001", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t1.sh", "exit": 0, "duration_s": 23.758, "stdout_tail_sha256": "cced3c08cf1601b8177b7728e48c6add6982099d0785fa9fa4dd470b1f4900a5", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:12:11+00:00"}
|
||||
{"task": "task_0002", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t2.sh", "exit": 0, "duration_s": 0.083, "stdout_tail_sha256": "a539567e2a1bad8a450d90a3998841921d5f353cdf8a13cd1dd9499117f71287", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:12:11+00:00"}
|
||||
{"task": "task_0003", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t3.sh", "exit": 0, "duration_s": 0.146, "stdout_tail_sha256": "409ed685a0bde8695328c75cd1e92fb1e54398e22f911a252c1385f2262db9b3", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:12:11+00:00"}
|
||||
{"task": "task_0004", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t4.sh", "exit": 0, "duration_s": 0.043, "stdout_tail_sha256": "8338018e17e2e8b7c9c6aeb8468f164497a332d7b9fbe69a027eec2f3eed2dab", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:12:11+00:00"}
|
||||
{"task": "task_0005", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t5.sh", "exit": 0, "duration_s": 16.974, "stdout_tail_sha256": "99a2c86534e476be7ff3365a14ce028321c3efe5f6849f7831d8c5fe5fc4e6e2", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:12:28+00:00"}
|
||||
{"task": "task_0006", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t6.sh", "exit": 0, "duration_s": 28.626, "stdout_tail_sha256": "625069f2ee6d8e41eb00af14da68816cbe639979296adc0375ffc20780fadf19", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:12:57+00:00"}
|
||||
{"task": "task_0007", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t7.sh", "exit": 0, "duration_s": 0.062, "stdout_tail_sha256": "6d54a7fb09f6d6b7db49450f842bd397759f0aede9ed53b6e2edb0aa67271f6b", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:12:57+00:00"}
|
||||
{"task": "task_0008", "cmd": "bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t8.sh", "exit": 0, "duration_s": 0.172, "stdout_tail_sha256": "2f95596c0c69d4a3e9e5e800876d2007624acea62f90b35243c0dc3aa3f737c8", "tree_fp": "85e5901717ba7746d406493c34a028b8314068453ac38a6f6bfb3606f10c66a8", "at": "2026-11-05T12:12:57+00:00"}
|
||||
@@ -0,0 +1,80 @@
|
||||
<!-- spec-format: 2 -->
|
||||
# blog-5n:后台深度优化全家桶(14 项全量)
|
||||
|
||||
- **slug**: 2026-11-05_blog-5n-admin-deep-optimization
|
||||
- **日期**: 2026-11-05
|
||||
- **状态**: 进行中
|
||||
- Git integration branch:`spec/2026-11-05_blog-5n-admin-deep-optimization`
|
||||
- 证据协议:evidence: runs
|
||||
- **提案**: 用户拍板「全部都做包括暂缓的」:写作链路(A1 翻译进构建链/A2 标签防手滑/A3 起手模板/A4 SEO 提示)、发布反馈(B1 部署状态条/B2 favicon+PWA)、内容管理(C1 首页设置分组/C2 内容仪表盘/C3 中英对照提示)、工具入口(D1 速通坞)、安全网(E1 回滚指引)、暂缓档转正(Sveltia 0.252→0.259 升级、暗色预览、媒体库归置)。多队友协同:@worker-one + 4 子代理 + 主会话集成。
|
||||
|
||||
## 1. 问题定义
|
||||
- **项目目标**: 后台从「功能齐」到「全程顺手」——写作(双语零操作/标签不散/起手不空)、发布(状态可见/入口收拢/回滚有指引)、管理(分组/统计/对照)三条线一步到位;底层 Sveltia 升级到 0.259.0 并全量回归。
|
||||
- **目标用户**: 站长(唯一编辑者,高频写作与内容管理)
|
||||
- **核心价值**: 把这一周散落的「后台不好用」类反馈一次性清零;英文站从手动操作变全自动。
|
||||
|
||||
## 2. 假设与待确认
|
||||
|
||||
### 2.1 已确认事实
|
||||
- TMT 翻译脚本 translate_posts.py 幂等 + locked 保护,可直接挂构建链
|
||||
- Sveltia 最新 0.259.0(registry 核实);本站 bundle 0.252.0 pinned 本地
|
||||
- Artalk 评论管理在 https://wait4x.online/artalk;rollback 脚本在 infra/deploy/ 已存在
|
||||
- build.sh 为部署链核心(A1/B1/C2 三项都挂它,由主会话统一改避免竞态)
|
||||
|
||||
### 2.2 关键假设
|
||||
- Sveltia 0.259 与 0.252 对本站用到的 API(registerEditorComponent/registerPreviewStyle/config schema)兼容(升级后全量回归验证)
|
||||
- TMT 翻译单篇耗时 < 构建容忍度(守卫超时 180s,失败不阻断部署、保留旧英文版)
|
||||
|
||||
### 2.3 待确认问题
|
||||
- [x] 全量范围:用户明确「全部都做包括暂缓的」
|
||||
- [x] 协同分工:@worker-one 独立文件 ×2、子代理 ×4(新文件/独立文件)、共享文件(config.yml/index.html/build.sh)主会话独占
|
||||
- [x] 媒体库归置取低风险形态:照片目录不动(摄取管线契约),归置=上传落点核对+文档+hints
|
||||
|
||||
### 2.4 可选解释与取舍
|
||||
- A2 标签防手滑:若 Sveltia select 无 multiple 则退 list+常用标签 hint(不引自定义 widget)
|
||||
- A3 起手模板:利用现有隐藏「写作模板」+ Sveltia 条目复制能力 + hint 指引(不建模板机制)
|
||||
- C1 分组:仅改 home 单例形状(schema+yaml+消费端+后台表单),不动其他单例
|
||||
|
||||
### 2.5 已证伪路径
|
||||
- 无(新增包)
|
||||
|
||||
## 3. 功能范围
|
||||
|
||||
### 3.1 核心功能(MVP)
|
||||
- [x] T1 Sveltia 0.259 升级 + 全量回归(三脚本注册/预览/集合加载)
|
||||
- [x] T2 A1 翻译进构建链(translate-step 守卫 + build.sh 挂载)
|
||||
- [x] T3 A2+A3+A4+C3 表单优化批(config.yml:标签建议/模板指引/SEO 提示/中英对照)
|
||||
- [x] T4 B1+B2+D1+E1 后台页面批(状态条/favicon/PWA/速通坞/回滚指引)
|
||||
- [x] T5 C1 首页设置分组(schema 迁移 + 消费端 + 表单)
|
||||
- [x] T6 C2 内容仪表盘(构建期统计 + 静态页)
|
||||
- [x] T7 暗色预览(preview-style.js 双主题)
|
||||
- [x] T8 媒体库归置(落点核对 + hints + 文档)
|
||||
|
||||
### 3.2 扩展功能
|
||||
- 无
|
||||
|
||||
### 3.3 不在范围内
|
||||
- 照片摄取管线目录迁移;TMT 凭据变更;评论系统本身
|
||||
|
||||
## 4. 最小实现路径
|
||||
- 最简可行:新文件优先(守卫脚本/状态条/统计脚本/manifest)+ 共享文件主会话三批统一改(build.sh/config.yml/index.html)+ 升级先行(后续工作全部在新版上验证)
|
||||
- 暂不引入: 自定义 Sveltia widget 开发、翻译并发加速
|
||||
- 不做的抽象: 后台微前端/工具页框架(静态页够用)
|
||||
|
||||
### 5.1 验证策略
|
||||
- 范围级别:package
|
||||
- 变更对象: public/admin 全域 + build.sh + content/site schema + 文档
|
||||
- 快速检查: `pnpm astro build` + `python3 scripts/build-perf/config-check.py .`
|
||||
- 集成检查: E2E 61/61 + content-lint 0/0/0 + admin 页加载零控制台错误(playwright 预登录态)+ build-status.json 产物断言 + 翻译守卫 dry-run
|
||||
- 全项目检查: 部署后人工核验后台(登录态表单可编辑/状态条/速通坞/暗色预览);**升级条件**——仅当 Sveltia 升级引致行为差异时升级全站回归,本包已含升级后 E2E 全跑
|
||||
- 升级触发: admin 为独立资源面,升级为「后台人工核验」即可
|
||||
|
||||
## 6. 成功标准与验证方式
|
||||
- [x] Sveltia 0.259 上线且三脚本/预览/表单全可用 -> verify: task_0001
|
||||
- [x] 中文保存→英文自动出(守卫不阻断)-> verify: task_0002
|
||||
- [x] 表单四优化与页面四件套生效 -> verify: task_0003 + task_0004
|
||||
- [x] 首页分组/仪表盘/暗色预览/媒体归置落地 -> verify: task_0005..task_0008
|
||||
|
||||
## 7. 关联与风险
|
||||
- 最大风险 = Sveltia 升级破坏现有定制(三脚本 API 面);缓解:升级后立即 playwright 冒烟 + 生产灰度观察,异常即回滚 bundle(git revert 单文件)
|
||||
- 翻译挂链风险 = TMT 配额/网络抖动;缓解:守卫永不阻断 + last-good 英文版保留
|
||||
@@ -0,0 +1,47 @@
|
||||
# Phase 5n:后台深度优化全家桶 - 任务拆解
|
||||
|
||||
## 使用规则
|
||||
- 共享文件(public/admin/config.yml、public/admin/index.html、infra/deploy/build.sh)仅主会话编辑,队友产出片段/新文件
|
||||
- E2E 口径:`pnpm astro build → gz-server.py 18925 <dist> → E2E_BASE=http://127.0.0.1:18925 node tests/e2e.mjs`(基线 61)
|
||||
|
||||
## 阶段一:实现
|
||||
|
||||
- [x] task_0001 Sveltia 0.259 升级与回归
|
||||
- claim: orchestrator
|
||||
- boundary: public/admin/sveltia-cms.js(bundle 置换)
|
||||
- verify: `bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t1.sh`
|
||||
|
||||
- [x] task_0002 A1 翻译进构建链
|
||||
- claim: orchestrator + worker-one
|
||||
- boundary: scripts/deploy/translate-step.sh(新,worker-one)、infra/deploy/build.sh(主会话挂载)
|
||||
- verify: `bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t2.sh`
|
||||
|
||||
- [x] task_0003 A2+A3+A4+C3 表单优化批
|
||||
- claim: orchestrator
|
||||
- boundary: public/admin/config.yml(标签/模板指引/SEO/中英 hint)、content/posts/writing-template.md
|
||||
- verify: `bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t3.sh`
|
||||
|
||||
- [x] task_0004 B1+B2+D1+E1 后台页面批
|
||||
- claim: orchestrator + worker-one + 子代理
|
||||
- boundary: public/admin/deploy-status.js(新,子代理)、public/admin/manifest.webmanifest(新,子代理)、docs/后台回滚指引.md(新,worker-one)、public/admin/index.html(主会话接线)
|
||||
- verify: `bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t4.sh`
|
||||
|
||||
- [x] task_0005 C1 首页设置分组
|
||||
- claim: orchestrator + 子代理
|
||||
- boundary: src/content.config.ts(siteHome schema)、content/site/home.yaml、src/lib/site-content.ts(消费端)、public/admin/config.yml(home 条目,主会话拼装子代理片段)
|
||||
- verify: `bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t5.sh`
|
||||
|
||||
- [x] task_0006 C2 内容仪表盘
|
||||
- claim: 子代理
|
||||
- boundary: scripts/build-perf/gen-admin-stats.mjs(新)、infra/deploy/build.sh 挂载(主会话)
|
||||
- verify: `bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t6.sh`
|
||||
|
||||
- [x] task_0007 暗色预览
|
||||
- claim: 子代理
|
||||
- boundary: public/admin/preview-style.js(双主题改造)
|
||||
- verify: `bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t7.sh`
|
||||
|
||||
- [x] task_0008 媒体库归置
|
||||
- claim: orchestrator
|
||||
- boundary: public/admin/config.yml(media_folder hints)、docs/管理台.md
|
||||
- verify: `bash .spec/specs/2026-11-05_blog-5n-admin-deep-optimization/evidence/verify_t8.sh`
|
||||
Reference in new issue
Block a user