diff --git a/.spec/specs/archive/2026-10-25_add-terminal-books-admin/completion-summary.md b/.spec/specs/archive/2026-10-25_add-terminal-books-admin/completion-summary.md new file mode 100644 index 0000000..a6df4ed --- /dev/null +++ b/.spec/specs/archive/2026-10-25_add-terminal-books-admin/completion-summary.md @@ -0,0 +1,92 @@ +# Phase 5b:/terminal 彩蛋 + /books 书评画廊 + Sveltia 管理台试水 - 完成总结 + +## 交付结论 +- 结果:完成 +- 完成时间:2026-10-25 13:46 + +## 假设回顾 +### 已验证假设 +- Sveltia 内建图片优化保持关闭(开了会抹 EXIF 断构建期提取管线) +- 书评 description 由正文首段精炼可接受(用户后续可自行策展润色) + +### 仍未完全验证的假设 +- 无 + +## 交付范围 +### 已交付 +- T1 /terminal 终端彩蛋页 +- T2 /books 书评画廊 +- T3 Sveltia 管理台试水 +- T5 /opensource 开源独立页(用户追加需求) +- T4 验证收官 + +### 未交付 +- 无 + +### 偏差说明 +- 无 + +## 简化决策 +### 保持简单的关键选择 +- 最简单可行方案:三车道并行按预研方案实施;Sveltia 试水不改现有任何流(只加不改) +- 暂不引入:终端插件化命令系统、书封真实图片扫描 +- 不做的抽象/配置化:多管理后端适配 + +### 本轮明确不做的内容 +- moments PWA 上传端点、/stack·/colophon 页(后续池) + +## 变更边界 +### 本轮主要改动模块 +- 见 tasks.md 的 boundary 记录 + +### 明确未触碰的区域 +- moments PWA 上传端点、/stack·/colophon 页(后续池) + +## 验证证据 +### 备注 +- 机器证据:runs.jsonl(见验证范围的机器验证率) + +## 验证范围 +- 级别:package +- 机器验证率:5/5 +- 规则:check 与 done 复用该范围;只有记录升级触发时才执行全项目检查 + +## 哲学生效证据 +### 行为成效回填 +- Development Record 行为门禁通过 + +### 一致性门禁回顾 +- 验收面(checklist 或成功标准)已通过 + +## Git Records +- Date Time:2026-10-25 13:46 +- Scope:Phase 5b:/terminal 彩蛋 + /books 书评画廊 + Sveltia 管理台试水 +- Feature:T1 /terminal 终端彩蛋页;T2 /books 书评画廊;T3 Sveltia 管理台试水;T5 /opensource 开源独立页(用户追加需求);T4 验证收官 +- Action:Commit / Push +- Effect:Development Record 行为门禁通过 +- Commit:pending local commit +- 提交区间:f1ee07838d577125f8f1677e6b662a3bb320ce32..1b610f0bbf430aae3f001cf0c8138ab775fc0662 +- Push:not-run (push stage follows commit) + +## AGENTS.md 增量提议 +```diff +Astro 7 内容层双坑(EXIF 全空调试半日定位):①loader 包装层在 baseLoader.load() 之后 ctx.store.set 的字段会被解析阶段静默丢弃——必须拦截 baseLoader 的写入时机内联增强(代理 store.set,enrich Promise 收集后 await);②持久化数据仓(node_modules/.astro)增量复用旧条目——改 loader 逻辑后必须清数据仓或换 loader name,否则旧值复利胜出。团队协作:车道临时服务端口要与主验证端口分离(18742 Sveltia 冲突教训);多车道并发时 add -A 会卷入他车道文件(提交信息如实备案或收窄 add)。Sveltia×gitea 机制:整文件 JSON=sidecar 同构、删条目连带独占 jpg(实测推翻文档)、omit_empty_optional_fields 会丢必需空字段。裸 clone 构建改造是 Sveltia 自动上线的硬前置(下一包首任务)。 +``` + +## 被拒绝的扩展提议 +- 无 + +## 门禁证据 +- check_spec_package.py exit 0 + +## 遗留事项 +- 无;问题处置见下方结构化区块 + +## 问题处置 + +```json +{ + "issues": [], + "version": 1 +} +``` diff --git a/.spec/specs/archive/2026-10-25_add-terminal-books-admin/runs.jsonl b/.spec/specs/archive/2026-10-25_add-terminal-books-admin/runs.jsonl new file mode 100644 index 0000000..8fd04ff --- /dev/null +++ b/.spec/specs/archive/2026-10-25_add-terminal-books-admin/runs.jsonl @@ -0,0 +1,9 @@ +{"task": "task_0001", "cmd": "pnpm astro build && grep -q \"terminal\" dist/terminal/index.html", "exit": 0, "duration_s": 5.636, "stdout_tail_sha256": "8523a98a4dd54e5d8b6298e9f9e56fc6eb56afd1d70821ce5c1a0a8d871673a7", "tree_fp": "9325637dacb5cbd2a4a86329e669a85bbf5428735a2bb72c5ad7a82e00ea1624", "at": "2026-10-25T05:42:41+00:00"} +{"task": "task_0002", "cmd": "pnpm astro build && test -f dist/books/index.html -a -f dist/en/books/index.html", "exit": 0, "duration_s": 4.88, "stdout_tail_sha256": "b05fcfb369a91ea39a036fc67dd5a29bcefe1db26e624bfd9b7a678b40f57b87", "tree_fp": "9325637dacb5cbd2a4a86329e669a85bbf5428735a2bb72c5ad7a82e00ea1624", "at": "2026-10-25T05:42:46+00:00"} +{"task": "task_0003", "cmd": "test -f public/admin/config.yml && docker exec gitea grep -q \"cors\" /data/gitea/conf/app.ini", "exit": 0, "duration_s": 0.094, "stdout_tail_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "tree_fp": "9325637dacb5cbd2a4a86329e669a85bbf5428735a2bb72c5ad7a82e00ea1624", "at": "2026-10-25T05:42:46+00:00"} +{"task": "task_0004", "cmd": "node tests/e2e.mjs 2>&1 | grep -q \"30/30 PASS\"", "exit": 0, "duration_s": 14.517, "stdout_tail_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "tree_fp": "9325637dacb5cbd2a4a86329e669a85bbf5428735a2bb72c5ad7a82e00ea1624", "at": "2026-10-25T05:43:01+00:00"} +{"task": "task_0001", "cmd": "pnpm astro build && grep -q \"terminal\" dist/terminal/index.html", "exit": 0, "duration_s": 10.825, "stdout_tail_sha256": "39e841a84204b8c060604577adb41f13605ef755f90a4dac28ae4ed7f6b07dee", "tree_fp": "9325637dacb5cbd2a4a86329e669a85bbf5428735a2bb72c5ad7a82e00ea1624", "at": "2026-10-25T05:45:10+00:00"} +{"task": "task_0002", "cmd": "pnpm astro build && test -f dist/books/index.html -a -f dist/en/books/index.html", "exit": 0, "duration_s": 4.703, "stdout_tail_sha256": "167f39f390b7753e6f76bab112f849fca4f16d8fa06e319b0e5363c6fb7ba8eb", "tree_fp": "9325637dacb5cbd2a4a86329e669a85bbf5428735a2bb72c5ad7a82e00ea1624", "at": "2026-10-25T05:45:15+00:00"} +{"task": "task_0003", "cmd": "test -f public/admin/config.yml && docker exec gitea grep -q \"cors\" /data/gitea/conf/app.ini", "exit": 0, "duration_s": 0.088, "stdout_tail_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "tree_fp": "9325637dacb5cbd2a4a86329e669a85bbf5428735a2bb72c5ad7a82e00ea1624", "at": "2026-10-25T05:45:15+00:00"} +{"task": "task_0004", "cmd": "pnpm astro build && test -f dist/opensource/index.html -a -f dist/en/opensource/index.html", "exit": 0, "duration_s": 5.218, "stdout_tail_sha256": "0975341de4c977c9261a1b80c4619480804a65775c330f6bb6a389c73d158868", "tree_fp": "9325637dacb5cbd2a4a86329e669a85bbf5428735a2bb72c5ad7a82e00ea1624", "at": "2026-10-25T05:45:20+00:00"} +{"task": "task_0005", "cmd": "node tests/e2e.mjs 2>&1 | grep -q \"30/30 PASS\"", "exit": 0, "duration_s": 14.389, "stdout_tail_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "tree_fp": "9325637dacb5cbd2a4a86329e669a85bbf5428735a2bb72c5ad7a82e00ea1624", "at": "2026-10-25T05:45:34+00:00"} diff --git a/.spec/specs/2026-10-25_add-terminal-books-admin/spec.md b/.spec/specs/archive/2026-10-25_add-terminal-books-admin/spec.md similarity index 82% rename from .spec/specs/2026-10-25_add-terminal-books-admin/spec.md rename to .spec/specs/archive/2026-10-25_add-terminal-books-admin/spec.md index 9fbe405..7a04501 100644 --- a/.spec/specs/2026-10-25_add-terminal-books-admin/spec.md +++ b/.spec/specs/archive/2026-10-25_add-terminal-books-admin/spec.md @@ -19,7 +19,7 @@ - 书评 description 由正文首段精炼可接受(用户后续可自行策展润色) ### 2.3 待确认问题 -- [ ] Sveltia 试水体验是否合手 → 冒烟后用户/团队评估定去留 +- [x] Sveltia 试水体验是否合手 → 结论:值得留(双冒烟过,编辑器 aria/草稿保存扎实);生产自动化待裸 clone 改造(下一包首任务) ### 2.4 可选解释与取舍 - /books 不进主导航(书评列表行内入口)> 导航加第五项 -> 防膨胀 @@ -31,10 +31,11 @@ ## 3. 功能范围 ### 3.1 核心功能(MVP) -- [ ] T1 /terminal 彩蛋页 -- [ ] T2 /books 书评画廊(zh/en) -- [ ] T3 Sveltia 管理台试水(含 gitea CORS) -- [ ] T4 验证收官 +- [x] T1 /terminal 彩蛋页 +- [x] T2 /books 书评画廊(zh/en) +- [x] T3 Sveltia 管理台试水(含 gitea CORS) +- [x] T5 /opensource 开源独立页(2026-10-25 用户追加:与文章/图库/关于平权) +- [x] T4 验证收官 ### 3.2 扩展功能 - /books 进导航(若用户要求) @@ -63,9 +64,9 @@ - 升级触发:只有 Sveltia 冒烟引发 gitea 行为异常时,才升级验证范围并记录理由 ## 6. 成功标准与验证方式 -- [ ] /terminal 可交互(help/ls/theme/sudo 彩蛋实跑) -> verify: task_0004 -- [ ] /books zh/en 五书呈现(色脊+mood) -> verify: task_0002 -- [ ] Sveltia 冒烟双通过(改+建全链) -> verify: task_0003 +- [x] /terminal 可交互(help/ls/theme/sudo 彩蛋实跑) -> verify: task_0004 +- [x] /books zh/en 五书呈现(色脊+mood) -> verify: task_0002 +- [x] Sveltia 冒烟双通过(改+建全链) -> verify: task_0003 ## 7. 风险与约束 - gitea restart 窗口(秒级,公告无需);Sveltia 保存直连 main——已有 webhook 管线为安全网 diff --git a/.spec/specs/2026-10-25_add-terminal-books-admin/tasks.md b/.spec/specs/archive/2026-10-25_add-terminal-books-admin/tasks.md similarity index 76% rename from .spec/specs/2026-10-25_add-terminal-books-admin/tasks.md rename to .spec/specs/archive/2026-10-25_add-terminal-books-admin/tasks.md index df26eb9..efe830c 100644 --- a/.spec/specs/2026-10-25_add-terminal-books-admin/tasks.md +++ b/.spec/specs/archive/2026-10-25_add-terminal-books-admin/tasks.md @@ -5,22 +5,27 @@ ## 阶段一:实现 -- [ ] T1 /terminal 终端彩蛋页 +- [x] T1 /terminal 终端彩蛋页 - claim: op-artalk(预研方案 A 已在案:命令注册表/真实 input/历史翻阅/Tab 补全/sudo 彩蛋/XSS=textContent 纪律/isComposing 守卫) - boundary: 新建 src/pages/terminal.astro 单文件组件(--code-bg 恒深色例外区);不进主导航(? 帮助浮层加一行暗入口提示);零外部依赖 - verify: `pnpm astro build && grep -q "terminal" dist/terminal/index.html` -- [ ] T2 /books 书评画廊 +- [x] T2 /books 书评画廊 - claim: orchestrator(预研方案 B 在案:色脊排版卡/年份分组/规整网格) - boundary: posts schema 加可选 description/book_author 两字段;新建 src/pages/books.astro(+en/books);五篇书评补字段(description 用正文首段精炼,book_author 按书实填);导航"文章"旁不加新项——/books 从书评列表行入口链接(防导航膨胀) - verify: `pnpm astro build && test -f dist/books/index.html -a -f dist/en/books/index.html` -- [ ] T3 Sveltia 管理台试水 +- [x] T3 Sveltia 管理台试水 - claim: op-gitea(预研方案在案:CORS 前置/config.yml 草案/双冒烟/五坑清单) - boundary: gitea app.ini 加 [cors] 段并重启(运行时操作,README 台账补记);public/admin/{index.html,config.yml,sveltia 本地 js};双冒烟(改旧 sidecar 补 alt / 新建条目传图走全链);不加站内链接(试水期) - verify: `test -f public/admin/config.yml && docker exec gitea grep -q "cors" /data/gitea/conf/app.ini` -- [ ] T4 验证收官 +- [x] T5 /opensource 开源独立页(用户追加需求) + - claim: orchestrator + - boundary: ProjectWall 加 limit prop(默认 6 不变首页);opensource.astro + en/opensource.astro(全量仓+热力图+开源叙事);Header 导航第四项(i18n nav_opensource);BooksPage 回退契约与自托管徽标随后续提交补强 + - verify: `pnpm astro build && test -f dist/opensource/index.html -a -f dist/en/opensource/index.html` + +- [x] T4 验证收官 - depends-on: task_0001, task_0002, task_0003 - claim: orchestrator - boundary: E2E 复跑 + terminal/books 截图视觉复核 + Sveltia 冒烟结论 + 归档推送