docs(plan): P4 Task 1 勾选 + brand 容忍契约入 Task 3

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-22 07:21:59 +08:00
parent 6a1d9a383b
commit 5686c5c8ba
2 changed files with 3 additions and 2 deletions
+1
View File
@@ -0,0 +1 @@
{"sessionId":"cb6653d0-d0d2-40a9-bc89-ccc8ee725b84","pid":28632,"procStart":"134369499067035150","acquiredAt":1792601355495}
@@ -40,7 +40,7 @@ scripts/sf.ts # + content:publish / build:create / preview:star
--- ---
### Task 1: content:publish 命令(显式发布) ### Task 1: content:publish 命令(显式发布)✅ 完成(c35f108 + rider 6a1d9a3,双审通过;340 测试;dry-run/confirm 单事务/审计首写入方/config v1/anchors helper 三处合并逐字保真。审查移交:brand 容忍契约已入 Task 3;audit 第二写入方时抽共享 helper)
**Files:** `apps/api/src/modules/publish/{publish.service.ts,publish.module.ts}`;sf.ts + `content:publish`;Test `tests/integration/publish.test.ts` **Files:** `apps/api/src/modules/publish/{publish.service.ts,publish.module.ts}`;sf.ts + `content:publish`;Test `tests/integration/publish.test.ts`
@@ -61,7 +61,7 @@ scripts/sf.ts # + content:publish / build:create / preview:star
**Files:** `themes/pilot-minimal/`(package.json/tsconfig/theme.manifest.ts/src/{layouts,components,lib});根 workspace 已含 themes/*;Test `themes/pilot-minimal/test/manifest.test.ts` **Files:** `themes/pilot-minimal/`(package.json/tsconfig/theme.manifest.ts/src/{layouts,components,lib});根 workspace 已含 themes/*;Test `themes/pilot-minimal/test/manifest.test.ts`
- [ ] 失败测试:theme.manifest 满足 contracts 的 isThemeManifest(key='pilot-minimal'/version/renderContractVersion='1'/supportedContentTypes 三类/requiredSiteConfig/六模板条目:home/page/product-list/product-detail/news-list/news-detail+404);渲染数据 loader 对六文件夹具的加载形状 - [ ] 失败测试:theme.manifest 满足 contracts 的 isThemeManifest(key='pilot-minimal'/version/renderContractVersion='1'/supportedContentTypes 三类/requiredSiteConfig/六模板条目:home/page/product-list/product-detail/news-list/news-detail+404);渲染数据 loader 对六文件夹具的加载形状
- [ ] 实现:Astro 5 项目(dependencies 仅 astro);BaseLayout(html 骨架/SeoHead:title/desc/canonical/og 从 page data)/SiteHeader(site.name+简导航:首页/Products/News)/SiteFooter(©+name)/基础样式(design tokens 极简 CSS 变量——快线 §8.5 视觉优先级:宽度/字体/颜色/间距先对,不动像素级还原);组件:RichText(set:html 净化输出——输入已被 Plan 2 清洗+Plan 4 重写,信任链完整但组件仍加一层 sanitize-html 复检?**不加**——输入已清洗,重复清洗违反 YAGNI,JSDoc 记录信任链)/ResponsiveMedia(alt/尺寸/懒加载)/Breadcrumbs/ProductCard/NewsCard/Pagination/NotFound - [ ] 实现:Astro 5 项目(dependencies 仅 astro);BaseLayout(html 骨架/SeoHead:title/desc/canonical/og 从 page data)/SiteHeader(site.name+简导航:首页/Products/News)/SiteFooter(©+name)/基础样式(design tokens 极简 CSS 变量——快线 §8.5 视觉优先级:宽度/字体/颜色/间距先对,不动像素级还原);**brand 恒可能为 {} 且 name 可能是 siteKey 派生占位(Task 1 审查移交)——主题必须对空 brand/占位 name 缺省容忍,禁止直接读 brand.xxx 落空**;组件:RichText(set:html——输入已清洗+重写,信任链 JSDoc 记录,不二次清洗)/ResponsiveMedia(alt/尺寸/懒加载)/Breadcrumbs/ProductCard/NewsCard/Pagination/NotFound
- [ ] 绿 → commit `feat(theme): pilot-minimal 骨架与布局组件` - [ ] 绿 → commit `feat(theme): pilot-minimal 骨架与布局组件`
### Task 4: 六类页面路由与渲染 ### Task 4: 六类页面路由与渲染