浅念
|
dc4557cccf
|
feat(adapter-wp): 包骨架与限额契约
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>
|
2026-10-21 08:05:08 +08:00 |
|
浅念
|
2d33dd17dd
|
docs(plan): Plan 2 采纳复审建议——paths 统一三方消费、commander 定根依赖
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 22:53:40 +08:00 |
|
浅念
|
5cc98c584f
|
docs(plan): Plan 2 修复评审三 Issue 与建议——CLI机制/跨包接线前置/media清单哈希定义/probe路径策略/内存采样法/报告路径/责任链续传
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 22:51:53 +08:00 |
|
浅念
|
ecff5a34af
|
docs(plan): Plan 2 实施计划——阶段2 WXR 流式适配器(9任务)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 22:46:37 +08:00 |
|
浅念
|
494beadf94
|
chore: 终审 Minor 清理——@types/node 钉 22、contracts 构建排除测试、helpers 盲区注记、计划收口注记
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 21:08:34 +08:00 |
|
浅念
|
c128ebf5a0
|
docs(plan): Task 14 勾选——Plan 1 全部任务完成;修注释笔误
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:59:58 +08:00 |
|
浅念
|
07483b5ae2
|
docs: ADR 001–015 落档 + README
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:56:26 +08:00 |
|
浅念
|
3c32becba6
|
chore: 收尾清账——type:module/gitattributes/engines/lint/CI/根typecheck覆盖
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:56:26 +08:00 |
|
浅念
|
622c2b09d8
|
docs(plan): Task 13 勾选——阶段 1 验收:globalSetup 临时库 + 空库一键迁移
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:43:24 +08:00 |
|
浅念
|
f1c181de02
|
test(db): 空库一键迁移验收 + globalSetup 临时库 + 公共夹具收敛(阶段1验收)
- vitest globalSetup:每次运行 CREATE sf_test_<ts> 临时库 → drizzle-orm 程序化迁移器
全量迁移(apps/api/src/db/migrate.ts,drizzle-kit 无法指向运行时建库)→ 设
DATABASE_URL_TEST 让 getDb() 自动回退到临时库;teardown DROP(WITH FORCE)。
有 default 导出时 vitest 不捕获具名 teardown,故用双具名导出。
- db.full-migrate.test.ts:21 表齐 + 四张不可变触发器在库 + sf_test_* 护栏断言
(current_database 不符即红,杜绝静默连开发库)。
- helpers.ts 收敛:rand/rejectionMessage/createSiteFixture/withImmutableCleanup/
withTestDb,Task 6–12 七文件内联版替换为 import(断言、对照组、清场顺序不变)。
- scripts/migrate-test.sh:docker compose up --wait + pnpm test 一键验收。
- 实证:75 测试全绿(72+3);开发库 21 表行数总和 0(零写入);无 sf_test_* 残留。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:43:13 +08:00 |
|
浅念
|
9e0b49885b
|
docs(plan): Task 12 勾选——七域迁移收官,21 表齐
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:28:07 +08:00 |
|
浅念
|
e905cba729
|
feat(db): 0006 构建/验收/审计域 + 追加式审计
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:24:18 +08:00 |
|
浅念
|
c09a9b31f6
|
docs(plan): Task 11 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:19:00 +08:00 |
|
浅念
|
2b017ed197
|
feat(db): 0005 路由注册表——exact/collision 双键 + NULLS NOT DISTINCT 唯一
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:14:46 +08:00 |
|
浅念
|
de415e7301
|
docs(plan): Task 10 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:08:24 +08:00 |
|
浅念
|
1cc0dcc57f
|
feat(db): 0004 媒体域——assets/usages 双唯一
media_assets 双唯一 UNIQUE(site_id, source_url) / UNIQUE(site_id, public_path)
+ status 四值 enum + source_id 可空;media_usages 复合主键
(media_asset_id, content_revision_id, field_path),无独立 id/时间戳(spec §5.5)。
vitest fileParallelism: false——不可变表清场 DISABLE/ENABLE TRIGGER 是库级 DDL,
与并行文件的不可变断言竞态(实测 media 清场窗口内 content 断言偶发放行);
串行执行消除竞态,套件仅数秒。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:02:57 +08:00 |
|
浅念
|
cb959c905d
|
docs(plan): Task 9 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:52:01 +08:00 |
|
浅念
|
bc1dcc2ef9
|
feat(db): 0003 分类域——taxonomy/term/content_terms
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:48:04 +08:00 |
|
浅念
|
60581047ef
|
docs(plan): Task 8 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:42:46 +08:00 |
|
浅念
|
3b45219bbd
|
feat(db): 0002 内容域——entry/locale/revision + 修订不可变 + 回填 content_entry FK
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:36:19 +08:00 |
|
浅念
|
7636a81bd2
|
docs(plan): Task 7 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:31:25 +08:00 |
|
浅念
|
32ceba58f0
|
feat(db): 0001 来源域——connection/snapshot/job/record + 快照不可变触发器
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:27:31 +08:00 |
|
浅念
|
5da883cd40
|
docs(plan): Task 6 勾选;schema 注释编号对齐
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:19:54 +08:00 |
|
浅念
|
63830f249e
|
feat(db): 0000 站点域——sites/site_config_revisions + 唯一约束
drizzle-kit 首个迁移从 0000 起编号(计划文案写 0001,以实际产出为准)。
迁移文件 + meta/_journal.json + snapshot 一并入库。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:17:16 +08:00 |
|
浅念
|
7720d66630
|
docs(plan): Task 5 勾选 + Step3 验证命令对齐现实
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:14:17 +08:00 |
|
浅念
|
39734a7467
|
fix(api): requireDatabaseUrl 早失败守卫;typecheck 门禁;build 排除 test;池生命周期注释
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:10:19 +08:00 |
|
浅念
|
514f37301e
|
feat(api): NestJS standalone 骨架 + Drizzle/postgres.js 接入
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:56:50 +08:00 |
|
浅念
|
6725bf0024
|
docs(plan): Task 4 勾选;Task 13 沉淀 KINDS 复用注记
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:50:18 +08:00 |
|
浅念
|
d650490ed4
|
fix(contracts): Kind/Policy 单源派生冻结锁;status 整数+域校验;key 放宽注释
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:47:42 +08:00 |
|
浅念
|
c8c4336da7
|
feat(contracts): Route/Render/Theme Manifest 契约 v1 冻结
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:36:45 +08:00 |
|
浅念
|
33517065f6
|
docs(plan): Task 3 勾选 + 阶段2责任清单
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:30:43 +08:00 |
|
浅念
|
31cd7ed7f4
|
fix(contracts): 守卫收紧必填字段类型与对象形状;修复包级 test 脚本;补齐守卫测试与 REQUIRED 类型锁
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:26:42 +08:00 |
|
浅念
|
857389e68b
|
feat(contracts): UniversalRow 契约 v1 冻结 + 守卫 + 测试
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:15:47 +08:00 |
|
浅念
|
5e4524e2fb
|
docs(plan): Task 2 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:12:37 +08:00 |
|
浅念
|
cf9a34959c
|
feat(infra): PostgreSQL16 compose(宿主5434)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:10:26 +08:00 |
|
浅念
|
b538c21e78
|
docs(plan): Task 1 勾选;Task 14 沉淀质量审查建议(type:module/.gitattributes/engines)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:43:25 +08:00 |
|
浅念
|
30c78800e0
|
chore(workspace): pnpm monorepo 骨架 + vitest 冒烟
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:36:33 +08:00 |
|
浅念
|
7d1ccd3dd8
|
docs: 阶段0收尾——Task 0.3/0.4 勾选、基数文档措辞修正
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:34:28 +08:00 |
|
浅念
|
2ee84851cb
|
chore(evidence): hesupipe WXR 输入基数记录
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:32:03 +08:00 |
|
浅念
|
2f1d594034
|
fix(fixtures): 修正 wppop_sections PHP 序列化长度前缀(审查发现);记录悬空图库引用为有意设计
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:30:25 +08:00 |
|
浅念
|
681163be97
|
test(fixtures): 脱敏最小 WXR/sitemap/媒体夹具(全虚构)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:26:17 +08:00 |
|
浅念
|
2b1130c92c
|
docs: Task 0.1 收尾——cms 基线降级为信息性记录(发现 cms 为活跃仓库)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:23:28 +08:00 |
|
浅念
|
277523fa2c
|
docs(plan): Task 0.2 标记用户暂缓(待备份目标盘)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:18:02 +08:00 |
|
浅念
|
d64a035e4c
|
chore(evidence): 记录阶段0环境版本基线(含 cms 只读基线与 gitignore 验证)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:17:12 +08:00 |
|
浅念
|
0ead98fcee
|
docs(plan): 复审残留两修补——getDb 测试库优先接线、Task0.1 步骤重编号
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:53:07 +08:00 |
|
浅念
|
8da5fa5a23
|
docs(plan): 修复计划评审两卡点+六建议
- cms 验收改为与只读基线逐字节一致(防 agent 误 restore cms)
- .gitignore 反排除 .env.example(否则 git add 失败)
- Task0.1 补 cms 基线记录与 gitignore 验证步骤
- Task0.2 补数据授权确认;Task5 补 test 脚本
- Task12 七值改八值;Task10 复选框笔误;Task13 helpers 机制具体化
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:50:01 +08:00 |
|
浅念
|
e6c771151d
|
docs(plan): Plan 1 实施计划——阶段0+1(基线备份/工程骨架/21表契约冻结)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:45:05 +08:00 |
|
浅念
|
80dcc8378f
|
docs(spec): 采纳复审六条建议——G5措辞、附件页默认规则、NULLS NOT DISTINCT、verify.ts分工、incoming目录、周期对齐
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:40:10 +08:00 |
|
浅念
|
255b166513
|
docs(spec): 采纳 V2 设计为基线并落实四项修订
- V2 规格取代 V1(V1 文件头标注作废与原因)
- 修订①:§1.2 列明资产移植白名单与重写边界
- 修订②:Tag/Product Tag 默认 301 主列表(不生成 Tag 页)
- 修订③:ZIP 输入移出切片(媒体只接受已解包目录)
- 修订④:?p= 查询路由降级为 excluded 登记,SP3 再实现
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:35:36 +08:00 |
|
浅念
|
2f4110f856
|
docs(spec): 采纳复审三条建议——字段重命名显式化、storage/sitemap 入目录树、媒体tier2与redirect目标测试用例
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:19:49 +08:00 |
|