dc4557cccf07230c89ff7645ceb0d039341e664e
Plan 2 Task 1:@sf/adapter-wp 包骨架(照 contracts 先例:build extends + rootDir "." + exclude test)+ WxrLimits 十字段限额契约与 DEFAULT_WXR_LIMITS 值域冻结(设计基线 §7.2)+ 跨包接线。 跨包接线(一份 paths 三方消费): - 根 tsconfig compilerOptions.paths 把 @sf/contracts、@sf/adapter-wp 映射到 各自 src/index.ts;adapter tsconfig extends 根 tsconfig 使包级 tsc 读同一 份 paths(extends 相对路径按声明处解析,映射始终落在仓库根) - 根 vitest.config.ts resolve.alias 指向同一映射(vitest 不读 tsconfig paths) - adapter 加 @sf/contracts workspace:* 依赖;三方均直连 src,不经 dist (已实测:移走 contracts dist 后 vitest 与包级 tsc 仍全绿) - 根 devDependencies 加 @types/node@^22(对齐 apps/api 钉 22):alias 的 fileURLToPath 辅助需 node 类型,此前根程序靠 apps/api 传递 @types 才有 node 全局,属偶合 限额类型锁(照 contracts 单源派生先例):DEFAULT_WXR_LIMITS as const satisfies WxrLimits + _LIMIT_KEYS 键集与 keyof WxrLimits 双向咬合断言; timeBudgetMs 以可注入时钟(构造函数 now())测试于 Task 3、实测覆盖于 Task 8。 验证:pnpm test 78 绿(75+3);pnpm --filter @sf/adapter-wp exec tsc -p tsconfig.json --noEmit exit 0(--listFiles 证实 contracts 经 src 解析); 根 typecheck 链与 pnpm lint 绿;build 产物形状核验后清理。 Co-Authored-By: Claude Code <noreply@anthropic.com>
SiteForge
WordPress 站点到静态站点迁移引擎:读取 WXR/Sitemap/媒体归档 → 清洗入不可变内容库 → 主题化构建为自包含静态站点(Astro),全程可审计、可复现、契约冻结。
快速开始
前置:Node.js >= 22、Docker、corepack。
corepack enable # 激活 pnpm(或自行安装 pnpm@10)
pnpm install # 安装依赖
pnpm db:up # 启动 PostgreSQL 16(宿主端口 5434,等 healthcheck 就绪)
pnpm db:migrate # 开发库全量迁移(apps/api/drizzle)
pnpm db:test # 一键验收:起库 + 跑全部测试(测试用临时库,开发库零写入)
日常质量门(等价于 CI):
pnpm lint && pnpm typecheck && pnpm test
说明:集成测试由 vitest globalSetup 自动创建临时库 sf_test_<ts> 并注入 DATABASE_URL_TEST,结束即 DROP——勿在 .env 手动设置该变量。
目录结构
apps/api/ NestJS standalone 骨架 + Drizzle schema/迁移(21 表,数据库约束即规格)
packages/contracts/ UniversalRow / Route / Render / Theme 跨源契约(冻结,变更须升版)
tests/ 单元 + 集成测试(fixtures:WXR/Sitemap/媒体样例)
infra/ docker-compose:PostgreSQL 16(端口 5434,避开 cms 项目 5433)
scripts/ migrate-test.sh 等运维脚本
docs/ adr/ 决策记录 · evidence/ 基线证据 · superpowers/ 规格与计划
文档导航
- 设计基线(表结构/技术决策/阶段划分):
docs/superpowers/specs/2026-10-20-siteforge-vertical-slice-design-v2.md - 阶段 0+1 实施计划:
docs/superpowers/plans/2026-10-20-slice-foundation-phase0-1.md - 架构决策记录(ADR-001~015):
docs/adr/ - 基线证据(环境/真实 WXR):
docs/evidence/
当前状态
- 阶段 1 已完成:契约冻结、21 表数据模型全量落地(不可变触发器/唯一约束/CHECK 均落数据库并被 75 项测试锁定)、空环境一键启动+迁移验收通过。
- 下一步:阶段 2——WXR 适配器(流式 SAX 解析 → UniversalRow),计划基于阶段 1 经验另立。
Description