|
31272
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"b188dd612 {"Commits":[{"Sha1":"b188dd61233c511fcd355ab3d730ee0660271925","Message":"docs(mcp): 记录真实受控写入与全量后端验收\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:42:52-07:00"},{"Sha1":"0b611b26a1f8461e69d8f37e8b5399480ed9156b","Message":"Merge branch 'main' into codex/mcp-pilot\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:42:52-07:00"},{"Sha1":"3f2ef43ecc7597c49f16394fac1ad2115f31aaaf","Message":"fix(workbench): 分离开发身份入口与同源平台 API\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:41:29-07:00"},{"Sha1":"55735d0f1e8c2e3e006fb0cf2bb9f0cd2804cb14","Message":"fix(workbench): 支持临时目录符号链接下的构建入口\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:40:54-07:00"},{"Sha1":"6c7242958373d397008ef4add4fbef211df03a62","Message":"fix(workbench): 显式校验登录构建配置并保持回调同源\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:40:37-07:00"}],"HeadCommit":{"Sha1":"b188dd61233c511fcd355ab3d730ee0660271925","Message":"docs(mcp): 记录真实受控写入与全量后端验收\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:42:52-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/44f8a6c0a8cd1c035de339ba21db2897b04d0d95...b188dd61233c511fcd355ab3d730ee0660271925","Len":9}...
|
1789861456
|
Edit
Delete
|
|
31270
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"44f8a6c0a {"Commits":[{"Sha1":"44f8a6c0a8cd1c035de339ba21db2897b04d0d95","Message":"docs(workbench): record controlled-ops dev deployment\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:20:57-07:00"},{"Sha1":"a3e660c1acddecf014a891693697a953d9e53919","Message":"chore(workbench): rebind management snapshots\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:18:23-07:00"},{"Sha1":"9e0ddaa2063329f43d08f1b8738fc518c2aede7c","Message":"chore(evidence): classify MCP pilot snapshot\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:18:14-07:00"},{"Sha1":"a03ad984b7d613b80fdc7ef5c8af032c0c3624a0","Message":"feat(workbench): guide authorized capability operations\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:14:38-07:00"}],"HeadCommit":{"Sha1":"44f8a6c0a8cd1c035de339ba21db2897b04d0d95","Message":"docs(workbench): record controlled-ops dev deployment\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:20:57-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/d4a56be01eb60847220b47ceab6e9d67877f57e9...44f8a6c0a8cd1c035de339ba21db2897b04d0d95","Len":4}...
|
1789860093
|
Edit
Delete
|
|
31269
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"d4a56be01 {"Commits":[{"Sha1":"d4a56be01eb60847220b47ceab6e9d67877f57e9","Message":"Merge remote-tracking branch 'origin/main' into codex/mcp-pilot\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:08:56-07:00"},{"Sha1":"f8ff6cd95d0d1ab5551ccbedad2c53c55bca8d10","Message":"docs(mcp): 记录固定版本真实客户端验收与工具治理边界\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:08:14-07:00"},{"Sha1":"2174dd61783fabf43b2a6f8f4ccd36d83f62ea6e","Message":"feat(mcp): 接入只读工具并逐次核验身份撤权与来源\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:02:00-07:00"}],"HeadCommit":{"Sha1":"d4a56be01eb60847220b47ceab6e9d67877f57e9","Message":"Merge remote-tracking branch 'origin/main' into codex/mcp-pilot\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T16:08:56-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/f5853b26f29c616308480cba60d45b0026352875...d4a56be01eb60847220b47ceab6e9d67877f57e9","Len":3}...
|
1789859339
|
Edit
Delete
|
|
31268
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"f5853b26f {"Commits":[{"Sha1":"f5853b26f29c616308480cba60d45b0026352875","Message":"docs: record all-module dev loading and verification\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T15:55:32-07:00"},{"Sha1":"84def697d823f39881bf1f5effa76ef32dd532dd","Message":"chore(reports): record 16-profile runtime image smoke\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T15:53:58-07:00"}],"HeadCommit":{"Sha1":"f5853b26f29c616308480cba60d45b0026352875","Message":"docs: record all-module dev loading and verification\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T15:55:32-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/c92a831292abb4dac8ef5d39993630eb920c6cc9...f5853b26f29c616308480cba60d45b0026352875","Len":2}...
|
1789858540
|
Edit
Delete
|
|
31267
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"c92a83129 {"Commits":[{"Sha1":"c92a831292abb4dac8ef5d39993630eb920c6cc9","Message":"fix(runtime): package generated Prisma clients for hosted modules\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T15:48:22-07:00"}],"HeadCommit":{"Sha1":"c92a831292abb4dac8ef5d39993630eb920c6cc9","Message":"fix(runtime): package generated Prisma clients for hosted modules\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T15:48:22-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/5344a74ea5b7c31eaf1729a1ae218fbdf635172b...c92a831292abb4dac8ef5d39993630eb920c6cc9","Len":1}...
|
1789858153
|
Edit
Delete
|
|
31266
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"5344a74ea {"Commits":[{"Sha1":"5344a74ea5b7c31eaf1729a1ae218fbdf635172b","Message":"feat(runtime): wire database environments for all module profiles\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T15:43:35-07:00"}],"HeadCommit":{"Sha1":"5344a74ea5b7c31eaf1729a1ae218fbdf635172b","Message":"feat(runtime): wire database environments for all module profiles\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T15:43:35-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/0027742e94d18790b9d56227ffeaf1b2dc1e8d05...5344a74ea5b7c31eaf1729a1ae218fbdf635172b","Len":1}...
|
1789857869
|
Edit
Delete
|
|
31265
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"0027742e9 {"Commits":[{"Sha1":"0027742e94d18790b9d56227ffeaf1b2dc1e8d05","Message":"docs: record adversarial acceptance of all runtime modules\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T10:40:54-07:00"}],"HeadCommit":{"Sha1":"0027742e94d18790b9d56227ffeaf1b2dc1e8d05","Message":"docs: record adversarial acceptance of all runtime modules\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T10:40:54-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/372c80430ac30ac81d6d2bb6735d5c53eaca09df...0027742e94d18790b9d56227ffeaf1b2dc1e8d05","Len":1}...
|
1789839666
|
Edit
Delete
|
|
31264
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"372c80430 {"Commits":[{"Sha1":"372c80430ac30ac81d6d2bb6735d5c53eaca09df","Message":"chore(reports): rebind gates after module intake deployment\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T08:31:41-07:00"},{"Sha1":"f0ee06723d25b45fd4aba58c02b953c859ddd6a9","Message":"chore(reports): bind deployed runtime to module intake image\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T08:30:52-07:00"},{"Sha1":"4aa51b1dda383df0c35acb1432d69a8c633d4bff","Message":"docs(deploy): record module intake dev runtime update\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T08:30:34-07:00"},{"Sha1":"57d2e1a0e96eee62ff42ed12a32db8e50d4d8c4d","Message":"chore(image): record isolated module intake smoke\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T08:28:26-07:00"},{"Sha1":"6573febd08e735260d2f3d95df4541277671c92f","Message":"chore(image): record fixed-source module intake build\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T08:28:02-07:00"}],"HeadCommit":{"Sha1":"372c80430ac30ac81d6d2bb6735d5c53eaca09df","Message":"chore(reports): rebind gates after module intake deployment\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T08:31:41-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/51712a5e0007b2d33d2ecd681dd5aece0223254c...372c80430ac30ac81d6d2bb6735d5c53eaca09df","Len":5}...
|
1789831928
|
Edit
Delete
|
|
31263
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"51712a5e0 {"Commits":[{"Sha1":"51712a5e0007b2d33d2ecd681dd5aece0223254c","Message":"chore(reports): bind module intake gates to 0d1a394\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T08:25:01-07:00"},{"Sha1":"0d1a3946823a1e7771b6f359d98eb4273aba4100","Message":"feat(modules): admit remaining platform domains as fail-closed shapes\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T08:01:24-07:00"}],"HeadCommit":{"Sha1":"51712a5e0007b2d33d2ecd681dd5aece0223254c","Message":"chore(reports): bind module intake gates to 0d1a394\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T08:25:01-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/baaaf4a4dd10af62639fadd54abb8a8fe5c05aec...51712a5e0007b2d33d2ecd681dd5aece0223254c","Len":2}...
|
1789831541
|
Edit
Delete
|
|
31259
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"baaaf4a4d {"Commits":[{"Sha1":"baaaf4a4dd10af62639fadd54abb8a8fe5c05aec","Message":"docs(deploy): record fixed-source dev runtime update\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T07:53:36-07:00"}],"HeadCommit":{"Sha1":"baaaf4a4dd10af62639fadd54abb8a8fe5c05aec","Message":"docs(deploy): record fixed-source dev runtime update\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T07:53:36-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/7b4f6df8b3e347df680d4649515fa3f4c4e09301...baaaf4a4dd10af62639fadd54abb8a8fe5c05aec","Len":1}...
|
1789829634
|
Edit
Delete
|
|
31257
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"7b4f6df8b {"Commits":[{"Sha1":"7b4f6df8b3e347df680d4649515fa3f4c4e09301","Message":"docs(public-file): reflect approved DEC-040 in store comment\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T07:48:22-07:00"}],"HeadCommit":{"Sha1":"7b4f6df8b3e347df680d4649515fa3f4c4e09301","Message":"docs(public-file): reflect approved DEC-040 in store comment\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T07:48:22-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/9dc4f3236199294415bd7cb15547687667940246...7b4f6df8b3e347df680d4649515fa3f4c4e09301","Len":1}...
|
1789829315
|
Edit
Delete
|
|
31254
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"9dc4f3236 {"Commits":[{"Sha1":"9dc4f3236199294415bd7cb15547687667940246","Message":"chore(reports): deployed-runtime 回绑 —— 常驻容器跑的是 c0bc8c0 的镜像\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T06:57:37-07:00"},{"Sha1":"68438d6e12f25645ca806681c661340cf989889d","Message":"chore(reports): C12 升格影响的门禁回绑 @ 3602f99 —— 仓根十五份 + runtime 十六份 + 夹具两份\n\nreports:rebind 在干净检出里跑完 14 个零依赖门禁(含两份工作台快照),pnpm --dir runtime\ncheck:governance 重出 runtime/reports 十六份,需构建产物的 fixtures / fixture-coverage 在主工作树\n(此刻干净)重跑——rebind 明确拒收那两份。全部绑 3602f99 / dirty=false。\n\n工作台快照因此记入 notification-webhook 的新档位:form=runtime-module、模块 state=authority、\nconsumption=runtime-service,Catalog 仍 candidate_e0 / E0(authority≠E2 标注保留)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T06:57:36-07:00"},{"Sha1":"3602f991ed80441050696984fc530f114a8bedfe","Message":"chore(reports): 镜像与冒烟回绑 @ c0bc8c0 —— C12 四个实现提交后重建并切换常驻运行时\n\n在 .worktrees/image-c0bc8c0 的干净检出里 image:build(enterprise-platform/runtime:c0bc8c05d14c,\nworktreeDirty=false),冒烟 6/6,up -d --no-deps runtime 切换后 healthy,check:deployed passed。\n运行面实测:/api/health 200;通知的四个端点已随控制器挂载,无凭证调 effects:classify 得 401(鉴权先拦)。\n**两个新模块的 profile 都未装**——数据未迁,装上只会制造\"已可用\"的假象。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T06:56:44-07:00"},{"Sha1":"c0bc8c05d14cd036625d6b44bdb7bb3d53e8f2be","Message":"feat(modules): C12 收尾三步——投递实现迁入、客户端改写、运行时与控制器落地\n\n一口气把 C11 走过的三步在 C12 上做完:\n\n**① 投递实现迁入**(288 行,原文照搬未改语义):签名、验签、重放随机数、主机白名单、可重试判定、\n模板渲染,从 runtime/clients/notification-webhook 迁到 runtime/modules/notification-webhook/src/delivery/。\n\n**② 客户端改写成远程调用**(482 → 113 行):把 notification-delivery-api.v1 的四个操作实现为对平台端点的\n调用。消费者从此不再自己持有签名密钥与出口白名单。未配置 baseUrl / 非 2xx / 返回体不合形状 / 传输异常\n四条路径都是拒绝,各有单测。clients/README 的 B 类段落随之从两项减到一项(只剩配置平台)。\n\n**③ 运行时与控制器**:kit 加 notificationWebhookRuntime 钩子;模块给实现(规则一律调 @juhai/contracts,\n一条都不在模块里重写;租户取自 principal 不从请求体取;无已批准快照时用域自带 deny-all);\n装配点加 NotificationWebhookController,四条路由挂在 /api/v1/notification-deliveries 下。\n\n**一处映射必须写实而不是编**:两个分类器返回的是字符串联合(DELIVER / DUPLICATE / DLQ / REJECT_REPLAY /\nREJECT),不带原因码。我读了规则源码才定映射:effect 的 REJECT = 入参形状不合法(标识为空、次数非正整数、\n三个布尔位不是字面布尔)→ WEBHOOK_EFFECT_ATTEMPT_INVALID;REJECT_REPLAY → WEBHOOK_REPLAY_NOT_AUTHORIZED;\nprovider 的 REJECT → PROVIDER_OUTCOME_INVALID。非拒绝的分类结果走 outcome 原样透传,**不塞进拒绝词表**。\n\n**④ 迁移与对账工具**,形态同 C11(生成 SQL + 对账,不连库)。本域最需要写明的判断是**幂等键从哪来**:\n平台的唯一键是 (tenant_id, idempotency_key),而宿主 Notification 没有这一列(它靠含 escalation_id 的五元组)。\n迁移因此确定性派生:sha256(五元组) 前 32 位 + `host:` 前缀——带前缀是为了让迁来的键与平台自生成的键一眼可分,\n用确定性哈希是因为迁移要可重跑(随机键会让 ON CONFLICT 失效、重跑翻倍)。\n对账**单列幂等键碰撞**:宿主那组唯一键里 escalation_id 可空,两条只差 ticket 的记录会撞出同一个键,\n这类必须在迁移前被人看见,不能靠 ON CONFLICT 悄悄合并成一条。\n\n门禁反向记账两条随控制器落地清掉:registry-only(前缀有控制器应答了)与一条 fixture-only\n(域规则从\"只有夹具在调\"变成有运行时消费者)。CLAUDE.md 清单 12 / 7 / 8 / 8 → **12 / 6 / 7 / 8**。\n模块单测 22 例;治理单测 480 例 479 通过 / 0 失败;contracts 416 例全过;六道门禁 passed;api-nestjs typecheck 0 error。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T06:54:00-07:00"},{"Sha1":"394ad9b7cd96348b1d2d83e50c9b26ddffa4a842","Message":"feat(modules): C12 两个作业处理器落地——认领+退避调度与过期认领释放\n\n- **claim-expiry 完全自洽**:只读写平台账本。释放 = claim_owner / claim_expires_at 置空、\n next_attempt_at 置为现在。**不改 attempts**——认领过期不是一次投递尝试,把它算成尝试会让一条消息\n 因为工作进程崩溃而提前耗尽重试额度。\n- **delivery-retry 只做账本侧调度**:认领、计次、按退避排下次时间;**不发请求**。外发实现(签名 / 超时 / HTTP)\n 今天仍在 runtime/clients/notification-webhook,照 C11 先例将迁入。这不是占位——调度与外发本就该分开,\n 而认领 + 退避正是\"同一条消息不被两个工作进程同时投\"的保证。\n\n认领做成**乐观抢占**:updateMany + 条件(claim 为空或已过期),并发下只有一个进程 count=1,其余拿 0 并跳过。\n用\"先读后写\"会在两个进程之间留竞态窗口——这条在 store 注释里写明了。\n退避是纯函数(base 指数增长、封顶),base/max 由路由策略给,作业不自己发明节奏。\n\nPrisma store 的每个操作都在事务里先 set_config('app.current_tenant_id', …, true)(FORCE RLS 下不设读不到;\ntrue 限定本事务内,避免连接复用带租户)。描述符同批补 health 真检查项(database up/down)。\n\n单测 5 例:三条失败关闭前提、认领成功才记尝试且退避指数封顶、已被他人认领则跳过且不记尝试、\n过期认领释放且不动 attempts、退避纯函数取值。\ncheck:stub-surface 反向逼着删两条桩登记,CLAUDE.md 桩数 14 → 12;治理单测 480 例 479 通过 / 0 失败。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T06:39:06-07:00"}],"HeadCommit":{"Sha1":"9dc4f3236199294415bd7cb15547687667940246","Message":"chore(reports): deployed-runtime 回绑 —— 常驻容器跑的是 c0bc8c0 的镜像\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T06:57:37-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/3b55095e3aac481fdce7fde36f0dcc24309d5ef4...9dc4f3236199294415bd7cb15547687667940246","Len":7}...
|
1789826703
|
Edit
Delete
|
|
31253
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"3b55095e3 {"Commits":[{"Sha1":"3b55095e3aac481fdce7fde36f0dcc24309d5ef4","Message":"feat(modules): public-file 宿主数据迁移与对账工具(DEC-040 实施工作包第 2—3 步的可执行面)\n\n**不连任何库**:源库在工单仓(另一个 Owner 的环境),目标库在平台,两边凭据不该压进一个进程。\n工具做的是「生成幂等 SQL + 逐条对账」,导出与执行由操作者各自用 psql 完成——与仓里\nstack/provision/db.sh 同形(打印 SQL,由人决定在哪个库上执行)。用法与两条导出命令写在脚本头部。\n\n映射守住 DEC-040 的两条硬约束,各有单测:\n- **业务外键不迁**:宿主 Attachment.ticket_id(必填外键 + onDelete Cascade)降级为 owner_type='ticket'\n + owner_ref 两列,平台侧不建外键;\n- **retention_until 原样带过去**:级联删除迁走后,它是「宿主忘了调删除接口」时唯一兜底的东西。\n另外宿主出现未登记的状态值时落 PENDING 并在对账里单列 unmappedStatuses——**不猜**。\n\nSQL 幂等且不倒退:ON CONFLICT (tenant_id, file_id) DO UPDATE 只覆盖宿主侧的事实列,\n**不覆盖 scan_attempts / purged_at / purge_***(重跑不该把平台已推进的清理进度倒回宿主快照那一刻);\n按租户切分并先 set_config,FORCE RLS 下不设租户一行也写不进去。\n\n对账:行数 + sha256 逐条 + 状态分布;balanced 只在「不缺行且摘要逐条一致」时为真,不平退出码 1。\n**不看 storage_ref**——迁移不搬字节,对象仍在同一个桶里。\n\n端到端实跑过(合成 1 行,跑完已删,表回到 0 行):生成的 SQL 在 dev 平台库真表上 INSERT 0 1 / COMMIT,\n导出目标侧对账判平(源 1 / 目标 1、sha256 一致),目标为空时判不平且退出 1。\n模块单测 31 例通过 / 1 跳过(+9);check:modules / check:module-imports / check:stub-surface / check:pins 均 passed。\n\n**没做也不该由我做的**:真实数据迁移、宿主改调平台端点、级联删除语义的宿主侧改造——那些落在工单仓,\n归该仓 Owner;本仓这侧的可执行面到此齐备。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T06:16:30-07:00"}],"HeadCommit":{"Sha1":"3b55095e3aac481fdce7fde36f0dcc24309d5ef4","Message":"feat(modules): public-file 宿主数据迁移与对账工具(DEC-040 实施工作包第 2—3 步的可执行面)\n\n**不连任何库**:源库在工单仓(另一个 Owner 的环境),目标库在平台,两边凭据不该压进一个进程。\n工具做的是「生成幂等 SQL + 逐条对账」,导出与执行由操作者各自用 psql 完成——与仓里\nstack/provision/db.sh 同形(打印 SQL,由人决定在哪个库上执行)。用法与两条导出命令写在脚本头部。\n\n映射守住 DEC-040 的两条硬约束,各有单测:\n- **业务外键不迁**:宿主 Attachment.ticket_id(必填外键 + onDelete Cascade)降级为 owner_type='ticket'\n + owner_ref 两列,平台侧不建外键;\n- **retention_until 原样带过去**:级联删除迁走后,它是「宿主忘了调删除接口」时唯一兜底的东西。\n另外宿主出现未登记的状态值时落 PENDING 并在对账里单列 unmappedStatuses——**不猜**。\n\nSQL 幂等且不倒退:ON CONFLICT (tenant_id, file_id) DO UPDATE 只覆盖宿主侧的事实列,\n**不覆盖 scan_attempts / purged_at / purge_***(重跑不该把平台已推进的清理进度倒回宿主快照那一刻);\n按租户切分并先 set_config,FORCE RLS 下不设租户一行也写不进去。\n\n对账:行数 + sha256 逐条 + 状态分布;balanced 只在「不缺行且摘要逐条一致」时为真,不平退出码 1。\n**不看 storage_ref**——迁移不搬字节,对象仍在同一个桶里。\n\n端到端实跑过(合成 1 行,跑完已删,表回到 0 行):生成的 SQL 在 dev 平台库真表上 INSERT 0 1 / COMMIT,\n导出目标侧对账判平(源 1 / 目标 1、sha256 一致),目标为空时判不平且退出 1。\n模块单测 31 例通过 / 1 跳过(+9);check:modules / check:module-imports / check:stub-surface / check:pins 均 passed。\n\n**没做也不该由我做的**:真实数据迁移、宿主改调平台端点、级联删除语义的宿主侧改造——那些落在工单仓,\n归该仓 Owner;本仓这侧的可执行面到此齐备。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T06:16:30-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/978aaeeb46174baca37960b898e7fd086cec6696...3b55095e3aac481fdce7fde36f0dcc24309d5ef4","Len":1}...
|
1789823887
|
Edit
Delete
|
|
31250
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"978aaeeb4 {"Commits":[{"Sha1":"978aaeeb46174baca37960b898e7fd086cec6696","Message":"test(contracts): public-file 的 Catalog 断言改为 authority 口径\n\n6b3baf3 把 code_truth 指回模块目录后,契约包里那支断言仍停在 shape 期(code_truth === null,\n用例名也还写着 in shape state),整链第 17 环 contracts:check:local 判红。改为 authority 口径,\n并把两条规则的完整关系写进注释:catalog:drift 管 shape 侧(不得是代码真源),check:catalog 管\nauthority 侧(必须有代码真源)——这轮红过两次,两次都是只跑了其中一条。\n\ncontracts check:local 416 例全过。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T04:17:59-07:00"},{"Sha1":"0799f069c8ef5369d80c9a7f1808fbbffb52e833","Message":"chore(reports): catalog / drift / 两份快照回绑 @ 6b3baf3 —— 这次 catalog 真的是绿的\n\n6b3baf3 修好 code_truth 后重绑:catalog-reconciliation 门禁 exit 0(33ca9d0 那份记的是 exit 1 的失败结论,\n见 6b3baf3 的订正说明)。同批把 catalog-drift 与两份工作台快照绑到同一提交。\n\n顺带一条实测口径:整链 pnpm check 会在工作树里写报告(不走 GOV_REPORT_DIR),于是 reports:rebind 会因为\n\"在工作区未提交\"而跳过那几份——先 git checkout 掉整链的产物再绑,否则会静默少绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T04:15:17-07:00"},{"Sha1":"6b3baf3a2e95444b1b5bfa7cda867c0273f3b7c2","Message":"fix(catalog): public-file 的 code_truth 随 state=authority 指回模块目录 —— 并订正 33ca9d0 的一句错话\n\n整链 pnpm check 抓到:check:catalog 判 AUTHORITY_NO_TRUTH——模块 state=authority 但 Catalog\ncode_truth=null。两条规则合起来才是完整口径,我只跑了其中一条:\n- catalog:drift 的「shape 模块不得是 Catalog 代码真源」→ 建骨架那轮把 code_truth 置 null(正确);\n- check:catalog 的「authority 模块必须有代码真源」→ 474fcbb 把 state 翻成 authority 时该同步指回模块目录,\n 而我那轮只跑了 check:migration-decs / check:modules / check:stub-surface / catalog:drift,**没跑 check:catalog**。\n\n**同时订正一句错话**:33ca9d0 的提交说明写「逐份绑 673093a / dirty=false,各自门禁 exit 0」。\n实际上 reports:rebind 的输出里 catalog 那行明写着「门禁 exit 1」——回绑工具照常把报告带回来,\n但那份报告记的是失败结论,而我没看日志就断言全绿。本提交把 Catalog 修好、报告重绑(见随后一条),\n那句话以此为准更正:**33ca9d0 落地时 check:catalog 是红的,不是绿的**。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T04:14:16-07:00"},{"Sha1":"c1d6baa66052c8b6a544a66aaf63da09f4f52a38","Message":"feat(governance): check:modules 增投影类模块准入——权威在仓外的模块只做投影\n\nCHG-022 §3.2 用九项准入条件替代「不新增 M8」,但九条里没有一条带上 C01\n自己的两条硬约束:权威是「获批的 Git 内容」、生成的快照与查询视图不可反向\n写入真源(C01 签收单第 9—10 行),以及禁止成为业务请求的同步依赖(接入模型\nL67 对 C01 规定的交付形态;AppManifest 与治理目录规范 L257 把「Registry 可用性\n成为所有业务请求的同步依赖」列为反模式)。两种误实现都不违反现有九条,门禁\n不会拦:把模块库当权威让 Git 退化成镜像,或把模块接进业务请求同步链。\n\n本提交守住可机器判定的那一半,三条规则只对显式登记 authority=\"external\"\n的模块生效——规则不猜哪个模块是投影,猜错会把真权威模块判成只读:\n\n PROJECTION_PROVIDES_PORT 投影模块不得 provides 内核端口(端口即权威接口)\n PROJECTION_CONTRACT_MISSING 声明的 http 契约在 contracts/contracts/ 找不到\n 同名文件即判红。失败关闭:找不到就无法判定只读,\n 不能当通过——这是 check:caddy 前缀覆盖那处空判的教训\n PROJECTION_CONTRACT_WRITES 契约含 GET / HEAD 之外的方法即判红\n\n今天仓里零个模块带该字段,规则处于待命态。它是给 C01 / C17 / C18 这类模块\n落地时用的,先于模块存在而存在,免得那两条约束在实现时被悄悄丢掉。\n\n「不进业务请求同步链」**不**在本规则内:那要看调用方怎么用,不在本仓可见面\n内,按 §3.2 第 10 条登记为人工复核项。不把没守的说成已守。\n\n判定逻辑独立成 governance/lib/projection-modules.mjs:check-modules.mjs 是平铺\n脚本、无 main() 守卫,测试一 import 就会把整道门禁跑起来,测不了。\n\n验证:新用例 8/8;check:modules 在真实仓通过(8 模块 / 投影 0);治理全量\n480 例 479 通过 0 失败 1 跳过(GOV_REPORT_DIR 重定向,reports/ 未动)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T04:14:15-07:00"},{"Sha1":"636269e370e031b356124086d0bfbedba5465636","Message":"chore(reports): port-conformance 回绑 @ fd5ab2c —— 新模块与改写后的客户端都在其扫描面内\n\n本轮新增 public-file 模块(provides 为空)与改写成远程调用的 client-public-file 都落在\nrunime/test/port 的一致性扫描面里,故该报告随之过期。主工作树干净时重跑,passed,绑 fd5ab2c。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T04:12:10-07:00"}],"HeadCommit":{"Sha1":"978aaeeb46174baca37960b898e7fd086cec6696","Message":"test(contracts): public-file 的 Catalog 断言改为 authority 口径\n\n6b3baf3 把 code_truth 指回模块目录后,契约包里那支断言仍停在 shape 期(code_truth === null,\n用例名也还写着 in shape state),整链第 17 环 contracts:check:local 判红。改为 authority 口径,\n并把两条规则的完整关系写进注释:catalog:drift 管 shape 侧(不得是代码真源),check:catalog 管\nauthority 侧(必须有代码真源)——这轮红过两次,两次都是只跑了其中一条。\n\ncontracts check:local 416 例全过。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T04:17:59-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/35302bb5d50d227f0b40a50b4f88dec89865b3a2...978aaeeb46174baca37960b898e7fd086cec6696","Len":18}...
|
1789823568
|
Edit
Delete
|
|
31247
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"35302bb5d {"Commits":[{"Sha1":"35302bb5d50d227f0b40a50b4f88dec89865b3a2","Message":"chore(reports): runtime 治理报告十六份回绑 —— 序号列提交落进其作用域\n\nbb63a0c(工作台序号列)落在 runtime/reports/runtime-governance.latest.json 的作用域内,\ncheck:evidence 判它 error(绑定 a4ba565 之后作用域内有 1 个文件变更)。跑 pnpm --dir runtime\ncheck:governance 重出(该聚合会一并重写同目录十六份),provenance dirty=false——runtime 级报告\n的脏判定只看 runtime/ 子树,而并行会话此刻的在途文件都在 stack/ 与 governance/ 下。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T02:40:17-07:00"},{"Sha1":"87a23ad19a567838ae9cdebbfa7f940cf0e59845","Message":"chore(reports): Alertmanager 提交影响的门禁回绑 @ 594cc29 —— 五份;工作台两份快照 @ 92d62b3\n\n经 pnpm reports:rebind 在 HEAD 干净检出里重跑(零依赖门禁,临时检出不装依赖),七份\nprovenance 均 worktreeDirty=false。\n\n- 绑 594cc29(Alertmanager 提交):caddy、otel、doc-claims、stub-surface、module-imports。\n 其中 otel 是本次改动直接触及的(直抓目标 5 → 6、掉线告警覆盖 alertmanager);caddy 因\n 作用域含 stack/compose.yaml 与 otel-attributes.json;doc-claims 因作用域含 docs/runbook.md;\n stub-surface 与 module-imports 这两份在本次改动前就已过期——bb63a0c 改了\n runtime/apps/workbench 的源码却没跟 chore(reports),顺带一并清掉。\n- 绑 92d62b3(并行会话的 deployed-runtime 回绑):工作台目录与运维两份快照。工具按当前\n HEAD 生成,故与上面五份不同 sha;两者都在 HEAD 历史上,各自作用域内无后续变更。\n\n回绑后 check:evidence 的 error 档清零。仍为 warn 的几份需要构建产物或运行环境,不在零依赖\n回绑工具范围:release-manifest、sbom、runtime-acceptance、ui-acceptance。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T02:38:51-07:00"},{"Sha1":"c0c135e2113b8035d2eed751cdffbaaf9e36b162","Message":"docs(能力设计): 九域模块化落地设计 + 运行时模块进出机制设计(依赖 DEC-041 / CHG-022 签署)\n\n治理仓 87c3722 落了 DEC-041(零运行面契约域收编为平台运行时模块)与 CHG-022 受控变更包;\n本批是它们在真源仓的配套设计。签署前 决策批次-2026-09-16 C-3 的承接表仍是生效裁决,\n两份文件的任何一格都不得开工。\n\n九域模块化落地设计:\n- 六个模块的登记形状定到可直接抄进 runtime/modules.json 的程度:id = profile、package、\n prismaAccessor 与库名一律「模块 id 去连字符」(沿用 ai-gateway → aigateway / platform_aigateway\n 的既有惯例,与同日 CHG-021 三条同规则,不为好看改短名)、provides 一律空数组、\n blocked_by 一律 DEC-041、state 起 shape。\n- provides 空数组是最关键的一条约束:九域不提供任何内核端口,因此不需要动 @juhai/kernel,\n exact pin 不受影响。若将来某域确需新端口,那是基础框架层的独立裁决。\n- state 阶梯写明 authority 卡两道:既缺授权建权威表的已批准 DEC(identity 用 DEC-032、\n C11—C13 用 DEC-040,六域没有对应物,DEC-041 第 4 条明确不代批),又缺消费者(DEC-041\n 第 7 条 2026-09-19 定案不放宽)。这是已决且尚未满足,不是未决。\n- §4 列出落一个模块要动的 13 道门禁及建议顺序,其中两条最容易漏:governance/catalog-map.json\n 必须显式补 模块 id → Catalog id 的映射(不靠同名推断——既有 identity→enterprise-idp 就不同名,\n 漏掉则 build-workbench-snapshots 报 MODULE_WITHOUT_CATALOG_ENTRY、check:catalog 对账同时判红),\n 以及 check:stub-surface 的四个清单数字与 CLAUDE.md 的声明被 S6 绑死、每落一个模块要同步改一次。\n Catalog 那一步必须与 modules.json 同一个提交,否则 catalog:drift(2026-09-17 起 drift 档一律阻断)\n 在中间态判红。\n- §5 说明 C11—C13 不在本设计范围(归 DEC-040 / CHG-021),列出两边共享的三条结论,以及一条\n 只对那三条成立、对六域不成立的代价:它们 module_e2 / E2 要降到 candidate_e0 / E0,而六域本就是 E0。\n\n运行时模块进出机制设计:\n- §0 记录今天的实况:新增有路径(modules.json 登记 + check-modules 校验 + profiles.ts 按\n PLATFORM_PROFILES 动态 import,三处拼起来才看得全),退役完全没有——没有 retirement 字段、\n 没有 directory: null 等价物,删目录 + 删登记行之后 check:modules 反而是绿的,库也留在底座上\n 没有任何登记说它该保留还是删除。这正是 Q01 要求宿主提供「退出保障」的那一条,对控制面\n 自己同样不成立的地方。Catalog 侧早有成熟先例(18 个派生仓退役用 directory: null + retirement),\n 本设计把同一套口径下沉到模块登记。\n- §1 新增九步,第 4 步是「退役路径先写」——进来之前先说清怎么出去;§3 退役三原则与 retirement\n 登记形状(retiredAt / decisionRef / packageRemoved / database.disposition / portsFallback /\n consumerMigration,字段义务逐条写明);§3.3 要改的三处代码:check-modules.mjs 认 retirement\n 并改校验对象、profiles.ts 把退役模块排除出 known 且错误消息要带 retiredAt 与 decisionRef、\n check-stub-surface.mjs 扫描面排除退役模块。prismaAccessor 与 database 的唯一性继续对退役条目\n 生效——退役不是让出名字。\n- §4 用目录负责人举的「流程状态设计管理服务」走一遍,并先划清它与 C15 的边界:设计态出定义、\n 运行态吃定义,两者不共库、经契约相连。结论是机制建成后新增一个服务的技术工作量全在机械步骤\n (第 5—9 步),真正的工作在第 1—4 步的裁决与协议——这正是把闸从「模块数量」换成「准入标准」的意义。\n- §5 列出对工作台的三项影响(「已装载模块 N/M」的分母要改成未退役的登记数、退役模块单列一档\n 而不是从列表消失、服务目录「环境」列口径不变)。\n- §7 记录不做运行期热插拔的四条理由:Nest DynamicModule 的端口束在启动时一次合成、Prisma\n 一模块一库的连接池与在途事务、fail-closed 会多出第三种中间态而消费侧分支只按前两种写、\n 模块进出是季度级动作。\n\n两份均为设计,不含任何登记或代码改动:本次提交不动 runtime/modules.json、contracts/catalogs/、\ngovernance/ 与任何模块目录。工作树里五份 reports/*.latest.json 的改动属并行会话,未随本提交带走。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T02:38:37-07:00"},{"Sha1":"92d62b3f9cefbe46854f87cf4b2fb5ddf63004c5","Message":"chore(reports): deployed-runtime 回绑 @ f0be572 —— 常驻容器跑的是 bb63a0c 的镜像\n\n在 .worktrees/image-bb63a0c 的干净检出(f0be572,0 个变更)里跑 check:deployed --write-report:\npassed,容器 1 个,期望镜像 01edea201c85 @ bb63a0c,IMAGE_SOURCE_EQUIVALENT。\n主工作树此刻仍有并行会话的在途文件,故报告在干净检出里生成后拷回(仓纪律 5 / 偏差 #34-A 同款做法)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T02:38:04-07:00"},{"Sha1":"f0be572e09ebf474b528456d81ed1fa6f4333d5d","Message":"chore(reports): 镜像与冒烟回绑 @ bb63a0c —— 序号列提交后重建并切换常驻运行时\n\nbb63a0c 动的是 runtime/apps/workbench/src/**(运行时镜像输入),check:deployed 随即判\nBUILT_IMAGE_SOURCE_BEHIND。本轮重建并切换:\n\n- 主工作树此刻有并行会话的 7 个在途文件(stack/compose.yaml、三份 otel 配置、两个 overlay、\n otel-attributes.json),直接建会把 worktreeDirty 记成 true 而该项是 error。故在\n .worktrees/image-bb63a0c 的干净检出(HEAD=bb63a0c,0 个变更)里 image:build:\n enterprise-platform/runtime:bb63a0cca03a,contextMode=head,worktreeDirty=false。\n- 冒烟 6/6(单 profile、Redis 逻辑库 15、:53009),报告同样绑 bb63a0c / dirty=false。\n- docker compose … up -d --no-deps runtime 切换,healthy;容器内 PLATFORM_SOURCE_SHA=bb63a0c,\n /api/health 200、/api/platform/catalog 200(19 条、schema 4)。--no-deps 未把并行会话在途的\n alertmanager 服务带起来(那个容器是它自己 09:23 起的,我的命令在 09:36)。\n- check:deployed failed → passed(IMAGE_SOURCE_EQUIVALENT)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T02:37:31-07:00"}],"HeadCommit":{"Sha1":"35302bb5d50d227f0b40a50b4f88dec89865b3a2","Message":"chore(reports): runtime 治理报告十六份回绑 —— 序号列提交落进其作用域\n\nbb63a0c(工作台序号列)落在 runtime/reports/runtime-governance.latest.json 的作用域内,\ncheck:evidence 判它 error(绑定 a4ba565 之后作用域内有 1 个文件变更)。跑 pnpm --dir runtime\ncheck:governance 重出(该聚合会一并重写同目录十六份),provenance dirty=false——runtime 级报告\n的脏判定只看 runtime/ 子树,而并行会话此刻的在途文件都在 stack/ 与 governance/ 下。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T02:40:17-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/bb63a0cca03aa4f7e67a8e2630c52788de87708c...35302bb5d50d227f0b40a50b4f88dec89865b3a2","Len":6}...
|
1789810868
|
Edit
Delete
|
|
31245
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"bb63a0cca {"Commits":[{"Sha1":"bb63a0cca03aa4f7e67a8e2630c52788de87708c","Message":"feat(workbench): 服务目录加序号列——当前取景下的行号,分组视图连续编\n\n表格最左加一列 #。口径写在表头 title 与读屏可见的 \u003ccaption\u003e 里:它是**取景产物**,\n答的是「当前这一屏的第几行」,筛选 / 排序 / 分组一变就跟着变,**不是条目的固定编号**;\n要稳定指代条目仍用条目名下面的 id。\n\n三处刻意的取舍:\n- 分组视图下**连续编号**,不在每组内从 1 重来——重置会让同一个数字在一页里出现好几次,\n 而「第 7 行」正是拿它来指路的场合。\n- 这一列**不可排序**:它没有可排的取值,给它挂排序等于自我指涉。\n- 偏移用 map 出的派生数组算,不按下标取。仓里开了 noUncheckedIndexedAccess,\n `groupOffsets[groupIndex]` 是 number | undefined,用 `?? 0` 兜会把编号错位悄悄吞掉。\n\n实测:dev :3010 默认视图 1…19;?group=layer 下 P0 组 1—10、P1 组从 11 接着编;\n?layer=P2\u0026sort=-name 筛出 3 条后重编 1—3;入口 :58080 重建产物后同样;375px 窄屏不挤版。\ntypecheck / lint 均 0 error。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T02:24:55-07:00"}],"HeadCommit":{"Sha1":"bb63a0cca03aa4f7e67a8e2630c52788de87708c","Message":"feat(workbench): 服务目录加序号列——当前取景下的行号,分组视图连续编\n\n表格最左加一列 #。口径写在表头 title 与读屏可见的 \u003ccaption\u003e 里:它是**取景产物**,\n答的是「当前这一屏的第几行」,筛选 / 排序 / 分组一变就跟着变,**不是条目的固定编号**;\n要稳定指代条目仍用条目名下面的 id。\n\n三处刻意的取舍:\n- 分组视图下**连续编号**,不在每组内从 1 重来——重置会让同一个数字在一页里出现好几次,\n 而「第 7 行」正是拿它来指路的场合。\n- 这一列**不可排序**:它没有可排的取值,给它挂排序等于自我指涉。\n- 偏移用 map 出的派生数组算,不按下标取。仓里开了 noUncheckedIndexedAccess,\n `groupOffsets[groupIndex]` 是 number | undefined,用 `?? 0` 兜会把编号错位悄悄吞掉。\n\n实测:dev :3010 默认视图 1…19;?group=layer 下 P0 组 1—10、P1 组从 11 接着编;\n?layer=P2\u0026sort=-name 筛出 3 条后重编 1—3;入口 :58080 重建产物后同样;375px 窄屏不挤版。\ntypecheck / lint 均 0 error。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T02:24:55-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/8f5832b626a294a43810b2f6939e59e93a341283...bb63a0cca03aa4f7e67a8e2630c52788de87708c","Len":1}...
|
1789810067
|
Edit
Delete
|
|
31243
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"8f5832b62 {"Commits":[{"Sha1":"8f5832b626a294a43810b2f6939e59e93a341283","Message":"chore(reports): deployed-runtime 回绑 @ 18e4661 —— 常驻容器跑的是 84ad650 的镜像\n\ncheck:deployed passed(IMAGE_SOURCE_EQUIVALENT:镜像源 84ad650 之后只有报告回绑提交,\n运行时输入未变);容器 a1fa232df8d1 healthy,环境键齐备。本份在开工前(3335f46)就已过期,\n本轮部署后在干净树上重出。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T01:16:46-07:00"},{"Sha1":"18e4661c17b4e9f020648434a1f68e7b92ca71ff","Message":"chore(reports): 受实现提交影响的门禁回绑 @ a4ba565 —— 仓根三份 + runtime 十五份\n\n84ad650 改了 governance/build-workbench-snapshots.mjs 与 runtime/apps/workbench/src/**,\n落进 doc-claims / stub-surface / module-imports 与 runtime 侧治理报告的作用域,check:evidence\n判 4 处 error。按仓纪律在干净检出里重跑并带回:\n\n- reports:rebind --gates module-imports,doc-claims,stub-surface(三份均绑 a4ba565 / dirty=false,门禁 exit 0)\n- pnpm --dir runtime check:governance(聚合重写 runtime/reports 十五份,同样绑 a4ba565 / dirty=false)\n\ncheck:evidence 由 failed(12 过期 / 4 error)回到 partial(40 新鲜 / 6 过期 / 0 error)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T01:16:23-07:00"},{"Sha1":"a4ba565e6bd3d8c50f1653dd9c2a8f8c9f197273","Message":"chore(reports): 工作台两份快照回绑 @ ea622e4 —— 服务目录 21 → 19 条,范围外资产改列 excluded\n\n在干净树上重跑 workbench:snapshots(worktreeDirty=false):catalog 快照 schemaVersion 4、\nprojects=19、mapped=7/7、conflicts=0,excluded 两条(digital-employee-os / base-framework)\n各带 Catalog 里的排除理由;ops 快照同步回绑到已提交的镜像证据(84ad65070b94)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T01:12:50-07:00"},{"Sha1":"ea622e4d7f4c374a328cfe5501acbc353089a539","Message":"chore(reports): 镜像与冒烟回绑 @ 84ad650 —— 工作台投影收窄后重建并切换常驻运行时\n\n实现提交动了 runtime/apps/workbench/src/**(运行时镜像输入),镜像随之落后,按 runbook §9\n从 clean 提交重建:enterprise-platform/runtime:84ad65070b94(contextMode=head,worktreeDirty=false),\n冒烟 6/6(单 profile、Redis 逻辑库 15、:53009),常驻容器已 up -d --no-deps runtime 切换并 healthy,\ncheck:deployed passed(IMAGE_SOURCE_EQUIVALENT)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T01:12:22-07:00"},{"Sha1":"84ad65070b945071e0361644342d453b9575ec80","Message":"feat(governance): 服务目录只投影平台服务——范围外资产不进 entries、改列 excluded\n\n工作台服务目录此前把 Catalog 的 21 条全量投影出来,含 in_goal_scope=false 的两条排除资产\n(基础框架 base-framework、AI 数字员工 digital-employee-os),等于把用户明确排除的资产\n说成平台自己的服务。改为只投影 in_goal_scope !== false 的 19 条:\n\n- entries 收窄;被挡下的条目按 id / 名称 / 层 / 排除理由 / code_truth 列进新的顶层 excluded,\n 不静默消失。排除裁决的真源仍是 Catalog,本次不动 contracts/catalogs/platform-projects.json,\n classifyConsumption 也保留 excluded-asset 分类,只是那类条目不再投影。\n- counts.excludedFromProjection;schemaVersion 3 → 4(entries 含义从「Catalog 全量」收窄成\n 「平台服务」,按条目数做统计的消费者须回看)。\n- 新冲突规则 MODULE_MAPPED_TO_EXCLUDED_PROJECT:运行时模块若映射到范围外项目,单列冲突,\n 不被投影收窄盖成「模块没有 Catalog 项目」。\n- 工作台计数条首格「项目」改「服务」并加「范围外资产」一格;快照类型补 excluded,注释里的\n 条目数 21 → 19。\n\n治理单测 472 例 / 471 通过 / 0 失败 / 1 跳过(新增「排除资产不得进 entries、必须带理由进\nexcluded」与上述冲突规则两组断言);check:catalog / catalog:drift / check:candidate-contracts /\ncheck:stub-surface / check:doc-claims 均 passed。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T01:10:32-07:00"}],"HeadCommit":{"Sha1":"8f5832b626a294a43810b2f6939e59e93a341283","Message":"chore(reports): deployed-runtime 回绑 @ 18e4661 —— 常驻容器跑的是 84ad650 的镜像\n\ncheck:deployed passed(IMAGE_SOURCE_EQUIVALENT:镜像源 84ad650 之后只有报告回绑提交,\n运行时输入未变);容器 a1fa232df8d1 healthy,环境键齐备。本份在开工前(3335f46)就已过期,\n本轮部署后在干净树上重出。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T01:16:46-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/7021758cffa830beecc7c0af480bc1943a3e78e8...8f5832b626a294a43810b2f6939e59e93a341283","Len":8}...
|
1789807906
|
Edit
Delete
|
|
31238
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"7021758cf {"Commits":[{"Sha1":"7021758cffa830beecc7c0af480bc1943a3e78e8","Message":"fix(governance): 治理测试两条跑法合上——不设 GOV_REPORT_DIR 不再污染 reports/,设了也不再判红\n\n2026-09-19 实测的坑:根 `pnpm check` 第 15 环 `pnpm test` 两条路都不干净。\n- 不设 `GOV_REPORT_DIR`:449 例全过,但 `check-caddy.test.mjs` 就地重写\n `reports/caddy.latest.json`(它是 `report-clobber.test.mjs` 里唯一的具名豁免),\n 跑完整条链必然留一份脏绑报告,要靠操作者记得 `git checkout --` 它。\n- 设了 `GOV_REPORT_DIR`:12 个用例判红。它们把门禁 CLI 跑在**临时沙箱**里\n (catalog-drift 的临时检出、evidence 的临时 git 仓、fixtures 的 `--root`),\n 子进程继承了外部这个变量,报告落到沙箱外,用例按沙箱路径回读就读不到。\n\n两头都是同一件事没做:spawn 门禁时没把报告目录钉死。逐个钉:\n\n| 文件 | 钉到哪 |\n|---|---|\n| check-caddy | 临时 `gov-report-*`(解除具名豁免,与另四支 check-* 同款) |\n| check-catalog-drift | `\u003c临时检出\u003e/reports` |\n| check-evidence-freshness | `\u003c临时 git 仓\u003e/reports` |\n| fixture-integrity / platform-fixtures / cli | `\u003c沙箱 --root\u003e/reports` |\n| port-conformance | 进程内调门禁,`process.env` 上钉一次再还原 |\n\n`deployed-runtime.test.mjs` 反着来:它断言的就是「默认不落盘」,故显式 `delete`\n掉外部的 `GOV_REPORT_DIR`——否则报告被重定向走,仓里那份自然不动,断言成空转。\n它继续留在 `CLOBBER_EXEMPT`(现在是唯一一条,理由与解除条件已按这个新事实改写)。\n\n`report-clobber.test.mjs` 同时补两处扫描漏洞:原来只认字面量 `governance/check-*.mjs`\n(漏掉按相对路径与 `bin/cli.mjs` spawn 的 5 个文件),且只要提一嘴变量名就放行\n(`delete` 做的是相反的事)。现在按 `check-*.mjs|cli.mjs` 认,且要求写成赋值形式。\n扫不到的一类(进程内直接调门禁函数)在注释里写明。\n\n出口判据实测:\n- `GOV_REPORT_DIR=\u003ctmp\u003e node --test governance/test/*.test.mjs` → 471 例 470 过 0 失败;\n- 不设变量跑同一套 → 同样 0 失败,且跑前跑后 `reports/*.json` 的 md5 逐份不变、\n `git status --porcelain` 无新增(树上其余脏文件属并行会话)。\n\n无 `chore(reports)` 回绑:本次改动全在 `governance/test/` 下,46 条证据作用域没有一条覆盖它,\n`check:evidence` 的判词不因本提交改变。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T00:26:15-07:00"}],"HeadCommit":{"Sha1":"7021758cffa830beecc7c0af480bc1943a3e78e8","Message":"fix(governance): 治理测试两条跑法合上——不设 GOV_REPORT_DIR 不再污染 reports/,设了也不再判红\n\n2026-09-19 实测的坑:根 `pnpm check` 第 15 环 `pnpm test` 两条路都不干净。\n- 不设 `GOV_REPORT_DIR`:449 例全过,但 `check-caddy.test.mjs` 就地重写\n `reports/caddy.latest.json`(它是 `report-clobber.test.mjs` 里唯一的具名豁免),\n 跑完整条链必然留一份脏绑报告,要靠操作者记得 `git checkout --` 它。\n- 设了 `GOV_REPORT_DIR`:12 个用例判红。它们把门禁 CLI 跑在**临时沙箱**里\n (catalog-drift 的临时检出、evidence 的临时 git 仓、fixtures 的 `--root`),\n 子进程继承了外部这个变量,报告落到沙箱外,用例按沙箱路径回读就读不到。\n\n两头都是同一件事没做:spawn 门禁时没把报告目录钉死。逐个钉:\n\n| 文件 | 钉到哪 |\n|---|---|\n| check-caddy | 临时 `gov-report-*`(解除具名豁免,与另四支 check-* 同款) |\n| check-catalog-drift | `\u003c临时检出\u003e/reports` |\n| check-evidence-freshness | `\u003c临时 git 仓\u003e/reports` |\n| fixture-integrity / platform-fixtures / cli | `\u003c沙箱 --root\u003e/reports` |\n| port-conformance | 进程内调门禁,`process.env` 上钉一次再还原 |\n\n`deployed-runtime.test.mjs` 反着来:它断言的就是「默认不落盘」,故显式 `delete`\n掉外部的 `GOV_REPORT_DIR`——否则报告被重定向走,仓里那份自然不动,断言成空转。\n它继续留在 `CLOBBER_EXEMPT`(现在是唯一一条,理由与解除条件已按这个新事实改写)。\n\n`report-clobber.test.mjs` 同时补两处扫描漏洞:原来只认字面量 `governance/check-*.mjs`\n(漏掉按相对路径与 `bin/cli.mjs` spawn 的 5 个文件),且只要提一嘴变量名就放行\n(`delete` 做的是相反的事)。现在按 `check-*.mjs|cli.mjs` 认,且要求写成赋值形式。\n扫不到的一类(进程内直接调门禁函数)在注释里写明。\n\n出口判据实测:\n- `GOV_REPORT_DIR=\u003ctmp\u003e node --test governance/test/*.test.mjs` → 471 例 470 过 0 失败;\n- 不设变量跑同一套 → 同样 0 失败,且跑前跑后 `reports/*.json` 的 md5 逐份不变、\n `git status --porcelain` 无新增(树上其余脏文件属并行会话)。\n\n无 `chore(reports)` 回绑:本次改动全在 `governance/test/` 下,46 条证据作用域没有一条覆盖它,\n`check:evidence` 的判词不因本提交改变。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T00:26:15-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/623a58d184232de4493761b6612202abae6561c0...7021758cffa830beecc7c0af480bc1943a3e78e8","Len":1}...
|
1789802791
|
Edit
Delete
|
|
31236
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"623a58d18 {"Commits":[{"Sha1":"623a58d184232de4493761b6612202abae6561c0","Message":"chore(reports): evidence-freshness 回绑 @ 3be0bb7 —— 41 份新鲜 / 4 份过期 / 0 error\n\n余 4 条告警都要真实底座或镜像:sbom、runtime-acceptance、ui-acceptance、deployed-runtime。\nmainline-acceptance 随 A15 的六套件重跑已转新鲜。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T00:06:02-07:00"},{"Sha1":"3be0bb7a8ae0ccbecf762475be4425a7eced5038","Message":"chore(reports): 工作台两份快照 / doc-claims / caddy / otel 回绑 @ 5ef56d0\n\n两件事各一半:\n- 并行会话的 `bd2a5c3` 改了 `docs/runbook.md`,它在 workbench-ops-snapshot 的作用域里,\n `check:evidence` 因此判其过期(本轮唯一一条 error)。\n- 本会话把 `docs/runbook.md` / `README.md` / `reports/otel.latest.json` 加进了 doc-claims\n 的作用域,该报告随之要重绑。\n\ncaddy / otel 一并带上(同一次干净检出里顺手跑,判词不变)。四份全部 dirty=false。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T00:05:43-07:00"},{"Sha1":"5ef56d011b28e1000e575b67d354594f53249039","Message":"chore(reports): mainline-acceptance 与 revocation-sla 回绑 @ 51f100b —— 首份六套件 72 例\n\nA15 接线后首次在干净树上跑完整主线(专用 Broker `enterprise-platform-ms23-redpanda-1`\n:59093 + 6 个隔离库,全部非超级用户角色):\n\n| 套件 | 例数 |\n|---|---|\n| fact-read-http | 11 |\n| fact-persistence | 17 |\n| audit-tamper | 19 |\n| mainline-revocation-chaos | 18 |\n| **permission-ops**(新) | **2** |\n| **ai-route-persistence**(新) | **5** |\n\n合计 72 例、0 失败、0 skipped/todo,`validateMainlineReport` 通过。revocation-sla 仍\n`partial`:cacheBound 与 invalidationPush 各 20 个真实样本,后者的传输仍是 test-harness\nledger poll,生产传输未接线——定性不变。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T00:05:16-07:00"},{"Sha1":"51f100b42bb2cb89db3609bf69f88835c26aa236","Message":"feat(governance): 两支无门禁消费的 integration 套件接进主线(A15),并补齐 A14 的作用域\n\n**缺口**:四个模块有 `vitest.integration.config.ts`,但 `check-mainline.mjs` 只消费 fact 与\naudit 两支;`permission` 的 `ops.integration.ts`(OPS-1 受控命令 permission.invalidation 的\n真实库验收)与 `ai-gateway` 的 `persistence.integration.ts`(ai-route 权威账本)**没有任何\n门禁消费**,只能靠人手工 `pnpm test:integration`——写了验收却没有任何东西会在它坏掉时叫。\n\n- `check-mainline.mjs` 增两支套件:`permission-ops`、`ai-route-persistence`。它们要的正是\n 本文件已经在准备的那套隔离库,接进来不需要新底座。\n- `lib/mainline-evidence.mjs` 登记地板(按首次隔离库实测,非超级用户角色):2 例 / 5 例。\n 该表同时供 runner 与 `verify:candidate` 使用,`validateMainlineReport` 要求套件数与本表\n 一致——所以「接线」和「候选可晋级核验」是同一件事,不会只改一半。\n- `prepare-mainline.mjs` 增 `aigateway` 一档:`platform_aigateway_ms23` 此前不存在(只有 dev\n 库),ai-gateway 的 integration 套件因此在任何隔离环境里都跑不起来。顺带修一处会绊下一个\n 人的坑——**库名的 kind 与模块目录名不总是同一个词**(`aigateway` ↔ `ai-gateway`),改为显式\n `moduleDir` 映射,不靠字符串等同。\n- `evidence-scopes.json` 补 A14 漏的一半:`doc-claims` 的 scope 加 `README.md`、\n `docs/runbook.md`、`reports/otel.latest.json`。扩了扫描面却没扩作用域,等于那三处一变\n 本报告也不会被判过期。\n\n**实测**(`enterprise-platform-ms23` 专用 Broker :59093 + 6 个隔离库,非超级用户):\n六套件全过 11 / 17 / 19 / 18 / **2** / **5** = 72 例,`mainline:check` 退出 0,\n`validateMainlineReport` 通过。报告回绑另起提交(本次运行时工作树是脏的)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T00:02:22-07:00"},{"Sha1":"bd2a5c39496b0dda12afc98c321119609780f519","Message":"docs(运维): runbook 补工作台「缺配置」的形态判别与入口形态登录的三道坎\n\n入口托管产物按约定摘掉 .env.local 构建,两个 NEXT_PUBLIC_WORKBENCH_* 一起\n没进产物,登录页显示「缺配置」是这份产物的预期结果、不是漏配;写清判形态\n的办法,并点明不该靠「带着 .env.local 重建」去修(那是拿同源形态换登录页)。\n\n入口形态的登录补配置也修不通:构建带变量、补登记入口 origin 回调都可做,\n但换令牌必失败——常驻容器 NODE_ENV=production 而 loadLocalSigningKey 只认\ntest / development,且容器 IDP_CANONICAL_ORIGIN=http://localhost:3098 使入口\n上取到的 discovery issuer 与端点全指 :3098。结论落在等目标环境的真签名源,\n并明写把容器降成 development 是安全面倒退。\n\n同段末句「在那之前不要把工作台挂到网关根路径」已被 426a7df 落地的同源托管与\nforward_auth 超越,改为陈述现状,免得与新段自相矛盾。\n\ncheck:doc-claims ✓(报告经 GOV_REPORT_DIR 导出仓外,仓内 reports/ 未改);\n工作区根 check-workspace-consistency.mjs CLEAN。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T23:53:37-07:00"}],"HeadCommit":{"Sha1":"623a58d184232de4493761b6612202abae6561c0","Message":"chore(reports): evidence-freshness 回绑 @ 3be0bb7 —— 41 份新鲜 / 4 份过期 / 0 error\n\n余 4 条告警都要真实底座或镜像:sbom、runtime-acceptance、ui-acceptance、deployed-runtime。\nmainline-acceptance 随 A15 的六套件重跑已转新鲜。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-19T00:06:02-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/928345d27ed7ade91e7257238a55e64e9f9c6fad...623a58d184232de4493761b6612202abae6561c0","Len":13}...
|
1789801729
|
Edit
Delete
|
|
31233
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"928345d27 {"Commits":[{"Sha1":"928345d27ed7ade91e7257238a55e64e9f9c6fad","Message":"chore(reports): evidence-freshness 回绑 —— 45 份已登记 / 40 份新鲜 / 5 份过期 / 0 error\n\n余下 5 条告警都要真实底座或镜像:sbom、runtime-acceptance、ui-acceptance、\nmainline-acceptance、deployed-runtime。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T23:02:49-07:00"},{"Sha1":"be810fc355f9fdb4949343677ce6769bb61d7459","Message":"chore(reports): port-conformance 与 release-manifest 回绑 @ 2e06b92 —— 过期告警 7 → 5\n\n- port-conformance:3 个套件 passed(此前绑 e3b9d12,作用域内已 19 个文件变更)。\n- release-manifest:status 仍非 complete,缺项 6 条且逐条有出口——4 个客户端包未建(CL-1…7)、\n images.runtime.digest(镜像绑 b90d7a1 ≠ 当前 HEAD,须重建)、registryDigest(只有本机构建\n 证据)、images.stack.* 1 个镜像未按 digest 锁定(PF-05 / PF-23)、sbom、signature。\n 结论与此前一致,变的是绑定与「镜像落后几个提交」这一项的实测值。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T23:02:47-07:00"},{"Sha1":"2e06b9267b4aaa1ebfbd1e1329f61d2c717c587e","Message":"chore(reports): runtime 静态门禁 18 份回绑 @ 808740f —— 过期告警 13 → 7\n\n跑一次 `pnpm --dir runtime check`(EXIT 0,链上 17 条判词全绿)后,runtime/reports 下\n18 份报告全部重写并绑 808740f / dirty=false。其中 7 份此前是 check:evidence 的\nEVIDENCE_STALE 告警:agent-adapters、docs-truth、dual-backend-parity、fork-readiness、\ngovernance-docs、naming、runtime-governance。\n\ncheck:evidence:45 份已登记 / 38 份新鲜 / 7 份过期 / 0 error。余下 7 条告警都要真实底座、\n容器或镜像才能重跑,不在本批范围:release-manifest、sbom、port-conformance、\nruntime-acceptance、ui-acceptance、mainline-acceptance、deployed-runtime。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T23:01:20-07:00"},{"Sha1":"808740f25add20c3e449cfde913d31ab6715a297","Message":"chore(reports): evidence-freshness 回绑 @ d7c1e0a —— error 清零(5 → 0),余 13 条 warning\n\nA7 出口达成:check:evidence 退出 0、status=partial、error 0 条(45 份已登记 / 32 份新鲜 /\n13 份过期 / 0 份输入未提交 / 0 份无有效绑定 / 0 份例外)。\n\n余下 13 条一律 warning,且都要真实底座或容器才能重跑,不在本批范围:\nruntime-acceptance / ui-acceptance / mainline-acceptance / naming / fork-readiness /\ndual-backend-parity / governance-docs / docs-truth / agent-adapters / port-conformance /\ndeployed-runtime 等。它们是「结论可能已被后续提交推翻」,不是「结论造假」——引用前须重跑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T22:57:41-07:00"},{"Sha1":"d7c1e0a589f538b720c6fdfda14bbc7bff241c79","Message":"chore(reports): 夹具两份从脏绑改为干净回绑 @ 408d344\n\n两份此前绑在脏树 6fbebf5 上却被提交,check:evidence 因此判 EVIDENCE_BOUND_DIRTY\n(severity=error)。在干净树重跑(需构建产物,不在 reports:rebind 的范围内,\n故直接在主工作区跑):\n\n- check:fixtures 17 套件 702 例 0 失败 0 不可用,与脏绑那次逐项一致;\n- check:fixture-coverage 15 个套件、未接线 0 处、都没有 0 条。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T22:57:15-07:00"}],"HeadCommit":{"Sha1":"928345d27ed7ade91e7257238a55e64e9f9c6fad","Message":"chore(reports): evidence-freshness 回绑 —— 45 份已登记 / 40 份新鲜 / 5 份过期 / 0 error\n\n余下 5 条告警都要真实底座或镜像:sbom、runtime-acceptance、ui-acceptance、\nmainline-acceptance、deployed-runtime。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T23:02:49-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/6fbebf5285a9a335410c5f884d81314d0394429c...928345d27ed7ade91e7257238a55e64e9f9c6fad","Len":11}...
|
1789798036
|
Edit
Delete
|
|
31229
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"6fbebf528 {"Commits":[{"Sha1":"6fbebf5285a9a335410c5f884d81314d0394429c","Message":"chore(reports): candidate-contracts 回绑 @ 16459e0 —— 9 条探针零豁免\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T19:55:24-07:00"},{"Sha1":"16459e09061655eb29b432aa5a9334b9685cbced","Message":"test(contracts): 跨域流程的 plan 补第一条 ACCEPT 用例——最后一条 shape 探针豁免清零\n\ncheck:candidate-contracts 此前带着一条豁免:planWorkflowInstance 取不到 ACCEPT 载荷,\n因为 cross-domain-workflow 的 plan 规则在 28 例夹具里全是反例。查隔壁——\ncollaboration-messaging 的同类规则 P03 是有正例的。所以这不是「夹具只固定失败关闭一侧」\n的设计口径,是这一域缺了一条,而豁免让它看起来像是有意为之。\n\n补 P04-approved-snapshot-plans-an-instance:已批准快照 + 合法请求,载荷直接取自该域单测里\n那条已在跑的 planner 正例(不是新造的场景)。夹具 28 → 29 例(正 4 / 反 25),\ncheck:fixtures 该套件 29/29 失败 0,fixture-coverage 三档仍全为 0。\n\n连带把 C15 契约的探针由 skip 换成真探针(planWorkflowInstance ← plan.request):\n9 条探针全部比对通过、零豁免。门禁单测两处计数同步,并把断言从「豁免恰好是这一条」\n改成「豁免必须为空;再出现必须带理由」——前者会在下次加豁免时静默通过。\n\n数字声明同步:仓根 CLAUDE.md 的 17 套件 706 例 → 707,宿主协议 C15 单与索引底账的夹具数\n同步;check-workspace-consistency CLEAN,L13 无漂移。contracts 测试 416/416。\n\n跑这两道门禁都用 GOV_REPORT_DIR 重定向,仓里在途的 fixtures 报告一个字节未动——\n同日早些时候那条修复第一次真用上。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T19:55:21-07:00"},{"Sha1":"05497f5a3cad8b4a82d07b81504c06fe6338c972","Message":"chore(reports): candidate-contracts 回绑 @ 864231d —— 含 11 个操作 ↔ 参考处理器的双向对账\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T19:49:18-07:00"},{"Sha1":"864231dc64629e58ddd53faf5c38b4f58fdf05f9","Message":"feat(contracts): 五份候选契约有了可挂载的参考实现——11 个操作,传输无关、零框架依赖\n\nC-3 把这五个域的运行宿主裁给上层既有宿主、本仓不建模块,所以「完善 HTTP 实现」不能是在\nruntime 里加路由。但「每个宿主各写一遍入参解码与决策映射」必然各写各的:REJECT 被压成 4xx、\nSKIP_DUPLICATE 被当成失败、now 忘了从 ISO 串还原成 Date——每一个都是一次就足以让语义走样。\n把这一段写在 contracts/src/http/,判定与映射同源,宿主实现 = 挂载 + 鉴权 + 持有快照。\n\n本层不做任何入参校验,这是实测后的决定,不是省事。首版写了信封校验(非对象或缺顶层键回 400),\n被夹具 N06-definition-is-not-an-object 当场戳穿——那条用例期望的是 WORKFLOW_DEFINITION_INVALID,\n400 把它盖掉了。随后逐个实测七个规则入口:传非对象 / 空对象 / undefined,一律 REJECT 并带自己的\n原因码,没有一个抛异常。校验层不是多一道保险,是多一套词汇:同一个错两种表达,消费侧必然挑更\n好读的那套,规则的原因码就此架空。五份契约的 400 描述同步改为「宿主的 JSON 解析失败」。\n\n唯一的边界处理是 Date 还原:context.now(体验)与 context.policy.now(成本,嵌深一层)过 HTTP\n是 ISO 串而规则侧是 Date。漏了不会报错,只会让时间判定永远不触发——一条静默放行的路径。\n\n测试拿规则自己的夹具载荷经处理器走一遍:ACCEPT 例仍非 REJECT,REJECT 例 reasons 与夹具逐条一致,\n无快照时 planner 失败关闭仍是 200 REJECT 而非 5xx。contracts 测试 408 → 416/416,\ncheck:generated 无漂移。\n\n门禁加 HANDLER_MISSING / HANDLER_ORPHAN 双向对账。按文本解析 index.ts 而不是 import dist——\n本门禁在 ZERO_DEP_GATES 里,要能在没装依赖的临时检出里重跑,改成 import 就会退化成未构建即\nunavailable,干净回绑随之失效。负向实测:把 assessResourceTags 改名,两条规则各报一次。\n\n未做:catalogs/ 一字未动;本仓不挂路由、不建库、不新增模块,C-3 的「不新增 M8」未被触碰;\n401 / 403 / 503 属宿主责任,不在本层。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T19:49:15-07:00"},{"Sha1":"fb371d6cec3a76db97335f51a352cef8c2d7c7b4","Message":"chore(reports): candidate-contracts 回绑 @ fdbefc9 —— 补 rules-entry 后重跑,仍 0 违规\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T19:41:03-07:00"}],"HeadCommit":{"Sha1":"6fbebf5285a9a335410c5f884d81314d0394429c","Message":"chore(reports): candidate-contracts 回绑 @ 16459e0 —— 9 条探针零豁免\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T19:55:24-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/b69710a74604d55a435971103dc033025cbc6e6b...6fbebf5285a9a335410c5f884d81314d0394429c","Len":24}...
|
1789786673
|
Edit
Delete
|
|
31227
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"b69710a74 {"Commits":[{"Sha1":"b69710a74604d55a435971103dc033025cbc6e6b","Message":"docs(治理): 建宿主协议签收单目录——C-3 附条件的执行面,六份逐域单全部未签收\n\n立项这件事在本体系里已经被裁过:决策批次-2026-09-16 的 C-3(✅ 采纳)把九个契约域的\n运行宿主裁给上层既有宿主,附条件写死「宿主协议……签收才算准入」,Q01 原文还有两句更硬的\n——「签收前不运行」与「不得以『方便实现』自动新增 M8」。裁决当天的执行顺序 §3 第 4 条\n即为「C-3 宿主协议逐域签收 → Catalog 六项去向」,而建本目录之前,全仓「宿主协议」四字\n只出现在三篇设计文档里,零份签收材料:空着的不是立项,是签收。\n\n本次按十三项最小内容(能力ID / 数据Owner / 运行Owner / 库 / 对外契约 / 鉴权 / 备份 /\nSLO / 值班 / 依赖 / 预算 / 升级退出 / 消费者清单)逐域建单,五份对应 C-3 承接表:\nC15 跨域流程、C16 企业 IM、C17 数据分析、C18 统一体验、C19 成本与容量,状态一律「未签收」。\n每份代填的只有本仓可机器核验的字段(规则文件与行数、域测试、失败关闭夹具例数、Catalog\n登记与 blockers、本域特有约束),宿主侧字段一律空缺;本目录不代任何 Owner 签字,\n不改任何 Catalog 字段——Catalog 去向登记是签收之后的动作,须走 CHG。\n\n三处不能读岔的,逐单复写:\n- C19 的宿主按 C-3 是「复用 C17 选定宿主」,C17 未签收前它的宿主栏无从填起;且 C-15 改案\n 把订阅计量与出账并入本域,范围改写材料 CHG-017 待签,签前须先确认适用哪版范围。\n- C18 的宿主是劈成两半的:企业业务 Shell 归数字员工基座(本单要签的那半),平台自身入口\n 由本仓独立工作台承载(CHG-018 修正,不走宿主签收)。工作台已在本机 dev 跑起来,\n 不构成把 enterprise-experience 读成「已有承接」的理由。\n- C15 是六域里唯一带「无合格宿主则另提运行承接裁决」口子的,那是 Q01 给新建运行承接\n (含本仓模块)留的唯一合法入口,走它要附至少两个宿主方案的成本与迁移影响,不是跳过签收。\n\nC01 注册中心单列为「不适用」:C-3 的承接表只覆盖 C11—C19,注册中心是 C01、责任在\nCatalog Owner / 平台工程,权威状态是获批的 Git 内容,没有「托管到某个上层业务应用」这个选项。\nA-2 附条件里「注册中心项已由 CHG-013 / 014 处理」指的是登记面(code_truth 改指、证据归零),\n不是运行承接裁决。它真正卡的是六条 blocker(DEC-009/010/011/012/031/032)的落地面——\n六条都已 approved,所以不是等裁决,是这些裁决在本域还没有对应实现。\n\n一条五份单共同的前置(机器实测 2026-09-18):六个域在 contracts/ 里已登记的 HTTP 契约与\nFact 都是 0——contracts/contracts/ 的 7 份 OpenAPI 全属七模块,facts.json 对六域一条没有。\n按仓纪律 1「模块新增端口 / Fact 必须先登记 contracts/」,登记对外契约必须发生在签收之前,\n否则宿主签的是一份没有接口定义的协议。\n\n同时在 Q01 的「待改产物 / 责任」后补一段「签收面」指向本目录,避免新目录成为孤儿文档。\n门禁:治理层 check-workspace-consistency 重跑,除在案常驻的 L9 COMPOSE_PROJECT_COLLISION\n外无新增问题;七份新文档的相对链接与锚点逐条实测可达。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:46:22-07:00"},{"Sha1":"7dd4429a2d0400fdd2f2e9ec2b93e8cfb6e52609","Message":"docs(工作台): 订正实现记录里「回绑」那句 —— 本轮只回绑了 runtime 作用域的两份\n\n21b0821 写记录时那句是「报告回绑单独成提交跟在本提交之后」,写的是打算而不是结果。\n实际只做到一半,记录里现在把一半的边界画出来:naming 与 fork-readiness 已在 21b0821 上\n以 worktreeDirty=false 回绑(edff342);module-imports 的输入集确实被本轮动到,但取证时\n仓根不干净——树里有并行会话正在写的未跟踪产物 docs/能力设计/宿主协议/——按仓根算就是\ndirty,回绑等于把现有 clean 绑定降级,留给干净树上补;caddy 的输入本轮一个都没动,\n不需要跟着走。\n\n也就是说这两项在 21b0821 上的证据形态是门禁 stdout 与退出码,不是回绑报告。记录 §6 改成\n一张处置表,不再是一句笼统的「只在本提交之后单独回绑」。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:46:05-07:00"},{"Sha1":"edff342c2c4e3a7b11920e51d87c32905d58280b","Message":"chore(reports): naming 与 fork-readiness 回绑 @ 21b0821 —— 根级两份这轮拿不到 clean\n\n工作台改版(21b0821)动的是 runtime/apps/workbench,naming 与 fork-readiness 的输入集\n覆盖整个 runtime/,所以这两份必须跟着走,否则 check:evidence 会把它们判成过期。两份都在\nruntime 作用域的干净树上重跑,exit 0、worktreeDirty=false。\n\n同一时刻**没有**回绑的两份,以及为什么:\n- reports/module-imports.latest.json:输入集含工作台(规则 3「工作台不得静态 import 任何\n @juhai/module-*」),确实被 21b0821 动到,但它的 provenance 按仓根算——树里有并行会话\n 正在写的 docs/能力设计/宿主协议/(未跟踪,18:43 起),按仓根算就是 dirty=true。回绑一份\n worktreeDirty=true 的报告等于把现有的 clean 绑定降级,不如留着,等干净树上补。\n- reports/caddy.latest.json:同样只能绑 dirty=true,但它的输入(modules.json、\n caddy-routes.json、两个 Caddyfile)21b0821 一个都没动,本来就不需要跟着走。\n\n本轮这四项门禁在 21b0821 上都跑过 exit 0(module-imports、caddy 的证据形态因此是门禁\nstdout,不是回绑报告)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:45:42-07:00"},{"Sha1":"21b0821a2898e0e2d6f4660b8c50744600dd96bb","Message":"feat(workbench): 服务目录重做与交互完善——三处「设计写了、WB-1 没落」的缺口一并补上\n\n本轮只动 runtime/apps/workbench 的前端代码:读的还是原来那三个管理读面与随构建附带的\n目录快照,不新增接口、不新增数据来源、不新增写操作,因此不改变任何模块的验收等级、\n发布档位与 Catalog 状态。\n\n先补的三处不是新功能,是已签署设计里写了而 WB-1 没实现的:\n- 快照的 conflicts / status 此前被整个忽略,页面只渲染 entries。对外交付设计 §3.1 要求\n 「来源冲突展示冲突及证据,不静默挑选更乐观的结果」,现在冲突块排在条目之前,为空时\n 明写「0 处来源冲突」——不靠「没看见」表示没有。\n- §5.3 的「显示来源、环境和更新时间」此前一处都没有。现在每个区块各自显示取数时刻、\n 可单独重取,页脚给出平台接口地址与快照路径。\n- nonce 一直是生成并随授权请求发出,回调里却从未与 id_token 比对(§8 关键验收场景 2\n 要求 PKCE / state / nonce 都正确)。现在 nonce 与 aud 在建立会话之前校验,任一不符即\n 拒绝、不落 sessionStorage;iss 不符只降级为「主体未知」并说明原因——那是 D-10 的部署\n 配置问题,不是这次登录不合法。顺带收了 expires_in 被丢弃的问题:过期令牌此前会补水成\n 「导航栏显示已登录、每个读面都报缺凭证」。\n\n服务目录从一张静态表重做成可取景的服务中心:搜索、四个筛选、排序、分组、选中条目与是否\n对照运行时整体进 URL(默认值一律不写进去,认不出的参数退回默认而不是把页面打空),筛出来\n的视图因此可以直接贴给别人。五列可排序,层按 P0 / P1 / P2 层序、模块档位按 shape →\nauthority → e2 推进序——代码注释与页面 title 都写明这是固定显示顺序、不是优劣排名。详情\n从行内展开改成宽屏常驻面板 / 窄屏行内,六个区加快照自带的 flags 口径提醒;稳定标识、包名、\ncode_truth、绑定提交与 HTTP 前缀都带复制按钮,复制的是完整值而不是截断显示的短号。快照的\ncounts 原样成摘要条,不用筛选结果重算——那是两个时刻的两件事。\n\n新增的「对照运行时」开关默认关:目录页读的是静态快照,不该因为打开一个页面就去打需要令牌\n的接口;开关进 URL,是因为收到链接的人有权知道这个视图会额外取一份数据。打开后表格多一列\n已装载 / 未装载、详情多一节运行时对照。读面失败时只在表格上方说一次(分类 + 原因 + 重试),\n行内用 —,详情那节指回去——同一条 401 不连同同一个重试按钮摆三遍。\n\n运行信息页给出模块与项目的映射及跳回目录的深链(模块 id identity 与项目标识\nenterprise-idp 不是一回事),查不到映射就不给链接。交互面另有:深色模式真正接上(此前\n.dark 变量是死代码),首帧前由内联脚本应用偏好、不闪一帧浅色;焦点环写成原生 outline 而\n不是 @apply ring-*,焦点环消失是可达性缺陷、不该由主题配置的颜色键决定;方向键只在焦点\n落进表格后接管,全局劫持等于抢走页面滚动;窄屏改为收列而不是横向滚动,上一版的详情被困在\n表格的横向滚动容器里、手机上要左右刮着读。\n\n实测与未闭环见 docs/工作台交互与服务目录完善记录-2026-09-18.md。要点两条:nonce / aud\n校验只有单测级证据,托管登录要人工输口令、本轮没走完整授权码流程;工作台仍无仓内测试装置,\n那些断言未进 pnpm check。门禁在本轮的脏树上跑绿(workbench typecheck / lint / build、\ncheck:module-imports、check:naming、check:fork-readiness、check:caddy),报告回绑单独\n成提交跟在本提交之后。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:44:46-07:00"},{"Sha1":"ef1f95e091db917900dd98bf11f6385e6b176387","Message":"docs(部署): 登记「装载全部模块」——1/7 不是回归,是 :3101 的 profile 只写了 identity\n\n§11.4 与 §18.3 两处记的「已装载 1/7」都是当时的实测,本节不追改,补的是成因,\n而成因只在一条链上:常驻容器 :53001 由 compose 注入七个 profile,一直是 7/7;\n工作台读的那条链末端是裸 dev 进程 :3101,它的 PLATFORM_PROFILES 取自\n.secrets/enterprise-platform-identity-dev.env,值是 PF-07 阶段 identity 单启时的\n出厂值 'identity'。同一块读面,两个运行面给的答案差六个模块。\n\n改动一处且在仓外:该 env 第 28 行扩成七个(原件备份 .bak-20260919-profiles),\n七个 DATABASE_URL_\u003cMODULE\u003e 本来就齐、与容器指同一台 PG(容器内 postgres:5432 =\n本机 127.0.0.1:55470),迁移无须补跑;Redis 逻辑库 dev 用 5、容器用 14,不撞。\n按 .claude/launch.json 停 pid 19008、重起为 39237,:3098 / :3010 未动,\n未重建镜像、13 个 stack 容器一个没动。仓内零改动。\n\n实测(§19.3,作用域 = 本机 dev,证据等级 = 运行态链路):启动日志七模块全装载、\n10 条模块作业句柄注册、RLS enforce 校验通过;/api/platform/modules 直打 :3101 与\n经 :3098 代理均 7 条;浏览器 :3010 总览「已装载 / 已登记模块 7 / 7」。端口提供方\n四项由模块承接,其中 factExport 与 serviceCredential 改前是 fail-closed,\npermission / audit 改前走 local-tenant-scope / local-log 回退。\n\n同节写明三条不得读岔的:credential-shape 与 scope 都是 shape 档形状实现、不是权威实现;\n七个模块只有 identity 有 health 探针;装上 ≠ 有能力 ≠ 环境健康。\n\n§19.4 留下四条:① mode 仍是 local(PLATFORM_PORTS_MODE 未设置、非生产按设计回退),\n与容器的 fail-closed 不同档,要不要一并改未裁;② 两个进程现在连同一批模块库,\n队列虽按 Redis 逻辑库分开、作业也要入队才跑,但从 :3101 入队会写容器在读写的库;\n③ env 文件名 identity-dev 与内容(七模块)已名实不符,只登记;④ 本节证据不绑提交——\n裸进程没有 PLATFORM_SOURCE_SHA,且取证时工作区 dirty(工作台改版 WIP)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:36:44-07:00"}],"HeadCommit":{"Sha1":"b69710a74604d55a435971103dc033025cbc6e6b","Message":"docs(治理): 建宿主协议签收单目录——C-3 附条件的执行面,六份逐域单全部未签收\n\n立项这件事在本体系里已经被裁过:决策批次-2026-09-16 的 C-3(✅ 采纳)把九个契约域的\n运行宿主裁给上层既有宿主,附条件写死「宿主协议……签收才算准入」,Q01 原文还有两句更硬的\n——「签收前不运行」与「不得以『方便实现』自动新增 M8」。裁决当天的执行顺序 §3 第 4 条\n即为「C-3 宿主协议逐域签收 → Catalog 六项去向」,而建本目录之前,全仓「宿主协议」四字\n只出现在三篇设计文档里,零份签收材料:空着的不是立项,是签收。\n\n本次按十三项最小内容(能力ID / 数据Owner / 运行Owner / 库 / 对外契约 / 鉴权 / 备份 /\nSLO / 值班 / 依赖 / 预算 / 升级退出 / 消费者清单)逐域建单,五份对应 C-3 承接表:\nC15 跨域流程、C16 企业 IM、C17 数据分析、C18 统一体验、C19 成本与容量,状态一律「未签收」。\n每份代填的只有本仓可机器核验的字段(规则文件与行数、域测试、失败关闭夹具例数、Catalog\n登记与 blockers、本域特有约束),宿主侧字段一律空缺;本目录不代任何 Owner 签字,\n不改任何 Catalog 字段——Catalog 去向登记是签收之后的动作,须走 CHG。\n\n三处不能读岔的,逐单复写:\n- C19 的宿主按 C-3 是「复用 C17 选定宿主」,C17 未签收前它的宿主栏无从填起;且 C-15 改案\n 把订阅计量与出账并入本域,范围改写材料 CHG-017 待签,签前须先确认适用哪版范围。\n- C18 的宿主是劈成两半的:企业业务 Shell 归数字员工基座(本单要签的那半),平台自身入口\n 由本仓独立工作台承载(CHG-018 修正,不走宿主签收)。工作台已在本机 dev 跑起来,\n 不构成把 enterprise-experience 读成「已有承接」的理由。\n- C15 是六域里唯一带「无合格宿主则另提运行承接裁决」口子的,那是 Q01 给新建运行承接\n (含本仓模块)留的唯一合法入口,走它要附至少两个宿主方案的成本与迁移影响,不是跳过签收。\n\nC01 注册中心单列为「不适用」:C-3 的承接表只覆盖 C11—C19,注册中心是 C01、责任在\nCatalog Owner / 平台工程,权威状态是获批的 Git 内容,没有「托管到某个上层业务应用」这个选项。\nA-2 附条件里「注册中心项已由 CHG-013 / 014 处理」指的是登记面(code_truth 改指、证据归零),\n不是运行承接裁决。它真正卡的是六条 blocker(DEC-009/010/011/012/031/032)的落地面——\n六条都已 approved,所以不是等裁决,是这些裁决在本域还没有对应实现。\n\n一条五份单共同的前置(机器实测 2026-09-18):六个域在 contracts/ 里已登记的 HTTP 契约与\nFact 都是 0——contracts/contracts/ 的 7 份 OpenAPI 全属七模块,facts.json 对六域一条没有。\n按仓纪律 1「模块新增端口 / Fact 必须先登记 contracts/」,登记对外契约必须发生在签收之前,\n否则宿主签的是一份没有接口定义的协议。\n\n同时在 Q01 的「待改产物 / 责任」后补一段「签收面」指向本目录,避免新目录成为孤儿文档。\n门禁:治理层 check-workspace-consistency 重跑,除在案常驻的 L9 COMPOSE_PROJECT_COLLISION\n外无新增问题;七份新文档的相对链接与锚点逐条实测可达。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:46:22-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/51e311bf417385a994296f20da3b9458761bdee8...b69710a74604d55a435971103dc033025cbc6e6b","Len":5}...
|
1789782545
|
Edit
Delete
|
|
31225
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"51e311bf4 {"Commits":[{"Sha1":"51e311bf417385a994296f20da3b9458761bdee8","Message":"docs(部署): 登记第二次「重新部署运行」——判据仍指向只重启,但 identity 跑的是旧构建\n\n与 §12 同形态的请求,前置判据同法重算,结论同样是不重建镜像:镜像源 b90d7a1 →\nHEAD 07df639 的 runtime/ 与 stack/ 变更均为零文件,未提交改动不碰运行时输入,\n容器镜像 ID 与 reports/image-digest.json 逐字一致(sha256:fe5570f5cb60…)。\n13 个 stack 容器一个没动。\n\n与 §12.1 的两点差别记在 §18.1 / §18.2:\n- 这次跑了 check:deployed(passed / IMAGE_SOURCE_EQUIVALENT,在 07df639 上),\n 但脚本在脏树上没有落盘,reports/deployed-runtime.latest.json 仍是 dd6de712 那份、\n worktreeDirty=false,未被本轮污染——所以那一行的证据形态是门禁 stdout,不是回绑报告。\n- 这轮重启有实据,不只是「判据说该做的只有启动那半」:identity 的 dist/src/main.js\n 在 17:31 重建过,而在跑的进程是 07:57 起的,跑的是旧构建;web 与工作台的 .next\n 均不落后于源码。停 pid 5209/18658/43950,按 .claude/launch.json 重起。\n\n重启后复验 11 项全绿(§18.3):identity 无凭证 401 / 现签 HS256 令牌 200、\n控制面 /api/platform/{catalog,modules} 200、CORS 预检 204 带 authorization、\n工作台「读取探针」ok 且 database/redis up、常驻容器经 Caddy :58080 与直连 :53001 均 200、\n:3098 transport 为 Connected(D-8 注入生效)、控制台零错误。\n\n§18.4 登记一条未定位的观察:有个不带凭证的客户端每 2 秒打一次 identity 的 /api/users\n(401,失败关闭)。不是本轮重启带出来的——新进程 18:14:46 起、它 18:15:29 就接上了;\n三个浏览器标签页的 network 抓取里都没有这批请求,lsof 只见一条绕过 :3098 代理、\n直连 127.0.0.1:3101 的长连接。未定位到具体页面,该节不作结论。\n\n提交时 HEAD 已被并行会话推到 97d61aa,期间三个提交全是 chore(reports)、\nruntime/ 与 stack/ 零变更,故 §18.1 的判据在新 HEAD 上仍然成立,正文不改。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:19:04-07:00"}],"HeadCommit":{"Sha1":"51e311bf417385a994296f20da3b9458761bdee8","Message":"docs(部署): 登记第二次「重新部署运行」——判据仍指向只重启,但 identity 跑的是旧构建\n\n与 §12 同形态的请求,前置判据同法重算,结论同样是不重建镜像:镜像源 b90d7a1 →\nHEAD 07df639 的 runtime/ 与 stack/ 变更均为零文件,未提交改动不碰运行时输入,\n容器镜像 ID 与 reports/image-digest.json 逐字一致(sha256:fe5570f5cb60…)。\n13 个 stack 容器一个没动。\n\n与 §12.1 的两点差别记在 §18.1 / §18.2:\n- 这次跑了 check:deployed(passed / IMAGE_SOURCE_EQUIVALENT,在 07df639 上),\n 但脚本在脏树上没有落盘,reports/deployed-runtime.latest.json 仍是 dd6de712 那份、\n worktreeDirty=false,未被本轮污染——所以那一行的证据形态是门禁 stdout,不是回绑报告。\n- 这轮重启有实据,不只是「判据说该做的只有启动那半」:identity 的 dist/src/main.js\n 在 17:31 重建过,而在跑的进程是 07:57 起的,跑的是旧构建;web 与工作台的 .next\n 均不落后于源码。停 pid 5209/18658/43950,按 .claude/launch.json 重起。\n\n重启后复验 11 项全绿(§18.3):identity 无凭证 401 / 现签 HS256 令牌 200、\n控制面 /api/platform/{catalog,modules} 200、CORS 预检 204 带 authorization、\n工作台「读取探针」ok 且 database/redis up、常驻容器经 Caddy :58080 与直连 :53001 均 200、\n:3098 transport 为 Connected(D-8 注入生效)、控制台零错误。\n\n§18.4 登记一条未定位的观察:有个不带凭证的客户端每 2 秒打一次 identity 的 /api/users\n(401,失败关闭)。不是本轮重启带出来的——新进程 18:14:46 起、它 18:15:29 就接上了;\n三个浏览器标签页的 network 抓取里都没有这批请求,lsof 只见一条绕过 :3098 代理、\n直连 127.0.0.1:3101 的长连接。未定位到具体页面,该节不作结论。\n\n提交时 HEAD 已被并行会话推到 97d61aa,期间三个提交全是 chore(reports)、\nruntime/ 与 stack/ 零变更,故 §18.1 的判据在新 HEAD 上仍然成立,正文不改。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:19:04-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe...51e311bf417385a994296f20da3b9458761bdee8","Len":1}...
|
1789780810
|
Edit
Delete
|
|
31224
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"97d61aa71 {"Commits":[{"Sha1":"97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","Message":"chore(reports): check:evidence 自身回绑 @ fe9fdca —— 43 份全新鲜,状态由 partial 转 passed\n\n仓里这份还停在 2026-09-18 07:28(绑 a4b3d35),记的是 status=partial、34 新鲜 / 3 过期。\n那三条是 runtime/reports/runtime-acceptance、reports/revocation-sla、reports/mainline-acceptance,\n都因 runtime/test/e2e/identity-profile.test.ts 变更而过期,已在 b90d7a1 那轮收掉;\n只是没人把 check:evidence 自己重跑回绑,证据面的总账一直落后于实况。\n\n本次在干净树上重跑(HEAD fe9fdca,provenance.worktreeDirty=false,门禁 exit 0):\n 43 份已登记,43 份新鲜、0 份过期、0 份输入未提交、0 份无有效绑定、0 份例外\n 0 条告警;10 份未登记作用域,其中 0 份无处置说明\n\n也顺带验了前两个提交没有连带效应:十份零依赖门禁回绑到 07df639 / c570056 之后,\n工作台两份快照等以 reports 为输入的报告仍然新鲜,没有被重新判过期。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:16:11-07:00"},{"Sha1":"fe9fdca41e28e3cbfc84f1ece8f76b068781647b","Message":"chore(reports): catalog-drift 与 facts 回绑 @ c570056 —— 在主工作区干净态下重跑\n\n这两份不能走 rebind-reports:它的临时检出在工作区之外,catalog-drift 因此读不到工作区\n(workspaceAvailable 由 true 变 false、candidates 4→0、catalogDriftUnknown 0→154,\n多出一千两百行 unknown 条目),check:facts 则会把临时目录路径写进 candidatesDir。\n改在主工作区跑,用的是上一提交刚腾出的干净窗口:先跑 catalog:drift(树干净 → dirty=false),\n把产出移出工作区、还原文件,再跑 check:facts(树仍干净 → dirty=false),最后把 drift 那份放回来。\n两份因此绑同一个提交 c570056,且 provenance.worktreeDirty 都是 false。\n\n结论与 17:11 那轮在途版本逐字一致(剔除 provenance 三行后无差异),不是靠重跑改出来的:\n catalog:drift —— error 0 / drift 0 / info 5 / unknown 0,工作区可用\n check:facts —— 16 个声明 Fact 全部可追溯(Catalog 11 / 候选 5)\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:15:40-07:00"},{"Sha1":"c5700568890c95adf58272c1755e20a54f512d77","Message":"chore(reports): 八份零依赖门禁回绑 @ 07df639 —— 覆盖上一轮绑 1de65fb/dirty 的在途版本\n\n工作区里躺着的这八份是 2026-09-18 17:11—17:26 本地跑的,绑的是\n1de65fb(caddy / catalog-reconciliation / fact-pii / migration-decs / module-imports / otel)、\n5116dc5(ci-mirror)与 6687aec(gate-flow)。前七份 provenance.worktreeDirty=true,\n按状态措辞纪律只能绑本地;而 HEAD 此后又走了六个提交(b90d7a1 … 07df639),\n直接提交等于把一份旧输入、脏树的结论写进证据面。\n\n改用 rebind-reports 在 HEAD 07df639 的干净检出里重跑这八个门禁:\n八份全部门禁 exit 0,provenance 均为 07df639 / worktreeDirty=false。\n\n结论与重跑前一致,没有靠重跑把红洗绿:\n caddy / catalog-reconciliation / migration-decs / otel —— findings 0\n fact-pii / module-imports —— violations 0\n gate-flow / ci-mirror —— status=passed,findings 0\nfact-pii 比上一份已提交的报告多出 scanDirs 与 rulesSource 两个字段,\n那是脚本里早已提交的改动第一次落进报告,不是本次新增的判据。\n\ncatalog-drift 与 facts 不在这一提交里:rebind 的临时检出在工作区之外,\n前者因此读不到工作区(workspaceAvailable true→false,catalogDriftUnknown 0→154,\n多出一千两百行 unknown 条目),后者会把临时目录路径写进 candidatesDir。\n这两份改在主工作区干净态下重跑,单独成提交。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:15:09-07:00"}],"HeadCommit":{"Sha1":"97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","Message":"chore(reports): check:evidence 自身回绑 @ fe9fdca —— 43 份全新鲜,状态由 partial 转 passed\n\n仓里这份还停在 2026-09-18 07:28(绑 a4b3d35),记的是 status=partial、34 新鲜 / 3 过期。\n那三条是 runtime/reports/runtime-acceptance、reports/revocation-sla、reports/mainline-acceptance,\n都因 runtime/test/e2e/identity-profile.test.ts 变更而过期,已在 b90d7a1 那轮收掉;\n只是没人把 check:evidence 自己重跑回绑,证据面的总账一直落后于实况。\n\n本次在干净树上重跑(HEAD fe9fdca,provenance.worktreeDirty=false,门禁 exit 0):\n 43 份已登记,43 份新鲜、0 份过期、0 份输入未提交、0 份无有效绑定、0 份例外\n 0 条告警;10 份未登记作用域,其中 0 份无处置说明\n\n也顺带验了前两个提交没有连带效应:十份零依赖门禁回绑到 07df639 / c570056 之后,\n工作台两份快照等以 reports 为输入的报告仍然新鲜,没有被重新判过期。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:16:11-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/07df639ac88e1f0ec5a24d21c120bc36e2e722fa...97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","Len":3}...
|
1789780647
|
Edit
Delete
|
|
31222
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"07df639ac {"Commits":[{"Sha1":"07df639ac88e1f0ec5a24d21c120bc36e2e722fa","Message":"chore(reports): 工作台两份快照回绑 @ 3eb37ea —— image-smoke 转绿与 runbook 新增章节都进了索引\n\n本会话第三次回绑这两份,成因还是那条作用域设计:docs/runbook.md 与一批 reports 都在里面,\n任一输入变更即过期。这次变的是 runbook §2 新增的 smoke env 生成配方,以及 image-smoke 由过期转 passed。\n内容确有变化(不是纯背书)。\n\n零依赖脚本,干净检出(HEAD 3eb37ea)生成,两份 provenance 均 worktreeDirty=false。\n\n至此 check:evidence 43 份全新鲜。本会话在证据线上收的:\n A 组 release-manifest / port-conformance(sbom 由并行会话收)\n B 组 deployed-runtime —— 重建 runtime 镜像并换掉 dev 常驻容器\n C 组 runtime-acceptance / mainline-acceptance / revocation-sla —— adversarial 隔离栈上真实验收\n 连带 image-digest / image-smoke / sbom / 工作台两份快照\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:05:37-07:00"},{"Sha1":"3eb37eaf82da1668fb94e3f5c9f06511da52f51a","Message":"chore(reports): image-smoke 转绿 @ 6abcd3d,并把 smoke env 的生成配方写进 runbook\n\n上一条(6abcd3d)把 image-smoke 如实留红,理由是「需要一份主机名改写过的 env 变体,那是新配置」。\n这次把它造出来跑通了,证据面最后一条红清掉。\n\n配方不是手拼的——手拼必错,因为容器侧变量名与 .secrets/…-runtime-dev.env 的键名不是一套\n(compose 里是 `DATABASE_URL: ${PLATFORM_RUNTIME_DATABASE_URL}` 这样映射的)。做法是从\n`docker compose config --format json` 解析出 runtime 的**已解析环境**(32 个变量),只改三处主机名\n(postgres:5432 / redis:6379 / otel-collector:4318 → host.docker.internal + 已发布端口,共 12 个键被改写),\n写进 .secrets/enterprise-platform-runtime-smoke.env(0600,仓外)。\n\n跑通后发现自己漏遵守 runbook 一条,已改正:REDIS_URL 继承了 dev 的逻辑库 14,而 runbook 明写\n「别用 dev 常驻运行时占着的那个,借未分配的」。首轮(db14)虽然六项全绿,但那是和常驻运行时共用\n一个逻辑库;改为 db15 后重跑,六项仍全绿,回绑的是改正后这一份。\n顺带记下一个表本身没说的坑:stack/provision/redis-dbs.json 里 14 / 15 都标未分配,\n**实际占用要看 .secrets 的 dev env,不是看表**。\n\n冒烟结果(镜像 fe5570f5cb60 @ b90d7a1,即 B 组重建的那个):\n container-running / api-health-200(database+redis up)/ platform-modules-view(fail-closed,七模块)\n / module-health-200 / decisions-unauthenticated-401 / docker-healthcheck-healthy —— 六项全绿\n\n报告在干净检出(HEAD 6abcd3d)产出,provenance dirty=false,sourceSha b90d7a1(镜像源提交,与本次\n运行绑定不同是正常的,runbook 已说明)。配方连同两处踩坑写进 docs/runbook.md §2,免得下一个人重走。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:05:08-07:00"}],"HeadCommit":{"Sha1":"07df639ac88e1f0ec5a24d21c120bc36e2e722fa","Message":"chore(reports): 工作台两份快照回绑 @ 3eb37ea —— image-smoke 转绿与 runbook 新增章节都进了索引\n\n本会话第三次回绑这两份,成因还是那条作用域设计:docs/runbook.md 与一批 reports 都在里面,\n任一输入变更即过期。这次变的是 runbook §2 新增的 smoke env 生成配方,以及 image-smoke 由过期转 passed。\n内容确有变化(不是纯背书)。\n\n零依赖脚本,干净检出(HEAD 3eb37ea)生成,两份 provenance 均 worktreeDirty=false。\n\n至此 check:evidence 43 份全新鲜。本会话在证据线上收的:\n A 组 release-manifest / port-conformance(sbom 由并行会话收)\n B 组 deployed-runtime —— 重建 runtime 镜像并换掉 dev 常驻容器\n C 组 runtime-acceptance / mainline-acceptance / revocation-sla —— adversarial 隔离栈上真实验收\n 连带 image-digest / image-smoke / sbom / 工作台两份快照\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T18:05:37-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/6abcd3d93b19b2a73eb7869272261dde4e0b66d5...07df639ac88e1f0ec5a24d21c120bc36e2e722fa","Len":2}...
|
1789780029
|
Edit
Delete
|
|
31221
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"6abcd3d93 {"Commits":[{"Sha1":"6abcd3d93b19b2a73eb7869272261dde4e0b66d5","Message":"chore(reports): 新镜像连带过期的四份,收三份回绑 @ dd6de71;image-smoke 如实留红\n\n重建 runtime 镜像后 reports/image-digest.json 变了,它同时落在四份报告的作用域里,四份一起过期。\n这四份都是我造成的,一次批量收:\n\n deployed-runtime passed 容器镜像与 image-digest 一致 @ b90d7a1\n release-manifest partial 仍缺 signature(与 registry 镜像绑定的 cosign 验证),是结论不是失败\n sbom 已刷新 lockfile 模式,随新镜像的源提交重算\n\n**image-smoke 没收,如实留在过期状态**,理由写清楚免得下一个人重走一遍:\n- 它要 `--env-file`,仓里没有也不该有;`.secrets/enterprise-platform-runtime-dev.env` 是给 compose 用的,\n 里面的 DB / Redis 主机名是 compose 服务名,独立 `docker run` 的容器不在那张网里,解析不到;\n- 默认端口 53001 被 dev 常驻 runtime 占着,换 --port 53051 可以绕开端口冲突,但上面那条解析不了,\n 实测 api-health HTTP 0、HEALTHCHECK unhealthy;\n- runbook §2 写的是「指向本机底座时主机名用 host.docker.internal」——要跑得先造一份改写过主机名与端口的\n env 变体。那是新配置,不在本次范围,也不该由我随手拼。\n跑出来的那份 failed 报告**没有拷回主检出**(在临时 worktree 里 git checkout 还原了)——不拿失败结果\n冒充证据,也不让它把一份原本只是\"过期\"的报告变成\"失败\"。\n\n做法同前:企业控制面/.worktrees/settle 干净检出(HEAD dd6de71),只软链 runtime/node_modules,\n跑完把三份 report + sbom.spdx.json 拷回,按 pathspec 提交。三份 provenance 均 dd6de71、worktreeDirty=false。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:58:16-07:00"},{"Sha1":"dd6de7125d4ff5c3a32855f67adc483a2cb2c22a","Message":"chore(reports): 工作台两份快照回绑 @ a818ec2 —— 这次内容真的变了(新镜像 + rc.6)\n\n上一次回绑(d7d9fe5)是纯背书,索引内容一字未变。这次不同,两份都有实质变化:\n ops.image ref 05e3826e9e9e → b90d7a151e5e,digest c086993…→ fe5570f…,source_sha 与 built_at 同步\n (B 组重建镜像换容器的结果,a818ec2)\n ops.release version 1.0.0-rc.3 → 1.0.0-rc.6,source_sha 04d02d6 → e3b9d12,三个包版本随之更新\n (并行会话的 rc.6 列车)\n catalog entries 与包版本同步刷新\n\n成因就是它的作用域设计:reports/image-digest.json、release-manifest、evidence-freshness 都在里面,\n任一输入变更即过期——我提交 image-digest.json 的那一刻它就该重跑。\n\n零依赖脚本,在 企业控制面/.worktrees/rebind-ops2 干净检出(HEAD a818ec2)跑\nnode governance/build-workbench-snapshots.mjs,确认 git status 为空后出报告,两份拷回主检出、\n按 pathspec 提交。两份 provenance 均 gitSha=a818ec2、worktreeDirty=false。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:56:53-07:00"},{"Sha1":"a818ec2cb2324fc14720fdfc1bc5f07b9cf38309","Message":"chore(reports): B 组 deployed-runtime 转绿 @ b90d7a1 —— 重建 runtime 镜像并换掉 dev 常驻容器\n\ndeployed-runtime 此前 failed:BUILT_IMAGE_SOURCE_BEHIND——运行容器的镜像源停在 05e3826,HEAD 已有\n23 个运行时输入变更,其中含本会话 10 处接线改的那批 fixture-evaluator 与夹具。这条不是重跑报告能收的,\n必须真重建镜像并换容器。\n\n做了什么:\n1. pnpm image:build —— 上下文是 git archive HEAD:runtime(只取已提交的树,不受任何 WIP 影响),\n token 只作 BuildKit secret。产出 enterprise-platform/runtime:b90d7a151e5e,\n image id sha256:fe5570f5cb60…,linux/arm64,195 MB;reports/image-digest.json 随之更新。\n2. 按 runbook §1 的既定写法换镜像:改 .secrets/enterprise-platform-runtime-dev.env 里的\n PLATFORM_RUNTIME_IMAGE 为 \u003cname\u003e@sha256:\u003cimage id\u003e(改前已备份为 .bak-20260919-b90d7a1,该文件在仓外、0600),\n docker compose --env-file … up -d --no-deps runtime 重建。未动底座其他 12 个服务。\n3. 容器 healthy,/api/health 200:{\"status\":\"ok\",\"service\":\"nestjs\",\"checks\":{\"database\":\"up\",\"redis\":\"up\"}}。\n4. 在干净检出跑 node governance/check-deployed-runtime.mjs --write-report → passed @ b90d7a1。\n\n一处踩坑记下来:check-deployed-runtime.mjs 只有带 --write-report 才落盘,不带就只打印。我前两次跑完\n以为报告已更新,实际文件还是 06c3d4c 那份——git status 不显示改动才发现。别被 ✓ 骗了。\n\nreports/image-digest.json 一并提交:它是本次构建的产物,也是 deployed-runtime 与 release-manifest 的\n作用域输入,不提交则下一次判定会指向一个仓里不存在的镜像绑定。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:52:23-07:00"}],"HeadCommit":{"Sha1":"6abcd3d93b19b2a73eb7869272261dde4e0b66d5","Message":"chore(reports): 新镜像连带过期的四份,收三份回绑 @ dd6de71;image-smoke 如实留红\n\n重建 runtime 镜像后 reports/image-digest.json 变了,它同时落在四份报告的作用域里,四份一起过期。\n这四份都是我造成的,一次批量收:\n\n deployed-runtime passed 容器镜像与 image-digest 一致 @ b90d7a1\n release-manifest partial 仍缺 signature(与 registry 镜像绑定的 cosign 验证),是结论不是失败\n sbom 已刷新 lockfile 模式,随新镜像的源提交重算\n\n**image-smoke 没收,如实留在过期状态**,理由写清楚免得下一个人重走一遍:\n- 它要 `--env-file`,仓里没有也不该有;`.secrets/enterprise-platform-runtime-dev.env` 是给 compose 用的,\n 里面的 DB / Redis 主机名是 compose 服务名,独立 `docker run` 的容器不在那张网里,解析不到;\n- 默认端口 53001 被 dev 常驻 runtime 占着,换 --port 53051 可以绕开端口冲突,但上面那条解析不了,\n 实测 api-health HTTP 0、HEALTHCHECK unhealthy;\n- runbook §2 写的是「指向本机底座时主机名用 host.docker.internal」——要跑得先造一份改写过主机名与端口的\n env 变体。那是新配置,不在本次范围,也不该由我随手拼。\n跑出来的那份 failed 报告**没有拷回主检出**(在临时 worktree 里 git checkout 还原了)——不拿失败结果\n冒充证据,也不让它把一份原本只是\"过期\"的报告变成\"失败\"。\n\n做法同前:企业控制面/.worktrees/settle 干净检出(HEAD dd6de71),只软链 runtime/node_modules,\n跑完把三份 report + sbom.spdx.json 拷回,按 pathspec 提交。三份 provenance 均 dd6de71、worktreeDirty=false。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:58:16-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/b90d7a151e5e9451fa12fb6e883b8898552124df...6abcd3d93b19b2a73eb7869272261dde4e0b66d5","Len":3}...
|
1789779515
|
Edit
Delete
|
|
31219
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"b90d7a151 {"Commits":[{"Sha1":"b90d7a151e5e9451fa12fb6e883b8898552124df","Message":"chore(reports): C 组三份真实验收回绑 @ 8a621fd —— 在 adversarial 隔离栈上跑,共享底座与 ms23 均未触碰\n\nC 组(runtime-acceptance / mainline-acceptance / revocation-sla)需要真实 PG + Redis + Redpanda。\nms23 那套 35 分钟前刚被并行会话用过(容器 Exited),按 docs/持久主线本地验收.md「同名 project 即使\n容器刚启动也不能直接 up 覆盖,该名称已占用时应协调或选择已有获准且无人使用的测试环境」,改用\nadversarial(PG 55473 / Redis 56382 / Broker 59095,2026-09-12 获准、闲置 3 天、其 Broker 已在故障\n注入白名单)。全程 docker start 既有容器,未 compose up 覆盖任何 project。\n\n结果(均在干净检出 8a621fd 上产出,worktreeDirty=false):\n runtime-acceptance passed 1001 tests(地板 775)、tenantRlsEnforced=1、双后端差分 0\n mainline-acceptance passed\n revocation-sla partial p95 5027ms / max 5041ms / 20 samples——远低于 MS-3 的 30s;\n partial 来自 employmentScope 链仍 pending-scope-consumer-enforcement,\n 以及生产投送/负载/staging 四项 unverified,是既定状态不是失败\n conformance-differential 作为 runtime 验收的副产物一并刷新(同样已登记 severity=warn)\n\n过程中一处失败是我搭环境搭错的,记下来免得下次再犯:首轮 e2e/identity-profile 断言\n`elevated=false` 实测 true——mainline:prepare 只为 fact/permission/audit/owner/consumer 建非超级用户\n角色,identity/credential/scope/aigateway 四个库是我用管理员 platform 手建的,identity 的连接因此是\n特权角色。REASSIGN OWNED 不适用(platform 持有系统对象),改为重建该库并 OWNER 给\nplatform_identity_test_app、以该角色重新 deploy 迁移后转绿。credential / scope 没有\nprisma:migrate:deploy 脚本是对的——它们是 state=shape 模块,按仓纪律不得有迁移。\n\n隔离与收尾:凭据只经仓外 0600 文件(/tmp/c3-mainline.env、/tmp/c3-env.sh),不入仓、不打印;\n验收在独立 worktree 里 pnpm install 自己的 node_modules,不软链主检出,避免与并行会话抢 .prisma;\nadversarial 三容器跑完恢复为 Exited(与我接手前一致)。主检出里并行会话另有十余份报告 WIP,一份没碰。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:45:56-07:00"},{"Sha1":"a178ba36c65d82fab8106fa7395dd65f927876ad","Message":"docs(治理): 云端治理段补 2026-09-19 实测——分支保护已整个消失,而计费仍未恢复\n\n推送本会话提交时实测到两条与在案记录对不上的事实:\n\n① main 的分支保护整个没了,不是摘掉那条必需检查而已:\n gh api .../branches/main/protection → 404 \"Branch not protected\"。\n 镜像因此重新推得动,直推 54e6324..12093b8 成功并已核对 github/main 与本地一致;\n 「镜像停在 3308542」这句作废。谁摘的、何时、为什么未知,gh 查不到保护变更历史。\n 本会话未恢复保护、未改动任何 GitHub 设置——不知原委时自行配回去,风险大于留着不动。\n\n② 计费没解决,原记录前半截仍成立:该次直推触发的 run 35410044850 三 job failure、\n 五 skipped,注解逐字仍是 recent account payments have failed。\n\n故「镜像推得动」≠「远端验过了」:这批提交在 GitHub 上一次门禁都没跑过,远端只是有了代码。\n\n第三条是写给下一个人的:本条与同段「不要靠摘必需检查绕过」的口径现在对不上现实,须由\n仓库管理权限持有者二选一收口——恢复保护,或把「为什么现在不设保护」写成显式裁决并给\n复核期。保持现状而不记录,等于让一条在案的治理资产无声消失。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:45:16-07:00"}],"HeadCommit":{"Sha1":"b90d7a151e5e9451fa12fb6e883b8898552124df","Message":"chore(reports): C 组三份真实验收回绑 @ 8a621fd —— 在 adversarial 隔离栈上跑,共享底座与 ms23 均未触碰\n\nC 组(runtime-acceptance / mainline-acceptance / revocation-sla)需要真实 PG + Redis + Redpanda。\nms23 那套 35 分钟前刚被并行会话用过(容器 Exited),按 docs/持久主线本地验收.md「同名 project 即使\n容器刚启动也不能直接 up 覆盖,该名称已占用时应协调或选择已有获准且无人使用的测试环境」,改用\nadversarial(PG 55473 / Redis 56382 / Broker 59095,2026-09-12 获准、闲置 3 天、其 Broker 已在故障\n注入白名单)。全程 docker start 既有容器,未 compose up 覆盖任何 project。\n\n结果(均在干净检出 8a621fd 上产出,worktreeDirty=false):\n runtime-acceptance passed 1001 tests(地板 775)、tenantRlsEnforced=1、双后端差分 0\n mainline-acceptance passed\n revocation-sla partial p95 5027ms / max 5041ms / 20 samples——远低于 MS-3 的 30s;\n partial 来自 employmentScope 链仍 pending-scope-consumer-enforcement,\n 以及生产投送/负载/staging 四项 unverified,是既定状态不是失败\n conformance-differential 作为 runtime 验收的副产物一并刷新(同样已登记 severity=warn)\n\n过程中一处失败是我搭环境搭错的,记下来免得下次再犯:首轮 e2e/identity-profile 断言\n`elevated=false` 实测 true——mainline:prepare 只为 fact/permission/audit/owner/consumer 建非超级用户\n角色,identity/credential/scope/aigateway 四个库是我用管理员 platform 手建的,identity 的连接因此是\n特权角色。REASSIGN OWNED 不适用(platform 持有系统对象),改为重建该库并 OWNER 给\nplatform_identity_test_app、以该角色重新 deploy 迁移后转绿。credential / scope 没有\nprisma:migrate:deploy 脚本是对的——它们是 state=shape 模块,按仓纪律不得有迁移。\n\n隔离与收尾:凭据只经仓外 0600 文件(/tmp/c3-mainline.env、/tmp/c3-env.sh),不入仓、不打印;\n验收在独立 worktree 里 pnpm install 自己的 node_modules,不软链主检出,避免与并行会话抢 .prisma;\nadversarial 三容器跑完恢复为 Exited(与我接手前一致)。主检出里并行会话另有十余份报告 WIP,一份没碰。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:45:56-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/12093b843ef69d300370e5da16fcca3399c14d40...b90d7a151e5e9451fa12fb6e883b8898552124df","Len":2}...
|
1789778893
|
Edit
Delete
|
|
31216
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"12093b843 {"Commits":[{"Sha1":"12093b843ef69d300370e5da16fcca3399c14d40","Message":"chore(reports): runtime 静态门禁链 18 份回绑 @ 8a621fd\n\n8a621fd 订正动态区 UI 条目后,docs-truth 的作用域(含 runtime/CLAUDE.md)随之过期;\nruntime check 是一条链、跑一次重出全部 16 项,故整批回绑而不是只挑一份——绑定一致比\n少改几个文件重要(同 b60cc18 的口径)。顺带清掉此前 error 级的 runtime-governance\n(绑 7fc7f02,作用域内 3 个文件已变)。\n\n在 HEAD 的干净 worktree(企业控制面/.worktrees/)装依赖 + prisma:generate 后跑\npnpm --dir runtime check:exit 0、16 项全过;只带回 provenance 绑 8a621fd 且\nworktreeDirty=false 的 18 份。\n\n刻意未带回 4 份:runtime-acceptance / ui-acceptance / conformance-differential 需真实\nDB 与浏览器,不由静态链产出,保持各自原绑定(08c3788 / 67e8193);framework-migration\n至今没有嵌套 provenance,已在 evidence-scopes 未登记账里具名。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:33:42-07:00"},{"Sha1":"8a621fdb03a44cebc985f97332ead8bbb785a685","Message":"docs(runtime): 动态区 UI 条目订正三处——SHA、端口、验收库;check:docs-truth 转绿\n\nc4ec6f6 把 ui-acceptance 重绑到 67e8193 后没回灌动态区,check:docs-truth 的\nfreshness-sha-ui 从那时起一直红。逐项核对报告后发现**这一行有三处与报告对不上,\n而门禁只抓得到其中一处**:\n\n clean `1b23285` → 报告绑 `67e8193`(门禁抓到的就这条)\n web :3120 / api :3222 → 报告是 web :3100 / api :3202\n 「同上验收库与 Redis」 → UI 用的是 enterprise_platform_ui_acceptance,\n 与上一行 runtime 那轮的 enterprise_platform_acceptance_20260918\n 不是同一个库;Redis 逻辑库(:56380 db7)才是相同的\n\n只换 SHA 会把红变绿却留着后两句假话,故三处一并订正,并把「不是同一个库」写明——\n这一行紧跟在 runtime 条目之后,「同上」原本就容易被读成同一套基座。\n\n顺带记下门禁的覆盖边界:freshness-sha-* 只断言「动态区是否以声明形式写出报告当前的\nSHA」,同一条目里的端口、库名、用例描述都不在它的判据内,可以静默漂移——本次两处正是\n这样漂的。这不是缺陷而是取舍(把整行结构化对账会把门禁变成文档格式检查器),但读的人\n要知道绿不代表整行都对。\n\n核验:pnpm --dir runtime check 现 exit 0、16 项全过(本会话首次整条绿);\ncheck:governance-docs 绿(AGENTS.md 符号链接一致)。本次跑链改脏的 runtime/reports\n已全部还原,报告另在干净检出重出。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:32:06-07:00"}],"HeadCommit":{"Sha1":"12093b843ef69d300370e5da16fcca3399c14d40","Message":"chore(reports): runtime 静态门禁链 18 份回绑 @ 8a621fd\n\n8a621fd 订正动态区 UI 条目后,docs-truth 的作用域(含 runtime/CLAUDE.md)随之过期;\nruntime check 是一条链、跑一次重出全部 16 项,故整批回绑而不是只挑一份——绑定一致比\n少改几个文件重要(同 b60cc18 的口径)。顺带清掉此前 error 级的 runtime-governance\n(绑 7fc7f02,作用域内 3 个文件已变)。\n\n在 HEAD 的干净 worktree(企业控制面/.worktrees/)装依赖 + prisma:generate 后跑\npnpm --dir runtime check:exit 0、16 项全过;只带回 provenance 绑 8a621fd 且\nworktreeDirty=false 的 18 份。\n\n刻意未带回 4 份:runtime-acceptance / ui-acceptance / conformance-differential 需真实\nDB 与浏览器,不由静态链产出,保持各自原绑定(08c3788 / 67e8193);framework-migration\n至今没有嵌套 provenance,已在 evidence-scopes 未登记账里具名。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:33:42-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/6687aecfababeb5c03b9fa56d306e8212e79e107...12093b843ef69d300370e5da16fcca3399c14d40","Len":2}...
|
1789778290
|
Edit
Delete
|
|
31215
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"6687aecfa {"Commits":[{"Sha1":"6687aecfababeb5c03b9fa56d306e8212e79e107","Message":"chore(reports): identity docs-truth 回绑 @ 1f3ff8c —— 含新增的两条 freshness 断言\n\n绑 1f3ff8c、worktreeDirty=false、docsTruthViolations=0。该门禁自身零依赖,故在 HEAD 的\n干净 worktree 里直接 node 即可跑出,不需要 install。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:24:55-07:00"},{"Sha1":"1f3ff8c8f7d688955cc786f83cc79cc21fd73cc2","Message":"feat(identity): check:docs-truth 补 freshness-sha 断言,证据处置出口 ② 落地\n\na48cbd6 登记的二选一出口,门禁 Owner 取 ②。identity 的报告此前两头都照不到:\nidentity/reports 不在 governance/check-evidence-freshness.mjs 的扫描面内(那边只扫\nreports/ 与 runtime/reports/),而 identity 自带的 check:docs-truth 有 0 条 freshness\n断言(runtime 版有 4 条)。当日实测它已真的漂了一次——动态区写 255 / 12 @ 85d538b,\n报告实际是 25ead3e(261 项)与 90cda56(UI 12)。\n\n口径移植自 runtime/scripts/check-docs-truth.mjs,保留其三条设计判断,逐条都有理由:\n\n 刻意不含静态级——governance.latest.json 每次 check 都重绑当时 HEAD,对它断言等价于\n 「每次提交都必须改文档」,提交报告后必红,那是会误杀的门禁不是有牙的门禁。\n\n 未接线的级别跳过而不是判红——恒红门禁不携带信息。本仓只接了 check:runtime 与 check:ui,\n 故只有这两条;deployment / production 两级在 identity 不存在,未列入。\n\n 必须是声明形式——上游实锤过一次自我假绿:条目为说明陈旧度写了提交区间 A..B,裸 includes\n 命中散文里的顺带提及,于是「文档声明 A、报告是 B」这个断言唯一要防的形态被整个绕过。\n\n与上游的唯一差异:本仓动态区写法是 clean commit `sha`(上游是 clean `sha`),两种都认——\n让断言认识本仓真实措辞,而不是为迁就工具去改文档。\n\n负向三项实做:① 把 runtime 条目 SHA 改回 85d538b → exit 1 并点名期望形式;② SHA 只出现在\n提交区间里(clean commit `85d538b`(区间 85d538b..25ead3e))→ 仍 exit 1,即上游那条陷阱\n在本仓也拦得住;③ UI 条目单独篡改 → exit 1。三项还原后均 exit 0。\n\nevidence-scopes 的处置说明同步更新:② 标记为已实施并记下负向证据;① 明示未做且暂不做\n(identity 按仓纪律 7 本就与根链分离,扩面会把 15 份一次性拖进根链账),现状是「identity\n的报告由 identity 自己的门禁守新鲜度」,边界清楚。本条仍随 PF-07 阶段 2 折入后作废。\n\n报告未随本提交:identity/reports/docs-truth.latest.json 我跑出来的那份绑脏树,已还原,\n按纪律在干净检出重出后另起 chore(reports)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:24:38-07:00"},{"Sha1":"a0145351979f7cf18de29b182000f791d6f5de05","Message":"chore(reports): release-manifest 与 port-conformance 回绑 @ e3b9d12 —— 离线可跑的那批收口\n\n排查 7 条过期证据后分三组:A 组离线可跑、B 组要重建镜像并重启容器、C 组要真实 DB / Redpanda 验收。\n本次收 A 组。sbom 那条已由并行会话 e3b9d12 先收(包清单一字未变,因为镜像还是 106 个提交前那个),\n故 A 组实收两条。\n\n- release-manifest:结论仍是 partial,缺 signature(缺少与本次 registry 镜像绑定且 cosign 验证成功的\n 签名,§3A D-2)。回绑的是「当前确实缺这一项」这个事实,不是把它跑绿。\n- port-conformance:passed。\n\n回绑做法同前几次:企业控制面/.worktrees/rebind-a 开 detached 干净检出(HEAD e3b9d12),软链主检出的\nnode_modules(写进本地 info/exclude,用后删除),build contracts / modules / clients 后逐条跑,\n只把这两份 report 拷回主检出、按 pathspec 单独提交——主检出里并行会话另有十余份报告 WIP,一份没碰。\n\n过程中一处返工:首次跑 port-conformance 失败于 `Command \"vitest\" not found`——runtime/test 是独立\nworkspace 包,我第一轮软链只覆盖了 modules / packages / apps / clients,漏了它。补上软链后 passed。\n失败那份报告没有拷回。\n\n结果:两份 provenance 均 gitSha=e3b9d12、worktreeDirty=false;e3b9d12..HEAD 未触及这两份的作用域输入,\n绑定仍成立。\n\n未收(已登记,需你决定):\n B 组 deployed-runtime —— BUILT_IMAGE_SOURCE_BEHIND,运行容器镜像源 05e3826,HEAD 已有 23 个运行时\n 输入变更(其中含本会话接线那批 fixture-evaluator 与夹具)。要 image:build 重建 + 重启 runtime 容器。\n C 组 runtime-acceptance / mainline-acceptance / revocation-sla —— 要真实 PostgreSQL + Redis + Redpanda\n 验收;本机 dev 底座 13 个容器在跑,但会真实读写隔离库。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:24:14-07:00"}],"HeadCommit":{"Sha1":"6687aecfababeb5c03b9fa56d306e8212e79e107","Message":"chore(reports): identity docs-truth 回绑 @ 1f3ff8c —— 含新增的两条 freshness 断言\n\n绑 1f3ff8c、worktreeDirty=false、docsTruthViolations=0。该门禁自身零依赖,故在 HEAD 的\n干净 worktree 里直接 node 即可跑出,不需要 install。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:24:55-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/e3b9d12525448038fd8d8ac3f3c1470552ce4ff7...6687aecfababeb5c03b9fa56d306e8212e79e107","Len":3}...
|
1789777575
|
Edit
Delete
|
|
31214
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"e3b9d1252 {"Commits":[{"Sha1":"e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","Message":"chore(reports): sbom 回绑——包清单一字未变,因为镜像还是 106 个提交前那个\n\nlockfile 模式扫 reports/image-digest.json 指向的镜像(sha256:c0869934…,本机 docker 里还在),\n268 个包,worktreeDirty=false。\n\n**这次回绑没有改变任何实质结论:** 触发过期的是 63ff31f 改的 runtime/pnpm-lock.yaml(把 clients\n三包的 devDeps pin 成 exact),而 SBOM 描述的是镜像里的物料——镜像绑的源提交 05e3826 距当前 HEAD\n106 个提交,那些改动根本还没进镜像。逐包比对确认:新旧两份的包清单完全一致,变的只有 SPDX 生成时间戳。\n\n诚实读法:**provenance.gitSha 说「我是在哪跑的」,sourceSha 说「我描述的是 05e3826 的镜像」——\n两者相距 106 个提交。** 作用域纳入 runtime/pnpm-lock.yaml,是为了在锁文件变动时提醒「SBOM 可能\n不再反映当前源码」;正确回应是**重建镜像**(需 BuildKit + Gitea token,不在本机这轮范围),\n而不是重跑一遍生成器。回绑只是让证据链不挂着一条无人处理的红,没有解决镜像落后本身。\n\ncoverage 仍是 partial:只含 /srv/runtime/apps/api-nestjs 的 Node 依赖,不含基础镜像的 Debian 包。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:22:33-07:00"},{"Sha1":"a48cbd69d9411a1c7bc85e0fb97520c4392d1e73","Message":"docs(证据): 补 identity/reports 的扫描面处置说明,并修掉它已造成的一处数字漂移\n\n全仓盲区复核查出的唯一真发现:check-evidence-freshness.mjs 只扫 reports/ 与\nruntime/reports/ 两个目录(写死在源码里),identity/reports/ 的 15 份报告既不在作用域\n登记里、也不在未登记账里——不是「未登记」,是压根没被看见。\n\nidentity 是 PF-07 阶段 1 的过渡工作区,按仓纪律 7 其三级门禁不进根 pnpm check 链,这层\n分离是有意的;但报告新鲜度的失察不是:那 15 份确实被当证据用(verify:candidate 从\nidentity/reports/baseline.json 读测试地板,docs/项目完整能力表.md E03 直接引用两份),\n而 identity 自带的 check:docs-truth 有 0 条 freshness-sha-* 断言(runtime 版有 4 条),\n于是「报告往前跑了、文档没跟上」这类漂移没有任何一道门禁能发现。\n\n它已经真的发生了。三处文档写 runtime 255 / UI 12 @ 85d538b,而报告实际绑:\nruntime-acceptance @ 25ead3e(2026-09-12,261 项 / 地板 255)、ui-acceptance @ 90cda56\n(2026-09-13,12 项)、dual-backend-behavior @ 25ead3e(差分 0)。三处按文档既有的\n「当前 + 历史」体例改正,85d538b 那轮移入历史;该次报告未记录的细节(新 UI 运行的\nWeb / API 端口)不补写,明示未记录。\n\n处置说明写进 undeclaredNote,含二选一出口(纳入扫描面逐份登记,或给 identity 的\ncheck-docs-truth 补 freshness-sha-* 断言)并注明 PF-07 阶段 2 后此条作废——但在那之前\n不得把「将来会消失」当作现在不管的理由。归门禁 Owner 裁。\n\n核验:check:evidence 未登记账仍 10 份 0 份无说明;identity check:governance-docs 与\ncheck:docs-truth 均绿;工作区一致性 L4 / L10 / L13 均 0。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:20:16-07:00"}],"HeadCommit":{"Sha1":"e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","Message":"chore(reports): sbom 回绑——包清单一字未变,因为镜像还是 106 个提交前那个\n\nlockfile 模式扫 reports/image-digest.json 指向的镜像(sha256:c0869934…,本机 docker 里还在),\n268 个包,worktreeDirty=false。\n\n**这次回绑没有改变任何实质结论:** 触发过期的是 63ff31f 改的 runtime/pnpm-lock.yaml(把 clients\n三包的 devDeps pin 成 exact),而 SBOM 描述的是镜像里的物料——镜像绑的源提交 05e3826 距当前 HEAD\n106 个提交,那些改动根本还没进镜像。逐包比对确认:新旧两份的包清单完全一致,变的只有 SPDX 生成时间戳。\n\n诚实读法:**provenance.gitSha 说「我是在哪跑的」,sourceSha 说「我描述的是 05e3826 的镜像」——\n两者相距 106 个提交。** 作用域纳入 runtime/pnpm-lock.yaml,是为了在锁文件变动时提醒「SBOM 可能\n不再反映当前源码」;正确回应是**重建镜像**(需 BuildKit + Gitea token,不在本机这轮范围),\n而不是重跑一遍生成器。回绑只是让证据链不挂着一条无人处理的红,没有解决镜像落后本身。\n\ncoverage 仍是 partial:只含 /srv/runtime/apps/api-nestjs 的 Node 依赖,不含基础镜像的 Debian 包。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:22:33-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/d7d9fe5adc753a199dba41ec4be184d3db5053c4...e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","Len":2}...
|
1789777366
|
Edit
Delete
|
|
31213
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"d7d9fe5ad {"Commits":[{"Sha1":"d7d9fe5adc753a199dba41ec4be184d3db5053c4","Message":"chore(reports): 工作台两份快照回绑 @ a157074\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,两份均绑 a157074 /\nworktreeDirty=false。两份由同一脚本(build-workbench-snapshots.mjs)产出,rebind 登记要求\n一起带回——分开提交会让它们绑不同提交,「同一次快照」这个前提就没了。\n\nops-snapshot 此前绑 73e36fd 过期,触发是并行会话的 21d7c1a 改了 docs/runbook.md\n(该报告的作用域含它)。回绑前先还原了 reports/evidence-freshness.latest.json——\n那份是本会话跑 pnpm check 时就地覆写的脏树产物(绑 5116dc5、dirty=true),\n它落在 ops-snapshot 的作用域里,不还原 rebind 会因「作用域内有未提交输入」拒绝。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:18:31-07:00"}],"HeadCommit":{"Sha1":"d7d9fe5adc753a199dba41ec4be184d3db5053c4","Message":"chore(reports): 工作台两份快照回绑 @ a157074\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,两份均绑 a157074 /\nworktreeDirty=false。两份由同一脚本(build-workbench-snapshots.mjs)产出,rebind 登记要求\n一起带回——分开提交会让它们绑不同提交,「同一次快照」这个前提就没了。\n\nops-snapshot 此前绑 73e36fd 过期,触发是并行会话的 21d7c1a 改了 docs/runbook.md\n(该报告的作用域含它)。回绑前先还原了 reports/evidence-freshness.latest.json——\n那份是本会话跑 pnpm check 时就地覆写的脏树产物(绑 5116dc5、dirty=true),\n它落在 ops-snapshot 的作用域里,不还原 rebind 会因「作用域内有未提交输入」拒绝。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:18:31-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/a15707432a286d35400876ba0420d6953cdee0fa...d7d9fe5adc753a199dba41ec4be184d3db5053c4","Len":1}...
|
1789777125
|
Edit
Delete
|
|
31212
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"a15707432 {"Commits":[{"Sha1":"a15707432a286d35400876ba0420d6953cdee0fa","Message":"docs(提案): 补裁决结果——Owner 取方案 B,已实施 @ ab28a95 / 83a5542\n\n提案正文 §1—§6 保留提出时原貌不回改,结果另起 §7;抬头改为「已裁定并实施完毕」,\n免得它腐烂成一份看起来还未决的提案。§7 另记一处提案里没写、实施时才发现的证据污染:\n显式 --suite 写仓级报告等于拿合成套件的结论冒充全仓结论,现只有全量扫描才产出。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:13:23-07:00"},{"Sha1":"a81cb95d81f556b81cfd37184dda2ee9e6ee816e","Message":"chore(reports): check:fixtures 回绑 @ ab28a95 —— 补上 10 处接线那一批欠的回绑\n\nreports/fixtures.latest.json 此前绑在 62c9d95(17 套件 468 例),check:evidence 报 EVIDENCE_STALE:\n作用域内 18 个文件已变更。增量来自本会话接线那一批六条提交——475704b(跨域流程 refresh)、\na2a86a7(scope)、f28f8f9(credential)、fe96fe6(ai-gateway)、68116db(fact)、71a04df(audit\n+ permission 残留)。每轮都写了「本次不回绑」(工作树有并行会话 WIP,拿不到 worktreeDirty=false),\n后续没人补,成了欠账。\n\n回绑做法同上一次:在 企业控制面/.worktrees/rebind-fixtures-2 开 detached 干净检出(HEAD ab28a95),\n把主检出的 node_modules 软链进去(软链不被 .gitignore 的 node_modules/ 目录规则匹配,故写进本地\ninfo/exclude,用后删除,不改仓内 .gitignore),build contracts 与七模块后跑 check:fixtures,\n确认 git status 为空再出报告,最后只把这一份 report 拷回主检出、按 pathspec 单独提交。\n\n只拷这一份:主检出里并行会话另有一批报告 WIP,以及他们刚加的 reports/fixture-coverage.latest.json\n(fixture-coverage 由诊断升格为门禁后的首份产物,已由他们自己在 83a5542 回绑),一个都没碰。\n\n结果:provenance gitSha=ab28a95、worktreeDirty=false,17 套件 701 例 0 失败 0 不可用(此前 468 例)。\n83a5542 只新增了 reports/fixture-coverage.latest.json,不在本报告作用域内,故 ab28a95 的绑定仍成立。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:13:20-07:00"},{"Sha1":"4ead62835b2d39b84f434f333175e42d45885486","Message":"chore(reports): check:gate-flow 回绑 @ 83a5542\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,绑 83a5542 / worktreeDirty=false。\n\n此前工作区里那份是脏树产物(绑 1de65fb、dirty=true,是本会话跑 pnpm check 时就地覆写的),\n已还原后重跑。gate-flow 的作用域含根 package.json,1de65fb 之后它又被改过,所以绑定要跟到当前 HEAD。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:13:19-07:00"},{"Sha1":"83a554271fb7d176e403778575e45d1cd480aae9","Message":"chore(reports): check:fixture-coverage 首份回绑 @ ab28a95\n\n本门禁在 ab28a95 升格后的第一份仓级证据:15 个套件、未接线 0 处、夹具与单测都没有 0 条,\nstatus=passed;provenance 绑 ab28a95、worktreeDirty=false。\n\n主工作区常驻并行会话在途文件、拿不到干净树,按偏差 #34-A 的路径在 HEAD 开 worktree\n(落在 企业控制面/.worktrees/)装依赖、构建 dist 后跑门禁再带回。本门禁依赖 runtime 七模块\n与 contracts 的 dist,故与 check:fixtures 同属 reports:rebind 工具拒绝的那一类,手工补上\ninstall 与 build 两步。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:12:44-07:00"},{"Sha1":"ab28a95de59f5253872b51b3d03bb8f7a4c6598c","Message":"feat(governance): fixture-coverage 由诊断工具升格为门禁并串进 check 链(Owner 裁方案 B)\n\n按 docs/夹具覆盖度探针接入提案-2026-09-18.md,门禁 Owner 裁定方案 B。提案 §4.2 的三条\n实测约束逐条落地,其中第一条是升格的前提:\n\n① 空跑即红。此前在干净检出里不构建直接跑,15 个套件全部「(未构建,跳过)」,而 --json\n 的 nowhereTotal / wiringTotal 双双为 0、退出码 0——人读的输出诚实,机器读的那份假绿,\n naive 接进 CI 就是一道永远绿的门禁。现照 check-fixtures.mjs 的既有语义:未构建的套件\n 计入 unavailable,默认失败关闭;--allow-unavailable 只降级「部分不可用」,不放行\n 「一个都跑不了」。\n\n② 只阻断 wiringTotal(未接线判定面)。它单调,适合做阻断项。\n\n③ nowhereTotal 只记不拦。它在改进过程中非单调(permission 实测 0 → 40 → 0:接线让新面\n 第一次被走到,钉完才回零),拿它阻断会拦住正在改进覆盖的那条提交本身。\n\n另修一处会污染证据的设计:显式 --suite 是定向排查与单元测试的用法,让它写\nreports/fixture-coverage.latest.json 等于拿合成套件的结论冒充全仓结论(本仓 pnpm test\n曾因此覆盖真实报告)。现只有全量扫描才产出仓级报告。\n\n接线位置紧跟 check:fixtures,复用它已建好的 dist,增量 1.4 秒;两份 CI 的 static job 跑的\n就是根 pnpm check,故无需改工作流。evidence-scopes 登记一条(error 级,作用域 = 套件清单 +\n探针 + 两侧 evaluator + 夹具用例文件)。check:gate-flow 因其已在链内不再需要具名登记。\n\n负向实做四项,全部转为回归用例(governance 测试 366 → 370):空跑 exit 1、\n--allow-unavailable 仍不放行空跑、未接线 exit 1、全接线 exit 0;另有一项手工实做——\n把 dist 里的 planner.refresh( 改成等价的 planner[\"refresh\"]((运行时行为不变,只是正则\n不再匹配),门禁精确报出 LocalAuditAppendAdmissionPlanner.refresh() 并 exit 1,还原后 exit 0。\n\n根链跑到本门禁为 passed(15 套件 / 未接线 0 / 都没有 0)。链上唯一的红是 check:docs-truth,\n与本轮无关:c4ec6f6 把 ui-acceptance 重绑到 67e8193 却没回灌 runtime/CLAUDE.md 动态区,\n已在 HEAD 干净检出复现。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:12:04-07:00"}],"HeadCommit":{"Sha1":"a15707432a286d35400876ba0420d6953cdee0fa","Message":"docs(提案): 补裁决结果——Owner 取方案 B,已实施 @ ab28a95 / 83a5542\n\n提案正文 §1—§6 保留提出时原貌不回改,结果另起 §7;抬头改为「已裁定并实施完毕」,\n免得它腐烂成一份看起来还未决的提案。§7 另记一处提案里没写、实施时才发现的证据污染:\n显式 --suite 写仓级报告等于拿合成套件的结论冒充全仓结论,现只有全量扫描才产出。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:13:23-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/1de65fbbf4f2ae73c374662b9e342934b925556b...a15707432a286d35400876ba0420d6953cdee0fa","Len":5}...
|
1789776809
|
Edit
Delete
|
|
31211
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"1de65fbbf {"Commits":[{"Sha1":"1de65fbbf4f2ae73c374662b9e342934b925556b","Message":"feat(治理): 删除 G-12 本地旁路开关——在计费尚未恢复时删,此后发布只有 CI 一条路\n\nG-12 开头把这条通道登记为「临时设施」,约定「计费恢复、CI 发布链可用后应删除」。\n实际走向是它被用了**五趟**(rc.2 / rc.3 / rc.4 / rc.5 / rc.6),成了常态通道。\n\n**在计费尚未恢复时就删,是有意的。** 按原约定等计费恢复再删,等于把退场时机交给一件谁也不知道\n什么时候发生的事;而每多走一趟,「顺手再走一次」的门槛就低一分。删除当天实测:GitHub Actions\n最新 run 35404565689(2026-09-18T23:09,main)仍 failure,job 形态仍是计费停摆的典型\n(两个 failure + 其余 skipped),GitHub 镜像落后 46 条。\n\n改动:publish-rc.mjs 删去 localBypass 分支与 PLATFORM_RELEASE_BYPASS_CI_EVIDENCE 判读,\n守门回到 if (!dir || process.env.GITHUB_ACTIONS !== 'true')。\nprepare-package-release.mjs 的七道 require 未动,一条也没放宽。\n\n验证(退出码直取、不经管道):非 CI 环境退出码 1;**带已废弃开关退出码同样是 1**,\n脚本内对该变量的引用数为 0。\n\n**直接后果是有意接受的:CI 发布链不可用期间发不了任何 RC**,想发就得先去修 Billing。\n沉没成本一并记清楚:contracts / governance 的 rc.0—rc.6 七个版本永远不会有阶段门证据——\npublish-rc.mjs 拒绝以不同字节覆盖已发布版本,而 CI 版本必然含不同的 provenance.json,\n这七个版本号无法被 CI 重发。\n\nG-12 追加「关闭记录」一节(本文自己要求的),前五节留在原处不动:它们是这条通道存在过、\n以及它如何从「临时」变成「常态」的完整账。CLAUDE.md 的 contracts 条目同步。\n要重新启用须经裁决并在 G-12 追加记录,不要直接把那段代码改回去。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:08:52-07:00"}],"HeadCommit":{"Sha1":"1de65fbbf4f2ae73c374662b9e342934b925556b","Message":"feat(治理): 删除 G-12 本地旁路开关——在计费尚未恢复时删,此后发布只有 CI 一条路\n\nG-12 开头把这条通道登记为「临时设施」,约定「计费恢复、CI 发布链可用后应删除」。\n实际走向是它被用了**五趟**(rc.2 / rc.3 / rc.4 / rc.5 / rc.6),成了常态通道。\n\n**在计费尚未恢复时就删,是有意的。** 按原约定等计费恢复再删,等于把退场时机交给一件谁也不知道\n什么时候发生的事;而每多走一趟,「顺手再走一次」的门槛就低一分。删除当天实测:GitHub Actions\n最新 run 35404565689(2026-09-18T23:09,main)仍 failure,job 形态仍是计费停摆的典型\n(两个 failure + 其余 skipped),GitHub 镜像落后 46 条。\n\n改动:publish-rc.mjs 删去 localBypass 分支与 PLATFORM_RELEASE_BYPASS_CI_EVIDENCE 判读,\n守门回到 if (!dir || process.env.GITHUB_ACTIONS !== 'true')。\nprepare-package-release.mjs 的七道 require 未动,一条也没放宽。\n\n验证(退出码直取、不经管道):非 CI 环境退出码 1;**带已废弃开关退出码同样是 1**,\n脚本内对该变量的引用数为 0。\n\n**直接后果是有意接受的:CI 发布链不可用期间发不了任何 RC**,想发就得先去修 Billing。\n沉没成本一并记清楚:contracts / governance 的 rc.0—rc.6 七个版本永远不会有阶段门证据——\npublish-rc.mjs 拒绝以不同字节覆盖已发布版本,而 CI 版本必然含不同的 provenance.json,\n这七个版本号无法被 CI 重发。\n\nG-12 追加「关闭记录」一节(本文自己要求的),前五节留在原处不动:它们是这条通道存在过、\n以及它如何从「临时」变成「常态」的完整账。CLAUDE.md 的 contracts 条目同步。\n要重新启用须经裁决并在 G-12 追加记录,不要直接把那段代码改回去。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:08:52-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/aac7c6046805e0336f73206b88fdd993afc991b9...1de65fbbf4f2ae73c374662b9e342934b925556b","Len":1}...
|
1789776552
|
Edit
Delete
|
|
31210
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"aac7c6046 {"Commits":[{"Sha1":"aac7c6046805e0336f73206b88fdd993afc991b9","Message":"docs(提案): fixture-coverage 探针是否接进门禁流——请门禁 Owner 裁三件事\n\n不是裁决,未实施任何接线。提案的核心事实是一条结构性盲区:check:gate-flow 的扫描面是\n根 package.json 的 scripts,而这个探针根本不是一个 script——于是它对那道「专门用来抓\n门禁的失败信号没人看」的门禁结构性不可见,既不在统一流内也不在任何 CI 链里。\n\n价值证据是今天一天的实况:仅靠手动敲它,报出六个模块 10 处判定面「评估器没接线」\n(含 393 行、734 行两整支规则),驱动 permission 夹具 11 → 68、audit 27 → 82,并暴露出\n「按字段存在与否判放行」这一 bug 类。这些对当时在跑的每一道门禁都不可见——check:fixtures\n只能证明已登记的用例都对,证明不了该登记的都登记了。\n\n三个必须先解决的设计问题均已实测,其中第一条最要命:在干净检出里不构建直接跑,15 个\n套件全部跳过,而 --json 的两个总数双双为 0、退出码 0——naive 接进 CI 就是一道永远绿的\n门禁。另两条是陈旧 dist 会假红(本会话被 fact 误报咬过一次),以及 nowhereTotal 在改进\n过程中非单调(permission 实测 0 → 40 → 0),对它上棘轮会阻断正在改进覆盖的提交本身。\n\n推荐紧跟 check:fixtures 之后接(复用其构建,增量 1.4 秒)、空跑失败关闭、只对\nwiringTotal 上棘轮;若认为改造暂不值当,至少给它一条带复核期的登记。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:07:21-07:00"}],"HeadCommit":{"Sha1":"aac7c6046805e0336f73206b88fdd993afc991b9","Message":"docs(提案): fixture-coverage 探针是否接进门禁流——请门禁 Owner 裁三件事\n\n不是裁决,未实施任何接线。提案的核心事实是一条结构性盲区:check:gate-flow 的扫描面是\n根 package.json 的 scripts,而这个探针根本不是一个 script——于是它对那道「专门用来抓\n门禁的失败信号没人看」的门禁结构性不可见,既不在统一流内也不在任何 CI 链里。\n\n价值证据是今天一天的实况:仅靠手动敲它,报出六个模块 10 处判定面「评估器没接线」\n(含 393 行、734 行两整支规则),驱动 permission 夹具 11 → 68、audit 27 → 82,并暴露出\n「按字段存在与否判放行」这一 bug 类。这些对当时在跑的每一道门禁都不可见——check:fixtures\n只能证明已登记的用例都对,证明不了该登记的都登记了。\n\n三个必须先解决的设计问题均已实测,其中第一条最要命:在干净检出里不构建直接跑,15 个\n套件全部跳过,而 --json 的两个总数双双为 0、退出码 0——naive 接进 CI 就是一道永远绿的\n门禁。另两条是陈旧 dist 会假红(本会话被 fact 误报咬过一次),以及 nowhereTotal 在改进\n过程中非单调(permission 实测 0 → 40 → 0),对它上棘轮会阻断正在改进覆盖的提交本身。\n\n推荐紧跟 check:fixtures 之后接(复用其构建,增量 1.4 秒)、空跑失败关闭、只对\nwiringTotal 上棘轮;若认为改造暂不值当,至少给它一条带复核期的登记。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:07:21-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/64bc6f5489ead3c65b23869f5e8866202e60b855...aac7c6046805e0336f73206b88fdd993afc991b9","Len":1}...
|
1789776505
|
Edit
Delete
|
|
31209
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"64bc6f548 {"Commits":[{"Sha1":"64bc6f5489ead3c65b23869f5e8866202e60b855","Message":"fix(modules): audit 追加准入 plan() 补请求体检——兜底 deny-all 此前也抛\n\n71a04df 把本域接进了门禁(10 处未接线全部收口),但没动判定本身。实测 dist:\nplan(undefined) 在 request.auditEventId 上抛 TypeError,createRuntimeAuditAppendAdmissionPlanner()\n的 bundled deny-all 走同一条路——\"什么都不放行\"的最后一道在畸形入参下抛异常,等于没有兜底。\n请求来自 JSON(夹具、Owner 写入口载荷),声明类型只约束调用方。\n\n本域其余部分改前就已失败关闭,一行未动:plan({}) → REJECT、details 非对象 → REJECT、\nchanges 非数组 → REJECT、refresh(undefined) → applied:false、快照 validated 非真在 create 期抛、\ndetails 带 password → AUDIT_DETAIL_FORBIDDEN 且回 forbiddenDetails、outcome 大写 → REJECT。\n\n补 AUDIT_APPEND_REQUEST_INVALID 一条稳定原因码并钉进夹具(71a04df 的 81 例未覆盖它——\n该原因码此前不存在)。夹具 81 → 82 例(正 11 / 反 71)0 失败;模块单测 136 例;\n负向实做:把该例声明原因改成不会产生的串,门禁 exit 1 并点名,还原后 exit 0。\n覆盖度探针两档归零(未接线 0 处、夹具与单测都没有 0 条)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:03:47-07:00"},{"Sha1":"71a04df0f09c8ff265e6f87c0f9016b61f84b4eb","Message":"test(runtime): audit 追加准入接进门禁,10 处未接线全部收口——三档归零,17 套件 706 例\n\n最后一处:LocalAuditAppendAdmissionPlanner(734 行、本仓最大的一支 planner、三个公开方法)整支未接线。\n既有四条规则走的是事件预检与提交协议;追加准入——服务与动作登记、环境 allowlist、结果与理由码\nallowlist、details / changes 白名单与上限、权限与 Scope 决策引用、时钟偏移与事件时效、快照热更——\n一条都不在门禁上。补 append-plan / append-refresh 两条规则,判定按 kind(BLOCKED 携带 blockers)。\n接上后新暴露 41 条,逐条钉完回到 0。夹具 27 → 81 例(正 11 / 反 70)。\n\n顺带补掉 permission 的 2 条残留「仅单测」(ACTOR_CREDENTIAL_MISMATCH / TENANT_ID_INVALID)——\n那个模块的三支判定由并行会话 2822c4d 接线,这两条是接线后新暴露、尚未钉住的。夹具 68 → 70 例。\n\n至此 CLAUDE.md 登记的 10 处未接线全部收口,接线顺序与新暴露的原因码数:\n 跨域流程 refresh +4 / scope 整支 +15 / credential 整支 +6 / ai-gateway 路由与 planAiRoute +7 /\n fact 导出准入 +34 / permission 三支(并行会话,残留 2 条本次补)/ audit 追加准入 +41\n合计 109 条原因码此前任何入口都走不到——这正是「读数为 0 不等于收口」的量级。\nCLAUDE.md 同段已从「均未处理」改为已收口,并留下这份接线顺序与数字。\n\n证据:pnpm check:fixtures 17 套件 706 例 0 失败 0 不可用(此前 468 例);\nfixture-coverage 三档(都没有 / 仅单测 / 未接线)15 个套件全为 0;\nmodule-audit test 135/135、module-permission test 110/110、两模块 typecheck 绿;\n工作区一致性门禁只剩既有的 L9 compose project 撞名。\n规则源码一行未改——七次接线动的都只是评估器与夹具。本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:03:02-07:00"},{"Sha1":"68116db133192fb66e0a6f84ee7b34cac74c9667","Message":"test(runtime): fact 的生产侧导出准入不在门禁上——补 export-plan / export-refresh,10 处的第 6 处\n\n结构比对报出 LocalFactExportAdmissionPlanner(549 行、三个公开方法)整支未接线:本模块此前只有\ndelivery 一条规则,管的是消费侧分类(重复 / 乱序 / 缺口 / 毒消息);生产侧的导出准入——事实登记、\n生产者应用与主体、Schema 摘要与兼容性、实体前缀、目录版本水位、双时间顺序、快照热更——一条都不在\n门禁上。判定逻辑一行未改,判定按 kind(BLOCKED 携带 blockers 而非 reasons)。\n\n接上后新暴露 33 条「夹具与单测都没有」+ 1 条「仅单测」,是本批到目前为止最多的一次——因为这支\nplanner 的请求体检面最宽(26 个字段)。逐条钉完回到 0。\n\n覆盖:夹具 10 → 56 例(正 5 / 反 51),规则 1 → 3;三档均为 0。新钉住的包括\nFACT_SCHEMA_NOT_REGISTERED / FACT_PRODUCER_APP_MISMATCH / FACT_PRODUCER_PRINCIPAL_NOT_REGISTERED /\nFACT_SCHEMA_DIGEST_MISMATCH / FACT_ENTITY_ID_PREFIX_MISMATCH / FACT_CATALOG_VERSION_MISMATCH /\nRECORDED_AT_BEFORE_EFFECTIVE_AT——\"谁有资格往事实流里写\"这一整面此前门禁上一条没有。\n\n工具化:这轮把「按探针给出的触发路径逐条生成用例并用真实产出回填」写成了一次性脚本跑(34 例),\n比手写快得多,也避免了我前几轮那种\"挑错底例\"的手误;每例生成后仍逐条核了\"确实拒绝\"。\n\n证据:pnpm --dir runtime --filter @juhai/module-fact test 94/94、typecheck 绿、\n该套件夹具 56/56 失败 0、fixture-coverage 三档全 0。本次不回绑任何 reports/。\n\n进度:10 处已收 6 处。余 4 处在 permission 3 / audit 1。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:01:01-07:00"}],"HeadCommit":{"Sha1":"64bc6f5489ead3c65b23869f5e8866202e60b855","Message":"fix(modules): audit 追加准入 plan() 补请求体检——兜底 deny-all 此前也抛\n\n71a04df 把本域接进了门禁(10 处未接线全部收口),但没动判定本身。实测 dist:\nplan(undefined) 在 request.auditEventId 上抛 TypeError,createRuntimeAuditAppendAdmissionPlanner()\n的 bundled deny-all 走同一条路——\"什么都不放行\"的最后一道在畸形入参下抛异常,等于没有兜底。\n请求来自 JSON(夹具、Owner 写入口载荷),声明类型只约束调用方。\n\n本域其余部分改前就已失败关闭,一行未动:plan({}) → REJECT、details 非对象 → REJECT、\nchanges 非数组 → REJECT、refresh(undefined) → applied:false、快照 validated 非真在 create 期抛、\ndetails 带 password → AUDIT_DETAIL_FORBIDDEN 且回 forbiddenDetails、outcome 大写 → REJECT。\n\n补 AUDIT_APPEND_REQUEST_INVALID 一条稳定原因码并钉进夹具(71a04df 的 81 例未覆盖它——\n该原因码此前不存在)。夹具 81 → 82 例(正 11 / 反 71)0 失败;模块单测 136 例;\n负向实做:把该例声明原因改成不会产生的串,门禁 exit 1 并点名,还原后 exit 0。\n覆盖度探针两档归零(未接线 0 处、夹具与单测都没有 0 条)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:03:47-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/03af35c77d7373f504875531e22ec6fb8e078898...64bc6f5489ead3c65b23869f5e8866202e60b855","Len":3}...
|
1789776378
|
Edit
Delete
|
|
31208
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"03af35c77 {"Commits":[{"Sha1":"03af35c77d7373f504875531e22ec6fb8e078898","Message":"docs(发布): rc.6 产物行补 total files 与 shasum——37→39 是「两个文件进包」最直接的证据\n\n原记录只写了包大小(96.9→101.3 kB)。发布输出里有更精确的数字:governance 的 total files\n由 rc.5 的 37 变为 39,多出来的正是 check-fact-pii.mjs(8.6 kB) 与 fact-pii-rules.json(1.8 kB);\nbin/cli.mjs 3.9→4.0 kB 是注册子命令那行。三包 shasum 一并记入,便于事后核验。\n\n记录与发布输出已逐项核对一致(三包大小、文件数、包内容)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:00:41-07:00"}],"HeadCommit":{"Sha1":"03af35c77d7373f504875531e22ec6fb8e078898","Message":"docs(发布): rc.6 产物行补 total files 与 shasum——37→39 是「两个文件进包」最直接的证据\n\n原记录只写了包大小(96.9→101.3 kB)。发布输出里有更精确的数字:governance 的 total files\n由 rc.5 的 37 变为 39,多出来的正是 check-fact-pii.mjs(8.6 kB) 与 fact-pii-rules.json(1.8 kB);\nbin/cli.mjs 3.9→4.0 kB 是注册子命令那行。三包 shasum 一并记入,便于事后核验。\n\n记录与发布输出已逐项核对一致(三包大小、文件数、包内容)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:00:41-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/db1b4721f85189353d42e1b67586d66ba6041c88...03af35c77d7373f504875531e22ec6fb8e078898","Len":1}...
|
1789776044
|
Edit
Delete
|
|
31207
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"db1b4721f {"Commits":[{"Sha1":"db1b4721f85189353d42e1b67586d66ba6041c88","Message":"docs(部署): 记录补 §17——D-15 只说对了一半,放开 scope 在信任锚未改前无效;拆出 D-16\n\n动手处理 D-15 前先验前提,结论是前提不成立:就算放开 platform:ops,真实 IdP 令牌照样进不来。\n\n实验:用 IdP 自己的 dev 签名私钥签一个 RS256 access token(形状与真实令牌一致),把三重守卫\n的输入全部凑齐——sub 用 §16 订正后的 users.subject、azp 用白名单里的 demo-console、scope 含\nplatform:ops——打 GET /api/platform/ops/definitions,得 401 INVALID_TOKEN。不是 403、不是 scope、\n不是白名单,是签名根本没被验过:容器 AUTH_JWKS_URI 为空,token-verifier.ts:98 因此走 hs256Secret\n分支,算法集只有 HS 一族。用 IdP 真私钥而不是随便造一把,是为了堵住「那只是密钥不对」的解释。\n\n再深一层:token-verifier.ts:47-50 只认单个 key source 与单个 issuer/audience,而 IdP 是每租户\n一个 issuer、每租户一份 JWKS。单租户 dev 下是配一个 URL 的事,多租户下不是——两边模型没对齐。\n\n本轮不擅自改,两处代价都不小:改 AUTH_JWKS_URI 等于换掉整个运行时的信任锚、所有 HS256 令牌\n当场失效,而这台容器是并行会话共用的常驻 dev 运行时;给客户端放 platform:ops 则因管理 API 没有\n改已有客户端的端点,要新建客户端并同步 PLATFORM_OPS_CLIENT_IDS,且本身是安全裁决。\n\nD-15 照此改写(§16.3 那行改为指向 §17.3,避免两处并存),新拆 D-16 记信任锚与模型不匹配。\n在 D-16 未裁之前,单独放开 scope 是无效功。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:00:37-07:00"}],"HeadCommit":{"Sha1":"db1b4721f85189353d42e1b67586d66ba6041c88","Message":"docs(部署): 记录补 §17——D-15 只说对了一半,放开 scope 在信任锚未改前无效;拆出 D-16\n\n动手处理 D-15 前先验前提,结论是前提不成立:就算放开 platform:ops,真实 IdP 令牌照样进不来。\n\n实验:用 IdP 自己的 dev 签名私钥签一个 RS256 access token(形状与真实令牌一致),把三重守卫\n的输入全部凑齐——sub 用 §16 订正后的 users.subject、azp 用白名单里的 demo-console、scope 含\nplatform:ops——打 GET /api/platform/ops/definitions,得 401 INVALID_TOKEN。不是 403、不是 scope、\n不是白名单,是签名根本没被验过:容器 AUTH_JWKS_URI 为空,token-verifier.ts:98 因此走 hs256Secret\n分支,算法集只有 HS 一族。用 IdP 真私钥而不是随便造一把,是为了堵住「那只是密钥不对」的解释。\n\n再深一层:token-verifier.ts:47-50 只认单个 key source 与单个 issuer/audience,而 IdP 是每租户\n一个 issuer、每租户一份 JWKS。单租户 dev 下是配一个 URL 的事,多租户下不是——两边模型没对齐。\n\n本轮不擅自改,两处代价都不小:改 AUTH_JWKS_URI 等于换掉整个运行时的信任锚、所有 HS256 令牌\n当场失效,而这台容器是并行会话共用的常驻 dev 运行时;给客户端放 platform:ops 则因管理 API 没有\n改已有客户端的端点,要新建客户端并同步 PLATFORM_OPS_CLIENT_IDS,且本身是安全裁决。\n\nD-15 照此改写(§16.3 那行改为指向 §17.3,避免两处并存),新拆 D-16 记信任锚与模型不匹配。\n在 D-16 未裁之前,单独放开 scope 是无效功。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T17:00:37-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/fe35d013ca78dcfcec4b634a312cd0266527fe2b...db1b4721f85189353d42e1b67586d66ba6041c88","Len":1}...
|
1789776041
|
Edit
Delete
|
|
31206
|
5
|
9
|
5
|
116
|
0
|
0
|
refs/tags/packages-v1.0.0-rc.6
|
0
|
{"Commits":null,"HeadCommit":{" {"Commits":null,"HeadCommit":{"Sha1":"7eadfb1a5af353077f1a32eef51389f4a6f7fbfa","Message":"chore(release): 三包推到 1.0.0-rc.6——check:fact-pii 这次真的随包出去\n\nrc.5 发的时候 check-fact-pii.mjs 还不在 governance 包的 files 里,消费者拿到的 rc.5 不含它。\neb275b1 把它与 fact-pii-rules.json 加进 files、在 CLI 注册 check:fact-pii 子命令,\n并补上了让它在消费者仓真跑得起来的两处(--dir 指定 Fact schema 目录、判据回落到包内自带)。\n这趟车就是为了把那些送出去。\n\n自 rc.5 源 cf05344 起的随车内容:\n governance 7 文件 / 2 提交(fact-pii 进包 + 消费者可用性)\n contracts 3 文件 / 1 提交\n runtime/clients/fact 0 文件 / 0 提交 —— **完全没有变化,纯跟车**(同 rc.5)\n\n通道:本地旁路(G-12 第五次)。2026-09-18 实测 GitHub Actions 仍停在 run 35404565689\n(failure,计费),没有新 run;GitHub 镜像落后 35 条。正道仍不可满足。\n\n按 CL-5 打 tag packages-v1.0.0-rc.6(连续第三趟)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:56:38-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/0000000000000000000000000000000000000000...7eadfb1a5af353077f1a32eef51389f4a6f7fbfa","Len":0}...
|
1789776004
|
Edit
Delete
|
|
31205
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"fe35d013c {"Commits":[{"Sha1":"fe35d013ca78dcfcec4b634a312cd0266527fe2b","Message":"docs(发布): 记录 rc.6 列车——fact-pii 这次真出去了,并记下五趟旁路的累积代价\n\nrc.6 三包 2026-09-18 发出,源 7eadfb1,tag packages-v1.0.0-rc.6(连续第三趟按 CL-5 打上)。\n动因是补 rc.5 的缺口:那时 check-fact-pii.mjs 还不在 governance 包的 files 里,消费者拿到的\nrc.5 不含它。governance 包从 96.9 kB 涨到 101.3 kB,涨的正是那两个文件。\n\n**这一趟的验证比前四趟硬。** 前几趟只能依赖 publish-rc.mjs 的 integrity 自校验;这次把\nRegistry 登记的 dist.integrity 与本地备料 tarball 的 sha512 逐包比对,三包全部一致——\n证明架上的就是会话备的那批料,中间没有被替换或重打包。\n\n顺带纠正一个前几趟被骗过的点:npm view \u003cpkg\u003e versions 在 Gitea 的 npm registry 上静默返回空,\n查具体版本(npm view \u003cpkg\u003e@\u003cversion\u003e dist.integrity)才有结果。此前以为「Registry 查不了」,\n是被这个 API 差异骗的,不是权限问题。\n\n**记下累积代价:** 旁路第五次使用后,contracts / governance 的 rc.0—rc.6 七个版本号已全部被\n本地包永久占用,永远不会有阶段门证据;计费恢复后 CI 只能从 rc.7 发起。开关当初登记为\n「临时设施」,五趟之后它显然已是常态通道——这不是它该有的角色。计费恢复时该做的是删掉\n这个分支并让 CI 发 rc.7,而不是让它继续顺手可用。这句话写进了 G-12,免得下一趟又顺手发第六次。\n\nCLAUDE.md 的 contracts 条目同步到 rc.6,并记下 check:fact-pii 自 rc.6 起随包。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:59:52-07:00"},{"Sha1":"fe96fe64bdb8753331280a2b3396c8237b08b9d3","Message":"test(runtime): ai-gateway 的选路本身不在门禁上——补 router-route / router-refresh / route-plan,10 处的第 4、5 处\n\n结构比对报出 LocalAiGovernanceRouter(316 行、三个公开方法)整支未接线、planAiRoute() 未接线。\n既有三条规则(action / route / egress)走的都是纯函数——动作治理、单条路由体检、外发分类判据——\n而选路本身(租户 allowlist、能力匹配、区域 / 安全层级 / 留存期、禁止静默回退、快照热更)\n与 planAiRoute 的串联(鉴权 → 外发分类 → 选路)一条都不在门禁上。判定逻辑一行未改。\n\n补三条规则,判定按 kind / outcome,不用 `\"reasons\" in`。\n\n接上后照例先变差,冒出 7 条「夹具与单测都没有」(EXPLICIT_FALLBACK_REQUIRED 与 refresh 侧六条\n策略字段守卫),逐条钉完回到 0。\n\n过程中一处预期被实测推翻:我按「删掉 allowFallback 就该拒」造 N21,实跑返回 []——主路由仍然匹配,\n删这个布尔位不构成拒绝。真要触发 EXPLICIT_FALLBACK_REQUIRED 得让快照里只剩 fallback 路由可选。\n按实现重造该例,没有反过来改实现。\n\n覆盖:夹具 16 → 35 例(正 8 / 反 27),规则 3 → 6;三档(都没有 / 仅单测 / 未接线)均为 0。\n新钉住的包括 NO_APPROVED_MODEL_ROUTE(租户越界 / 能力不符 / 无快照三条路径)、\nSENSITIVE_PROVIDER_NOT_APPROVED、EGRESS_CLASS_REQUIRES_SENSITIVE_FLAG、PERMISSION_DENIED:\u003ccode\u003e\n——AI 出站的准入闸门此前在门禁上只有纯函数那一半。\n\n证据:pnpm --dir runtime --filter @juhai/module-ai-gateway test 53/53、typecheck 绿、\n该套件夹具 35/35 失败 0、fixture-coverage 三档全 0。本次不回绑任何 reports/。\n\n进度:10 处已收 5 处(跨域流程 refresh、scope、credential、ai-gateway 两处)。\n余 5 处在 permission 3 / audit 1 / fact 1。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:59:00-07:00"},{"Sha1":"2822c4d34a1b519fc87a21fe30b035028502d297","Message":"fix(modules): permission 三支判定接进夹具门禁,并修两处崩溃面——此前整支不在门禁上\n\n起因是 governance/fixture-coverage.mjs 的结构比对:六个运行时模块共 10 处判定面\n「评估器没接线」,permission 占 3 处(LocalPermissionDecisionPlanner、\nLocalEmploymentScopeInvalidationPlanner、evaluateCatalogAdmission)。\n\n先确认不是有意留白,三条证据:① 探针自述把「未接线」定义为「该面完全不在门禁上」,\n并在同日把契约包侧四次同形全部修掉;② 各模块夹具 description 确实声明过取舍,但都在\n另一个轴上(吊销即时性 / 配额熔断 / 查询越权,一律「属权威实现,DEC-xxx 后」),\n没有一条提到这些 planner;③ 决定性的一条——f7a0cbb 先迁入 planner,8a95879 才建夹具,\n建的时候这些文件就在同一目录里,而 8a95879 自述评估器「只调用迁入的纯规则」,\n按它自己的话这些面本就该在。\n\n实测先行,查出两处真缺陷(均已修):\n\n evaluateCatalogAdmission([null, \"x\"], …) 抛 TypeError——守了 routes 非数组,\n 没守条目非对象;目录来自快照 JSON。\n\n LocalPermissionDecisionPlanner.plan(undefined) 抛,兜底的 deny-all 也抛。\n 注意光守 preflight 不够:plan() 在 preflight 之后仍直接解引用 request.actorType 等,\n 故两处都要守。preflightCataloguedPermissionDecision 的 catalog 非数组 / 条目非对象 /\n actions 非数组一并收口。\n\n三支 employment 的 plan 是本域最结实的一支,畸形入参改前就已 REJECT,未动其判定。\n\n接线五条规则(decision-plan / employment-invalidation / catalog-admission 加两个\nplanner 的 refresh),非放行出口一律按 kind 显式映射:本域 PermissionDecisionPlanResult\n的 BLOCKED 带的是 blockers,EmploymentScopeInvalidationResult 的 SKIP_DUPLICATE 与\nACKNOWLEDGE_STALE 连原因字段都没有——按 `\"reasons\" in r` 判会把它们全判成 ACCEPT\n(该形状已在契约包侧四个域各咬过一次)。\n\n按探针自述「补规则后覆盖度会先变差,把新暴露的原因码钉完再收工」执行:接线后\n「夹具与单测都没有」由 0 涨到 40,用探针 --json 的 trigger 机械生成钉住用例并逐条实跑\n确认可复现(38 条自动 + 2 条手工,其中 ASSIGNMENT_ID_MUST_CHANGE 的 trigger 提示不准,\n删字段实得 NEW_ASSIGNMENT_ID_INVALID,按语义改为新旧指派相同才复现)。\n\n核验:夹具 11 → 68 例(正 7 / 反 61)0 失败;模块单测 63 → 108 例;探针 permission 两档\n双双归零(未接线 3 → 0、都没有 40 → 0),全仓「都没有」合计 47 → 0、未接线 10 → 4;\n负向实做:把 SKIP_DUPLICATE 的声明原因改成不会产生的串,门禁 exit 1 并点名该例,还原后\nexit 0;门禁另自行抓到我一处声明写错(PERMISSION_ADMISSION_SNAPSHOT_VERSION_NOT_FORWARD\n实为 PERMISSION_ADMISSION_VERSION_NOT_FORWARD)。\n\nruntime 静态链 12 道绿、第 13 道 check:docs-truth 红,但与本轮无关:c4ec6f6 把\nui-acceptance 重绑到 67e8193 却没回灌 runtime/CLAUDE.md 动态区,已在 HEAD 干净检出复现。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:58:45-07:00"}],"HeadCommit":{"Sha1":"fe35d013ca78dcfcec4b634a312cd0266527fe2b","Message":"docs(发布): 记录 rc.6 列车——fact-pii 这次真出去了,并记下五趟旁路的累积代价\n\nrc.6 三包 2026-09-18 发出,源 7eadfb1,tag packages-v1.0.0-rc.6(连续第三趟按 CL-5 打上)。\n动因是补 rc.5 的缺口:那时 check-fact-pii.mjs 还不在 governance 包的 files 里,消费者拿到的\nrc.5 不含它。governance 包从 96.9 kB 涨到 101.3 kB,涨的正是那两个文件。\n\n**这一趟的验证比前四趟硬。** 前几趟只能依赖 publish-rc.mjs 的 integrity 自校验;这次把\nRegistry 登记的 dist.integrity 与本地备料 tarball 的 sha512 逐包比对,三包全部一致——\n证明架上的就是会话备的那批料,中间没有被替换或重打包。\n\n顺带纠正一个前几趟被骗过的点:npm view \u003cpkg\u003e versions 在 Gitea 的 npm registry 上静默返回空,\n查具体版本(npm view \u003cpkg\u003e@\u003cversion\u003e dist.integrity)才有结果。此前以为「Registry 查不了」,\n是被这个 API 差异骗的,不是权限问题。\n\n**记下累积代价:** 旁路第五次使用后,contracts / governance 的 rc.0—rc.6 七个版本号已全部被\n本地包永久占用,永远不会有阶段门证据;计费恢复后 CI 只能从 rc.7 发起。开关当初登记为\n「临时设施」,五趟之后它显然已是常态通道——这不是它该有的角色。计费恢复时该做的是删掉\n这个分支并让 CI 发 rc.7,而不是让它继续顺手可用。这句话写进了 G-12,免得下一趟又顺手发第六次。\n\nCLAUDE.md 的 contracts 条目同步到 rc.6,并记下 check:fact-pii 自 rc.6 起随包。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:59:52-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f...fe35d013ca78dcfcec4b634a312cd0266527fe2b","Len":3}...
|
1789776003
|
Edit
Delete
|
|
31204
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"21d7c1aaa {"Commits":[{"Sha1":"21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","Message":"docs(部署,runbook): 记录补 §16——D-13 从推断变成实测、订正并复验,另登记 D-15\n\nD-13 此前只是读代码推断(判定链对不上)。本轮先做成可证伪的实测:用 dev 的 HS256 密钥\n手工签发三个只差 sub 的 token 打 GET /api/platform/ops/definitions——\n\n sub = users.subject(IdP 令牌的实际形态) 订正前 403 OPS_FORBIDDEN → 订正后 200\n sub = users.id(白名单原值) 订正前 200 → 订正后 403\n 同上但不带 platform:ops(对照) 两次都是 403 OPS_SCOPE_REQUIRED\n\n第三行是对照组,证明守卫顺序是 scope 在前、白名单在后,前两行的差异确实出在白名单这一关。\nsub 的实际形态取自 §14 那次真实登录的令牌,不是猜的。\n\n订正落在仓外 .secrets(PLATFORM_OPS_ADMIN_SUBJECTS 由 users.id 改为 users.subject,\n并在键上方留三行注释说明判定链),force-recreate 重建 runtime 容器后复验,健康探针 200。\nD-13 闭环。\n\n同时订正一个我自己此前过于保守的判断:原以为「必须等 canonical 租户分支合并后与 D-4 一并验」,\n实际 D-4 挡的是执行那一步,定义面的读取不受影响,守卫这一层现在就能独立验证。\n\n新登记 D-15:当前没有任何 OIDC 客户端的 allowedScopes 含 platform:ops(三个客户端全是\nopenid profile [idp:manage]),真实 IdP 令牌因此卡在 scope 关——不是白名单、也不是 D-4。\n给客户端放这个 scope 等于把平台运维权发给浏览器里的公开客户端,属安全裁决,留 Owner。\n\nrunbook §2.1 的警告块同步更新:那处现已订正,并指向 §16 与 D-15。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:58:15-07:00"},{"Sha1":"f28f8f9935231e083402f5fa47269576a96eb38d","Message":"test(runtime): credential 的租约 planner 整支不在门禁上——补 lease-plan / lease-refresh,10 处未接线的第 3 处\n\n结构比对报出 LocalMachineCredentialLeasePlanner(308 行、三个公开方法)整支未接线:本模块此前只有\nlease-request 一条规则,走的是 preflight 纯规则;planner 的策略快照准入、主体登记、受众 / Scope\nallowlist、TTL 上限、授权版本水位与热更一条都不在门禁上。判定逻辑一行未改。\n\n判定按 kind:MachineCredentialLeaseResult 的 BLOCKED 携带 blockers 而非 reasons。\n\n接上规则后照例先变差:冒出 6 条「夹具与单测都没有」(归属三件套、授权版本、请求时钟,以及 refresh\n侧的版本 / 修订 / 主体策略),逐条钉完回到 0。\n\n覆盖:夹具 10 → 27 例(正 4 / 反 23),规则 1 → 3;三档(都没有 / 仅单测 / 未接线)均为 0。\n新钉住的策略面包括 AUDIENCE_NOT_ALLOWED / SCOPE_NOT_ALLOWED / TTL_OUT_OF_POLICY / STALE_AUTHORIZATION\n/ MACHINE_PRINCIPAL_NOT_REGISTERED / AI_DELEGATION_REQUIRED——凭据签发的准入闸门此前在门禁上一条没有。\n\n证据:pnpm --dir runtime --filter @juhai/module-credential test 46/46、该套件夹具 27/27 失败 0、\nfixture-coverage 三档全 0。本次不回绑任何 reports/。\n\n进度:10 处未接线已收 3 处(跨域流程 refresh、scope、credential)。余 7 处在 ai-gateway 2 /\npermission 3 / audit / fact 各 1。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:57:26-07:00"},{"Sha1":"7eadfb1a5af353077f1a32eef51389f4a6f7fbfa","Message":"chore(release): 三包推到 1.0.0-rc.6——check:fact-pii 这次真的随包出去\n\nrc.5 发的时候 check-fact-pii.mjs 还不在 governance 包的 files 里,消费者拿到的 rc.5 不含它。\neb275b1 把它与 fact-pii-rules.json 加进 files、在 CLI 注册 check:fact-pii 子命令,\n并补上了让它在消费者仓真跑得起来的两处(--dir 指定 Fact schema 目录、判据回落到包内自带)。\n这趟车就是为了把那些送出去。\n\n自 rc.5 源 cf05344 起的随车内容:\n governance 7 文件 / 2 提交(fact-pii 进包 + 消费者可用性)\n contracts 3 文件 / 1 提交\n runtime/clients/fact 0 文件 / 0 提交 —— **完全没有变化,纯跟车**(同 rc.5)\n\n通道:本地旁路(G-12 第五次)。2026-09-18 实测 GitHub Actions 仍停在 run 35404565689\n(failure,计费),没有新 run;GitHub 镜像落后 35 条。正道仍不可满足。\n\n按 CL-5 打 tag packages-v1.0.0-rc.6(连续第三趟)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:56:38-07:00"},{"Sha1":"a2a86a7161102dba3d3ef227b89545ea65612273","Message":"test(runtime): scope 的 410 行 planner 整支不在门禁上——补 plan / refresh 两条规则,10 处未接线的第 2 处\n\n结构比对报出 LocalScopeResolutionPlanner(三个公开方法)整支未接线:本模块此前只有 snapshot 一条规则,\nplanner 的请求体检、应用登记、目录版本、路由匹配与热更一条都不在门禁上。判定逻辑一行未改。\n\n判定按 kind 而不是 `\"reasons\" in`:ScopeResolutionPlanResult 的 BLOCKED 携带的是 blockers,\n按字段存在与否判会被当成放行——注册中心那次就是这么漏的,这里一开始就避开。\n\n接上规则后覆盖度先变差,同样是预期的:plan / refresh 两面第一次被变异探针走到,冒出 15 条\n「夹具与单测都没有」(十条请求字段守卫 + 路由未登记 + refresh 侧四条),逐条钉完回到 0。\n\n覆盖:夹具 8 → 35 例(正 4 / 反 31),规则 1 → 3;该套件三档(都没有 / 仅单测 / 未接线)均为 0。\n模块夹具与 test/negative/*.fixtures.test.ts 同源(it.each 直接遍历夹具文件),单测随夹具自动同步。\n\n证据:pnpm --dir runtime --filter @juhai/module-scope test 53/53、typecheck 绿、\n该套件夹具 35/35 失败 0、fixture-coverage 三档全 0。本次不回绑任何 reports/。\n\n进度:10 处未接线已收 2 处(跨域流程 refresh、scope)。余 8 处在 ai-gateway 2 / permission 3 /\naudit / credential / fact 各 1,planner 308—734 行,按模块逐个收。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:56:05-07:00"}],"HeadCommit":{"Sha1":"21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","Message":"docs(部署,runbook): 记录补 §16——D-13 从推断变成实测、订正并复验,另登记 D-15\n\nD-13 此前只是读代码推断(判定链对不上)。本轮先做成可证伪的实测:用 dev 的 HS256 密钥\n手工签发三个只差 sub 的 token 打 GET /api/platform/ops/definitions——\n\n sub = users.subject(IdP 令牌的实际形态) 订正前 403 OPS_FORBIDDEN → 订正后 200\n sub = users.id(白名单原值) 订正前 200 → 订正后 403\n 同上但不带 platform:ops(对照) 两次都是 403 OPS_SCOPE_REQUIRED\n\n第三行是对照组,证明守卫顺序是 scope 在前、白名单在后,前两行的差异确实出在白名单这一关。\nsub 的实际形态取自 §14 那次真实登录的令牌,不是猜的。\n\n订正落在仓外 .secrets(PLATFORM_OPS_ADMIN_SUBJECTS 由 users.id 改为 users.subject,\n并在键上方留三行注释说明判定链),force-recreate 重建 runtime 容器后复验,健康探针 200。\nD-13 闭环。\n\n同时订正一个我自己此前过于保守的判断:原以为「必须等 canonical 租户分支合并后与 D-4 一并验」,\n实际 D-4 挡的是执行那一步,定义面的读取不受影响,守卫这一层现在就能独立验证。\n\n新登记 D-15:当前没有任何 OIDC 客户端的 allowedScopes 含 platform:ops(三个客户端全是\nopenid profile [idp:manage]),真实 IdP 令牌因此卡在 scope 关——不是白名单、也不是 D-4。\n给客户端放这个 scope 等于把平台运维权发给浏览器里的公开客户端,属安全裁决,留 Owner。\n\nrunbook §2.1 的警告块同步更新:那处现已订正,并指向 §16 与 D-15。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:58:15-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/eb275b10c470d5db1907473c40e6c831d1e7a1c6...21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","Len":4}...
|
1789775899
|
Edit
Delete
|
|
31203
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"eb275b10c {"Commits":[{"Sha1":"eb275b10c470d5db1907473c40e6c831d1e7a1c6","Message":"feat(治理): check:fact-pii 进 @juhai/governance 包——并补上让它在消费者仓真能跑的两处\n\n把 check-fact-pii.mjs 与 fact-pii-rules.json 加进包的 files、在 bin/cli.mjs 注册\ncheck:fact-pii 子命令。但**只加 files 是个摆设**,装到消费者仓会是个永远扫到 0 个 Fact、\n永远 exit 0 的门禁——它原先硬编码扫 contracts/schemas/facts,还硬读仓内的\ngovernance/fact-pii-rules.json。两处都补了:\n\n --dir \u003c目录\u003e… 指定 Fact schema 目录(可重复),缺省仍是本仓那两处。消费者的 Fact\n 定义不在 contracts/schemas/facts,指不过去这道门禁就没有判据对象。\n 判据回落 仓内 governance/fact-pii-rules.json 优先,缺失则用包自带的那份。\n 消费者仓没有 governance/ 目录,硬读仓内路径会让门禁在他们那儿直接崩。\n 要收紧就在自己仓里放一份同名文件覆盖。\n\n一个 Fact 都没扫到时打警告而不是静默通过——多半是目录指错了,不是「真的没有 Fact」。\n报告里记下 scanDirs 与 rulesSource,事后能看出这次扫的是哪儿、判据是谁的。\n\n消费者场景端到端验过(临时目录,无 governance/、Fact 放在 domain/facts/):\n juhai-governance check:fact-pii --root \u003cdir\u003e --dir domain/facts\n → 抓到 buyer_phone、exit 1;报告 rulesSource=bundled、scanDirs=[\"domain/facts\"]\n → 不给 --dir 时明确警告「未找到任何 Fact schema」\n本仓行为不变:21 个 Fact / 116 字段 / 0 违规,rulesSource=repo。测试 8 → 10 例。\n\nREADME 两处同步(判据表 + check 链顺序)——它随包发布,说明必须与实现一致。\n\n**时间差要知道:rc.5 昨天刚发,这些进不了 rc.5。** 包里现在这道门禁的代码要等下一个 RC\n才出得去;在那之前消费者拿到的 @juhai/governance@1.0.0-rc.5 仍不含 fact-pii。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:54:59-07:00"},{"Sha1":"475704b56896c09a0408e1e95a87d9a9994b0667","Message":"test(contracts): 跨域流程接上 refresh——10 处未接线的第 1 处,也是我自己那轮留下的\n\ngovernance/fixture-coverage.mjs 加上结构比对后第一轮就报出 LocalWorkflowPlanner.refresh() 未接线:\nplanner 三个公开方法里只有 plan 有规则,「版本必须前进」「坏候选保留 last-known-good」两条纪律\n此前只有单测看着。这是我 13c7eb7 那轮留下的口子。\n\n顺带把 plan 的判据从 `\"reasons\" in r` 改为按 kind。今天 WorkflowPlannerResult 只有 PLAN / REJECT\n两支、行为逐字不变,但按字段存在与否判放行意味着将来加一个不带 reasons 的非放行出口就会被静默放过\n——注册中心的 BLOCKED 正是这么漏的。\n\n接上规则后覆盖度先变差,这是预期的:refresh 那一面第一次被变异探针走到,立刻冒出 4 条「夹具与单测\n都没有」(WORKFLOW_ID_REQUIRED / WORKFLOW_DOMAINS_REQUIRED / WORKFLOW_TENANTS_REQUIRED /\nWORKFLOW_REVISION_REQUIRED)与 1 条「仅单测」(WORKFLOW_VERSION_INVALID),逐条钉完回到 0。\n\n覆盖:夹具 18 → 28 例(正 3 / 反 25),规则数 3 → 4;该套件三档(都没有 / 仅单测 / 未接线)均为 0。\n判定逻辑一行未改,只动评估器与夹具。\n\n剩余 9 处未接线全在运行时模块侧(ai-gateway 2 / permission 3 / audit / credential / fact / scope 各 1),\n每个 planner 300—734 行、各自要造一份合法快照,按模块逐个收。\n\n证据:node --test contracts/test/*.test.mjs 408/408、该套件夹具 28/28 失败 0、fixture-coverage 三档全 0。\n负向实测:把 N20(通配租户那条)的声明改成 WORKFLOW_VERSION_NOT_FORWARD → 门禁 exit 1 并点名该例,\n还原后 exit 0。本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:54:50-07:00"}],"HeadCommit":{"Sha1":"eb275b10c470d5db1907473c40e6c831d1e7a1c6","Message":"feat(治理): check:fact-pii 进 @juhai/governance 包——并补上让它在消费者仓真能跑的两处\n\n把 check-fact-pii.mjs 与 fact-pii-rules.json 加进包的 files、在 bin/cli.mjs 注册\ncheck:fact-pii 子命令。但**只加 files 是个摆设**,装到消费者仓会是个永远扫到 0 个 Fact、\n永远 exit 0 的门禁——它原先硬编码扫 contracts/schemas/facts,还硬读仓内的\ngovernance/fact-pii-rules.json。两处都补了:\n\n --dir \u003c目录\u003e… 指定 Fact schema 目录(可重复),缺省仍是本仓那两处。消费者的 Fact\n 定义不在 contracts/schemas/facts,指不过去这道门禁就没有判据对象。\n 判据回落 仓内 governance/fact-pii-rules.json 优先,缺失则用包自带的那份。\n 消费者仓没有 governance/ 目录,硬读仓内路径会让门禁在他们那儿直接崩。\n 要收紧就在自己仓里放一份同名文件覆盖。\n\n一个 Fact 都没扫到时打警告而不是静默通过——多半是目录指错了,不是「真的没有 Fact」。\n报告里记下 scanDirs 与 rulesSource,事后能看出这次扫的是哪儿、判据是谁的。\n\n消费者场景端到端验过(临时目录,无 governance/、Fact 放在 domain/facts/):\n juhai-governance check:fact-pii --root \u003cdir\u003e --dir domain/facts\n → 抓到 buyer_phone、exit 1;报告 rulesSource=bundled、scanDirs=[\"domain/facts\"]\n → 不给 --dir 时明确警告「未找到任何 Fact schema」\n本仓行为不变:21 个 Fact / 116 字段 / 0 违规,rulesSource=repo。测试 8 → 10 例。\n\nREADME 两处同步(判据表 + check 链顺序)——它随包发布,说明必须与实现一致。\n\n**时间差要知道:rc.5 昨天刚发,这些进不了 rc.5。** 包里现在这道门禁的代码要等下一个 RC\n才出得去;在那之前消费者拿到的 @juhai/governance@1.0.0-rc.5 仍不含 fact-pii。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:54:59-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/3baec4ad9f8c27a94f514af7e4e340c1c763b923...eb275b10c470d5db1907473c40e6c831d1e7a1c6","Len":2}...
|
1789775710
|
Edit
Delete
|
|
31202
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"3baec4ad9 {"Commits":[{"Sha1":"3baec4ad9f8c27a94f514af7e4e340c1c763b923","Message":"docs(部署): §15.4 改写 + 新增 §15.5——ui-acceptance 已真跑回来,D-14 闭环\n\n回绑提交 c4ec6f6:passed,nestjs/ws 5/5(地板 5),绑 67e8193 / worktreeDirty=false;\n67e8193..HEAD 之间作用域零变更,绑定对当前代码仍成立。\n\n同轮补两条环境教训:\n\n1. 隔离栈 enterprise-platform-ms23 那台 PG 的库又被清空了,验收库得重建。与 §9 末尾\n 「不能假定上一轮还在」同一条,这是第二次撞上——可以当常态而不是意外。\n2. §9 的三条前置少写了一条:临时检出只 install + prisma:generate 不够,必须再 pnpm build。\n 缺它时 api-nestjs 的 tsc 以 Cannot find module '@juhai/module-kit' / '@repo/telemetry' 失败,\n 是 workspace 包没构建,不是回归。该次失败停在构建阶段、未写报告,主工作区那份旧报告\n 全程没被覆盖——这正是在独立检出里跑的意义。\n\n§15.4 标题与结尾同步订正:原文写「本轮只登记」,现已不成立。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:53:58-07:00"},{"Sha1":"c4ec6f6ad12a7b415db4bdd07de48ed64c26bde8","Message":"chore(reports): ui-acceptance 重跑回绑 @ 67e8193\n\nD-14 登记的那份过期报告已真跑回来:passed,nestjs/ws 组合 5/5(地板 5),\nprovenance gitSha=67e8193 / worktreeDirty=false / runner=local。\n67e8193..HEAD 之间作用域(runtime/apps、runtime/packages、modules.json)零变更,\n因此该绑定对当前代码仍然成立。\n\n跑法按 §9 的口径:HEAD 的独立 git worktree 干净检出(主工作区有并行会话 WIP,\n跑在那里必 worktreeDirty=true)+ 隔离栈 enterprise-platform-ms23(PG :55471 /\nRedis :56380 逻辑库 7,本轮重新 docker start 并新建 enterprise_platform_ui_acceptance 库\n——那台 PG 里的库又被清空过一次,与 §9 末尾记的教训一致)。\n\n踩到一条 §9 三条前置之外的:**临时检出只 install + prisma:generate 还不够,必须再\npnpm build**。缺它时 api-nestjs 的 tsc 以 Cannot find module '@juhai/module-kit' /\n'@repo/telemetry' 失败——workspace 包没构建,不是回归。CLAUDE.md「开发命令」节的三步\n本来就写了 build,是我漏了第三步。该次失败发生在构建阶段、未写报告,主工作区那份\n旧报告全程未被覆盖(这正是在独立检出里跑的意义)。\n\n本提交只含这一个报告文件:同时有 18 份 runtime 报告被并行会话改动,不属本轮,未纳入。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:53:21-07:00"}],"HeadCommit":{"Sha1":"3baec4ad9f8c27a94f514af7e4e340c1c763b923","Message":"docs(部署): §15.4 改写 + 新增 §15.5——ui-acceptance 已真跑回来,D-14 闭环\n\n回绑提交 c4ec6f6:passed,nestjs/ws 5/5(地板 5),绑 67e8193 / worktreeDirty=false;\n67e8193..HEAD 之间作用域零变更,绑定对当前代码仍成立。\n\n同轮补两条环境教训:\n\n1. 隔离栈 enterprise-platform-ms23 那台 PG 的库又被清空了,验收库得重建。与 §9 末尾\n 「不能假定上一轮还在」同一条,这是第二次撞上——可以当常态而不是意外。\n2. §9 的三条前置少写了一条:临时检出只 install + prisma:generate 不够,必须再 pnpm build。\n 缺它时 api-nestjs 的 tsc 以 Cannot find module '@juhai/module-kit' / '@repo/telemetry' 失败,\n 是 workspace 包没构建,不是回归。该次失败停在构建阶段、未写报告,主工作区那份旧报告\n 全程没被覆盖——这正是在独立检出里跑的意义。\n\n§15.4 标题与结尾同步订正:原文写「本轮只登记」,现已不成立。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:53:58-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/e79e5f2b943a633299851dbc7709455247a415ef...3baec4ad9f8c27a94f514af7e4e340c1c763b923","Len":2}...
|
1789775643
|
Edit
Delete
|
|
31201
|
5
|
9
|
5
|
116
|
0
|
0
|
refs/tags/packages-v1.0.0-rc.5
|
0
|
{"Commits":null,"HeadCommit":{" {"Commits":null,"HeadCommit":{"Sha1":"cf05344e117a84fedf092613be5fc13b7a07072b","Message":"chore(release): 三包推到 1.0.0-rc.5——pins 三层判据随包出去,fact-pii 有意留在仓内\n\n动因:check:pins 的三层判据(63ff31f)还不在任何已发布版本里,而 @juhai/governance 的\nrc.0—rc.4 已全部被占用,按 G-12 的边界只能往前发下一个 RC。\n\n**发布物里有什么、没有什么,说清楚免得下一个人误读:** check-pins.mjs 在 governance 包的\nfiles 里,所以三层判据随包出去,消费者仓跑 juhai-governance check:pins 会拿到新判据\n(他们没有 pins-baseline.json,第三方层不启用,行为与 rc.4 一致——这是设计好的向后兼容)。\n而 check-fact-pii.mjs 与 fact-pii-rules.json **有意不进 files**:它扫的是\ncontracts/schemas/facts/ 与 contracts/candidates/facts/,消费者仓根本没有这两个目录,\n发过去是道跑不起来的门禁。它属于本轮源码,但不是本轮发布物的一部分。\n\n自 rc.4 源 557a95c 起的随车内容(比 rc.4 那趟小得多):\n contracts 14 文件 / 6 提交(7 个代码文件,三个域的 fixture-evaluator 与其单测)\n governance 10 文件 / 3 提交(两道新门禁 + 夹具覆盖度算法入文档)\n runtime/clients/fact 1 文件 / 1 提交 —— **只有 package.json,零内容变更,纯跟车**\n\n通道:本地旁路(G-12 第四次使用)。2026-09-18 实测:GitHub Actions 最新 run 35404565689 仍\nfailure(两个 job failure、其余 skipped,计费停摆的典型形态),正道仍不可满足。\n\n**一处新情况:推送死锁已解开。** rc.4 那趟记的是「GitHub 镜像落后 237 条、因分支保护的\nrequired check 跑不起来而推不动」;本次实测镜像落后已降到 24 条,github/main 指向 54e6324,\n说明有人把提交推上去了。但 Actions 仍不启动,所以正道仍差这一半——计费恢复后即可直接走正道,\n不必再先解死锁。\n\n按 CL-5 打 tag packages-v1.0.0-rc.5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:45:09-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/0000000000000000000000000000000000000000...cf05344e117a84fedf092613be5fc13b7a07072b","Len":0}...
|
1789775554
|
Edit
Delete
|
|
31200
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"e79e5f2b9 {"Commits":[{"Sha1":"e79e5f2b943a633299851dbc7709455247a415ef","Message":"feat(governance): 覆盖度探针自己查「整支规则没接进评估器」——那是它此前按设计看不见的盲区\n\n上一条(62c9d95)把盲区与绕开它的两步写进了 CLAUDE.md,但那只是文档约束,人不比对就不会发现。\n本次把两项结构比对做进 governance/fixture-coverage.mjs:它们不依赖夹具,因而看得见「从没有用例的那一面」。\n\n1. 未接线列:导入域的 index.js,把导出的判定函数(assess|review|classify|select|decide|plan|preflight|\n evaluate 打头)与 planner 原型方法逐个对评估器源码里的引用,没被引用的报出来。\n2. !!! 行:评估器写成 `\"reasons\" in r ? … : []` 时提醒——该规则结果联合体里一旦出现不带 reasons 的\n 非放行出口(BLOCKED / SKIP_DUPLICATE / DLQ / DUPLICATE_NOOP / USE_LAST_KNOWN_GOOD)就会被静默判成 ACCEPT。\n\n对着 15 个真实套件跑,逮到两类误报,都已修,并写成用例钉住:\n- planner 多数经 createRuntimeX() 工厂到达,类名根本不出现在评估器里。按「类名没出现」判整支未接线会把\n 跨域流程、Webhook、public-file 等全报一遍。改成按「一个方法都没被调」判,并排除 status/get 这类\n 只读访问器与错误类(AiRouteRequestRejected / AuditRequestRejected 不是判定面)。\n- cost-capacity 与 notification-webhook 把旧写法 `\"reasons\" in d ? [...] : []` 抄在注释里当变更记录,\n 按原文匹配会把两个已经改对的域报成缺陷。改成先去注释再匹配。\n措辞也相应收敛:`!!!` 行现在说「今天未必已经出错,但联合体里一旦出现…就会被静默判成 ACCEPT」,\n而不是断言它已经错了——跨域流程那处就属于「今天正确、但脆」。\n\n新增 governance/test/fixture-coverage.test.mjs(3 例):该脚本此前是 governance/ 下唯一没有测试的。\n用临时自足域验三件事——只报没被调的方法、经工厂到达的类不报整支未接线、注释里的旧写法不报。\n\n当前读数(均未处理,已登记进 CLAUDE.md 同段):\n 九个契约包域 未接线 1 处:LocalWorkflowPlanner.refresh()\n 运行时模块侧 未接线 9 处:ai-gateway 2 / permission 3 / audit / credential / fact / scope 各 1\n\n证据:pnpm test(governance)364/364;check-fixtures 17 套件 468 例 0 失败;\n「夹具与单测都没有」仍 0 条;工作区一致性门禁只剩既有的 L9 compose project 撞名。\n脚本仍是诊断而非门禁——不写报告、不进 pnpm check,故本次不涉及 reports 回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:51:13-07:00"},{"Sha1":"fed1fd024bc60a4feef89dff7c2ec028e0bcb066","Message":"docs(发布): 当场记录 rc.5 列车——三层判据随包出去,fact-pii 有意留在仓内\n\nrc.5 三包 2026-09-18 经本地旁路发出,源 cf05344,tag packages-v1.0.0-rc.5(连续第二趟按 CL-5\n打上)。三包均 registry integrity verified;产物 contracts 183.0 kB / governance 96.9 kB /\nclient-fact 17.4 kB,shasum 记在文档里。\n\n记录里写清了三件容易被误读的事:\n\n1. 发布物里有什么、没有什么。check-pins.mjs 在 governance 包的 files 里,三层判据随包出去,\n 消费者仓拿到新判据后因无 pins-baseline 而第三方层不启用,行为与 rc.4 一致(设计好的向后兼容)。\n check-fact-pii.mjs 与 fact-pii-rules.json **有意不进 files**——它扫 contracts/schemas/facts/,\n 消费者仓没有那个目录,发过去是道跑不起来的门禁。\n2. **CI 死锁解开了一半。** rc.4 那趟记的是双重不可用;本次实测 GitHub 镜像落后已从 237 条降到\n 24 条,推送死锁解开,但 Actions 最新 run 35404565689 仍 failure。计费一恢复即可直接走正道,\n 不必再先解死锁——这是四趟以来第一次出现的松动。\n3. 发布前验证的真实范围:构建 BUILD_EXIT=0、逐包核对产物内容与 provenance;**完整 pnpm check\n 没有在发布前跑**,发布后补跑(真实退出码 1,唯一失败是并行会话的 workbench-ops-snapshot 过期,\n 判据类全绿:pins、fact-pii、测试 361/361)。\n\n发布那一步由 Owner 在自己终端执行:本会话的 auto mode 安全分类器以 [Safety Bypass Flag] 拒绝了带\nPLATFORM_RELEASE_BYPASS_CI_EVIDENCE 的命令。那不算误伤,这个开关就是绕过 CI 证据链的。\n备料与验证由会话完成,最后一步由人按下——这个分工也记进了文档。\n\nCLAUDE.md 的 contracts 条目同步推到 rc.5,并记下 fact-pii 不随包这一条。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:50:56-07:00"},{"Sha1":"5116dc5951412d8e6f037aafb4fe532fa38207a7","Message":"chore(reports): check:fixtures 回绑 @ 62c9d95 —— 配置开关补的 10 例还没进报告\n\n已提交版绑 748492c、记 458 例;其后 contracts/src/domain/configuration-feature-flags/\nfixture-evaluator.ts 与对应夹具各有一次变更,现测 17 套件 468 例、失败 0、不可用 0。\n按「作用域内有无变更」判定该回绑,非按提交距离。产出绑 62c9d95、worktreeDirty=false\n(生成时主工作区恰好干净,未用临时检出)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:49:08-07:00"}],"HeadCommit":{"Sha1":"e79e5f2b943a633299851dbc7709455247a415ef","Message":"feat(governance): 覆盖度探针自己查「整支规则没接进评估器」——那是它此前按设计看不见的盲区\n\n上一条(62c9d95)把盲区与绕开它的两步写进了 CLAUDE.md,但那只是文档约束,人不比对就不会发现。\n本次把两项结构比对做进 governance/fixture-coverage.mjs:它们不依赖夹具,因而看得见「从没有用例的那一面」。\n\n1. 未接线列:导入域的 index.js,把导出的判定函数(assess|review|classify|select|decide|plan|preflight|\n evaluate 打头)与 planner 原型方法逐个对评估器源码里的引用,没被引用的报出来。\n2. !!! 行:评估器写成 `\"reasons\" in r ? … : []` 时提醒——该规则结果联合体里一旦出现不带 reasons 的\n 非放行出口(BLOCKED / SKIP_DUPLICATE / DLQ / DUPLICATE_NOOP / USE_LAST_KNOWN_GOOD)就会被静默判成 ACCEPT。\n\n对着 15 个真实套件跑,逮到两类误报,都已修,并写成用例钉住:\n- planner 多数经 createRuntimeX() 工厂到达,类名根本不出现在评估器里。按「类名没出现」判整支未接线会把\n 跨域流程、Webhook、public-file 等全报一遍。改成按「一个方法都没被调」判,并排除 status/get 这类\n 只读访问器与错误类(AiRouteRequestRejected / AuditRequestRejected 不是判定面)。\n- cost-capacity 与 notification-webhook 把旧写法 `\"reasons\" in d ? [...] : []` 抄在注释里当变更记录,\n 按原文匹配会把两个已经改对的域报成缺陷。改成先去注释再匹配。\n措辞也相应收敛:`!!!` 行现在说「今天未必已经出错,但联合体里一旦出现…就会被静默判成 ACCEPT」,\n而不是断言它已经错了——跨域流程那处就属于「今天正确、但脆」。\n\n新增 governance/test/fixture-coverage.test.mjs(3 例):该脚本此前是 governance/ 下唯一没有测试的。\n用临时自足域验三件事——只报没被调的方法、经工厂到达的类不报整支未接线、注释里的旧写法不报。\n\n当前读数(均未处理,已登记进 CLAUDE.md 同段):\n 九个契约包域 未接线 1 处:LocalWorkflowPlanner.refresh()\n 运行时模块侧 未接线 9 处:ai-gateway 2 / permission 3 / audit / credential / fact / scope 各 1\n\n证据:pnpm test(governance)364/364;check-fixtures 17 套件 468 例 0 失败;\n「夹具与单测都没有」仍 0 条;工作区一致性门禁只剩既有的 L9 compose project 撞名。\n脚本仍是诊断而非门禁——不写报告、不进 pnpm check,故本次不涉及 reports 回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:51:13-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/62c9d953569c6a146215a0e5511efc292e3f7740...e79e5f2b943a633299851dbc7709455247a415ef","Len":3}...
|
1789775554
|
Edit
Delete
|
|
31199
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"62c9d9535 {"Commits":[{"Sha1":"62c9d953569c6a146215a0e5511efc292e3f7740","Message":"docs(治理): 覆盖度探针读数为 0 不等于该域已收口——把最大的盲区和先做结构比对写进 CLAUDE.md\n\nfixture-coverage.mjs 的局限第一条「只变异夹具已有用例的字段」,实际后果比字面严重:\n整支规则若一条夹具用例都没有,它根本不进统计,读数会一直显示 0/0。只看读数会以为收完了。\n\n2026-09-18 四次命中同一形状,当时四个域的读数都是 0:\n collaboration-messaging plan 分不出 ADMIT 与 SKIP_DUPLICATE\n notification-webhook decideProviderOutcome 没有规则(退避与 Retry-After 钳制全在里面)\n application-contract-registry plan 把 BLOCKED 判成放行,且没有一条用例带合法快照\n configuration-feature-flags configuration-client.ts(167 行,本域最大的一支)整个文件没有规则\n\n补进去的是可操作的两步,不是结论:\n1. 先做结构比对再看读数——把 index.ts 导出的规则函数与 planner 的公开方法(plan / refresh / status /\n 域特有方法)列出来逐个对 *_FIXTURE_RULES,对不上的先补规则、补一条带合法快照的正例。\n2. 连带查评估器判据——写成 `\"reasons\" in r` 这类按字段存在与否判放行的,凡是不带 reasons 的非放行出口\n (BLOCKED / SKIP_DUPLICATE / DLQ / DUPLICATE_NOOP / USE_LAST_KNOWN_GOOD)都会被判成 ACCEPT,\n 一律改成按 kind 判定。\n并写明:补规则后覆盖度会先变差(新面第一次被走到),那是对的,把新暴露的原因码钉完再收工。\n\n顺带把同段的例数从 458 更正为 468(C13 那轮 +10),按实跑 check:fixtures 的输出校对过。\n\n证据:check:fixtures 17 套件 468 例 0 失败 0 不可用;fixture-coverage 15 套件两档仍全 0;\n工作区一致性门禁只剩既有的 L9 compose project 撞名,无新增 L4 / L13。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:47:21-07:00"}],"HeadCommit":{"Sha1":"62c9d953569c6a146215a0e5511efc292e3f7740","Message":"docs(治理): 覆盖度探针读数为 0 不等于该域已收口——把最大的盲区和先做结构比对写进 CLAUDE.md\n\nfixture-coverage.mjs 的局限第一条「只变异夹具已有用例的字段」,实际后果比字面严重:\n整支规则若一条夹具用例都没有,它根本不进统计,读数会一直显示 0/0。只看读数会以为收完了。\n\n2026-09-18 四次命中同一形状,当时四个域的读数都是 0:\n collaboration-messaging plan 分不出 ADMIT 与 SKIP_DUPLICATE\n notification-webhook decideProviderOutcome 没有规则(退避与 Retry-After 钳制全在里面)\n application-contract-registry plan 把 BLOCKED 判成放行,且没有一条用例带合法快照\n configuration-feature-flags configuration-client.ts(167 行,本域最大的一支)整个文件没有规则\n\n补进去的是可操作的两步,不是结论:\n1. 先做结构比对再看读数——把 index.ts 导出的规则函数与 planner 的公开方法(plan / refresh / status /\n 域特有方法)列出来逐个对 *_FIXTURE_RULES,对不上的先补规则、补一条带合法快照的正例。\n2. 连带查评估器判据——写成 `\"reasons\" in r` 这类按字段存在与否判放行的,凡是不带 reasons 的非放行出口\n (BLOCKED / SKIP_DUPLICATE / DLQ / DUPLICATE_NOOP / USE_LAST_KNOWN_GOOD)都会被判成 ACCEPT,\n 一律改成按 kind 判定。\n并写明:补规则后覆盖度会先变差(新面第一次被走到),那是对的,把新暴露的原因码钉完再收工。\n\n顺带把同段的例数从 458 更正为 468(C13 那轮 +10),按实跑 check:fixtures 的输出校对过。\n\n证据:check:fixtures 17 套件 468 例 0 失败 0 不可用;fixture-coverage 15 套件两档仍全 0;\n工作区一致性门禁只剩既有的 L9 compose project 撞名,无新增 L4 / L13。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:47:21-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/cf05344e117a84fedf092613be5fc13b7a07072b...62c9d953569c6a146215a0e5511efc292e3f7740","Len":1}...
|
1789775276
|
Edit
Delete
|
|
31198
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"cf05344e1 {"Commits":[{"Sha1":"cf05344e117a84fedf092613be5fc13b7a07072b","Message":"chore(release): 三包推到 1.0.0-rc.5——pins 三层判据随包出去,fact-pii 有意留在仓内\n\n动因:check:pins 的三层判据(63ff31f)还不在任何已发布版本里,而 @juhai/governance 的\nrc.0—rc.4 已全部被占用,按 G-12 的边界只能往前发下一个 RC。\n\n**发布物里有什么、没有什么,说清楚免得下一个人误读:** check-pins.mjs 在 governance 包的\nfiles 里,所以三层判据随包出去,消费者仓跑 juhai-governance check:pins 会拿到新判据\n(他们没有 pins-baseline.json,第三方层不启用,行为与 rc.4 一致——这是设计好的向后兼容)。\n而 check-fact-pii.mjs 与 fact-pii-rules.json **有意不进 files**:它扫的是\ncontracts/schemas/facts/ 与 contracts/candidates/facts/,消费者仓根本没有这两个目录,\n发过去是道跑不起来的门禁。它属于本轮源码,但不是本轮发布物的一部分。\n\n自 rc.4 源 557a95c 起的随车内容(比 rc.4 那趟小得多):\n contracts 14 文件 / 6 提交(7 个代码文件,三个域的 fixture-evaluator 与其单测)\n governance 10 文件 / 3 提交(两道新门禁 + 夹具覆盖度算法入文档)\n runtime/clients/fact 1 文件 / 1 提交 —— **只有 package.json,零内容变更,纯跟车**\n\n通道:本地旁路(G-12 第四次使用)。2026-09-18 实测:GitHub Actions 最新 run 35404565689 仍\nfailure(两个 job failure、其余 skipped,计费停摆的典型形态),正道仍不可满足。\n\n**一处新情况:推送死锁已解开。** rc.4 那趟记的是「GitHub 镜像落后 237 条、因分支保护的\nrequired check 跑不起来而推不动」;本次实测镜像落后已降到 24 条,github/main 指向 54e6324,\n说明有人把提交推上去了。但 Actions 仍不启动,所以正道仍差这一半——计费恢复后即可直接走正道,\n不必再先解死锁。\n\n按 CL-5 打 tag packages-v1.0.0-rc.5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:45:09-07:00"},{"Sha1":"ff80f7e1b91b7fb012f0488736bce79b33db3ad5","Message":"docs(记录): 一个会话的契约包入参硬化与证据收口——重点是四次自我更正\n\n把散在提交信息与开发计划登记行里的结论汇到一处。写的是单个会话的范围,不代为总结\n同日并行会话在九个域做的同类工作;凡带数字的当前状态一律标注为落盘时点快照。\n\n四次更正里三次是判断错了、一次是方法缺了一步:\n\n1. 注册中心那套被放弃是对的,且不是风格之争。我当时报的「远端那版大部分相当,唯一\n 差异是原因码命名」是靠读代码比对得出的,后被 7523bd0 的双向交叉实测推翻——被放弃\n 那套有 4 个实缺陷,其中一条是它自己的注释抱怨「同一摘要两种写法等于两个身份」,\n 却只在入口拒大写、升级比较那条路上没修完。整个会话的方法论是先实测再下结论,\n 对自己的产物我没照做。\n2. module-imports 那次回绑是多余的,已撤回未提交。判据应为「这份报告现在是否被判\n 过期」,而不是「作用域是否干净」。\n3. 独立索引提交后必须 git reset 刷回共享索引,否则并行会话下次从索引提交会把已提交\n 改动带回去——本会话实际发生过一次。\n4. 上述回退事件一度被我误判为对方回退,实为 --amend 改写 SHA 叠加 BSD grep 的 \\| 不是\n 或运算符导致核实命令恒返回 0。核实要用 grep -E,且以内容为准不以 SHA 为准。\n\n另记回绑需构建产物门禁的两条实操约束:检出必须落在工作区内(workspaceRelative 套件\n要向上找 workspace.json),以及该不该回绑看作用域内有无未提交输入而非全仓是否干净。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:44:30-07:00"},{"Sha1":"bf834ce6bcb9551474ff6a18abaa832f2302739f","Message":"test(contracts): 配置与开关最大的一支规则不在门禁上——refresh 的六条原因码一条没钉,含明文密钥那条\n\n覆盖度探针对本套件的读数是「都没有 0 / 仅单测 0」,看上去已收口。但它按自述只变异夹具已有用例的\n字段,而 configuration-client.ts(167 行,LocalConfigurationClient 的 create / status / get / refresh)\n一条夹具用例都没有——整支规则从来不在它的统计口径里。两个规则文件零改动,只动夹具评估器。\n\n1. refresh() 的六条原因码一条都没钉:SNAPSHOT_FORMAT_INVALID、SNAPSHOT_VERSION_NOT_FORWARD、\n SNAPSHOT_NOT_APPROVED、SNAPSHOT_SCHEMA_INVALID、PLAINTEXT_SECRET_FORBIDDEN、SNAPSHOT_VERSION_STALE。\n 其中 PLAINTEXT_SECRET_FORBIDDEN 有两条到达路径——候选显式标注,以及键名命中密钥模式\n (normalizeSnapshot 把两者 OR 起来,apiToken 这样的键足以触发)——都在门禁之外。\n 新增 client 规则:按 active 建客户端再喂候选热更,APPLIED 为放行,否则返回 KEPT_LAST_KNOWN_GOOD\n 给出的 reasons;create 在两份快照都不可用时会抛,评估器收敛成 CONFIGURATION_UNAVAILABLE: 原因码,\n 而不是让整套夹具塌成 configurationError。\n\n2. snapshot 把 USE_LAST_KNOWN_GOOD 判成放行:候选被拒退回上一版与候选被采纳在夹具里是同一个结果,\n 实测「候选未批准」「候选含明文密钥」两种退回都判 ACCEPT。这一条改的是既有的、有意为之的口径\n (原评估器抬头写着「只有 USE_CANDIDATE / USE_LAST_KNOWN_GOOD 算放行」),理由是与同仓兄弟域对齐——\n 通知与 Webhook 的评估器写着「DUPLICATE / RETRY / DLQ / REJECT_REPLAY 都如实返回,因为它们在消费侧的\n 后果都不是『这次投递成功了』」。退回上一版同样不是「这次配置更新成功了」。\n 原 P04-falls-back-to-last-known-good 随之改名 N15-(门禁强制 id 前缀与 expect 一致)。\n\n一处明写不覆盖:refresh() 的 SNAPSHOT_VERSION_STALE 按构造不可达——active 建客户端时已过版本下限、\n候选又必须比 active 前进,合起来候选不可能低于下限;configuration-client.ts 抬头自己写明那是防御性\n补的一笔。N24 改钉「两份快照都不可用时 create 抛 CONFIGURATION_UNAVAILABLE:」这条真实出口。\n\n覆盖:夹具 18 → 28 例(正 4 / 反 24),定向测试 21 → 25 例,前一轮断言一条未改;\nfixture-coverage 稳定码 8 → 11,两档仍 0 / 0。变异探针(28 例 × 14 种脏值)4200 个变异点、0 处抛异常。\n\n未做(越界):分桶、发布状态机、kill switch 仍不在本仓,C13 按缺失模块完善清单仍是「裁决」;\nCatalog 登记未动(仍 module_e2、code_truth 指向工单仓 packages/configuration-client)。\n\n证据:pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas 无漂移、\nnode --test contracts/test/*.test.mjs 408/408、该套件夹具 28/28 失败 0。\n负向实测:把 N23(密钥键名那条)的声明改成 SNAPSHOT_NOT_APPROVED → 门禁 exit 1 并点名该例,还原后 exit 0。\n本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:44:11-07:00"}],"HeadCommit":{"Sha1":"cf05344e117a84fedf092613be5fc13b7a07072b","Message":"chore(release): 三包推到 1.0.0-rc.5——pins 三层判据随包出去,fact-pii 有意留在仓内\n\n动因:check:pins 的三层判据(63ff31f)还不在任何已发布版本里,而 @juhai/governance 的\nrc.0—rc.4 已全部被占用,按 G-12 的边界只能往前发下一个 RC。\n\n**发布物里有什么、没有什么,说清楚免得下一个人误读:** check-pins.mjs 在 governance 包的\nfiles 里,所以三层判据随包出去,消费者仓跑 juhai-governance check:pins 会拿到新判据\n(他们没有 pins-baseline.json,第三方层不启用,行为与 rc.4 一致——这是设计好的向后兼容)。\n而 check-fact-pii.mjs 与 fact-pii-rules.json **有意不进 files**:它扫的是\ncontracts/schemas/facts/ 与 contracts/candidates/facts/,消费者仓根本没有这两个目录,\n发过去是道跑不起来的门禁。它属于本轮源码,但不是本轮发布物的一部分。\n\n自 rc.4 源 557a95c 起的随车内容(比 rc.4 那趟小得多):\n contracts 14 文件 / 6 提交(7 个代码文件,三个域的 fixture-evaluator 与其单测)\n governance 10 文件 / 3 提交(两道新门禁 + 夹具覆盖度算法入文档)\n runtime/clients/fact 1 文件 / 1 提交 —— **只有 package.json,零内容变更,纯跟车**\n\n通道:本地旁路(G-12 第四次使用)。2026-09-18 实测:GitHub Actions 最新 run 35404565689 仍\nfailure(两个 job failure、其余 skipped,计费停摆的典型形态),正道仍不可满足。\n\n**一处新情况:推送死锁已解开。** rc.4 那趟记的是「GitHub 镜像落后 237 条、因分支保护的\nrequired check 跑不起来而推不动」;本次实测镜像落后已降到 24 条,github/main 指向 54e6324,\n说明有人把提交推上去了。但 Actions 仍不启动,所以正道仍差这一半——计费恢复后即可直接走正道,\n不必再先解死锁。\n\n按 CL-5 打 tag packages-v1.0.0-rc.5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:45:09-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/67e81931c6da187ea61adff37ad74a4d9b672e8e...cf05344e117a84fedf092613be5fc13b7a07072b","Len":3}...
|
1789775181
|
Edit
Delete
|
|
31197
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"67e81931c {"Commits":[{"Sha1":"67e81931c6da187ea61adff37ad74a4d9b672e8e","Message":"docs(部署): 记录补 §15——D-12 修掉(实为两处),以及重建产物撞出的两个部署坑\n\n实现提交 59265a6。本节记三件事:\n\n一、D-12 登记的是顶栏,实际是两处同病,第二处(登录页的 typeof window 分支)每次打开都在报、\n与有没有会话无关。它还改写了一条既有结论:同源托管记录 §4.3 记的那个「缺配置」就是产物原文,\n客户端随后整片换掉了——当时看到的渲染没错,但那是水合失败后重渲染的结果,不是水合成功。\n定位用对照实验(清空会话重载不报、植入会话即报),不是读代码猜。\n\n二、重建静态产物撞出两个坑,都会让人误判成「发好了」:\n① next build 把 .env.local 烤进产物——第一次重建后 out/ 里出现 localhost:3098 与工作台\n clientId,而这份产物是给网关同源托管的,API 基地址本该为空。在有 .env.local 的开发机上\n 直接 build,等于把 dev 配置发到网关。\n② next build 删目录再造 out/,inode 变了,caddy 的绑定挂载失效、/srv/workbench 变空,\n 而网关照样回 200——发的是 25 字节占位响应。「200 且有内容」不等于「发的是你刚建的产物」。\n force-recreate 后恢复。时序上坑 ① 那份产物从未真正对外发过,因为坑 ② 同刻已让挂载失效。\n\n三、ui-acceptance 因改动落在 runtime/apps 按作用域过期,Owner 定:先提交、过期登记在案、\n重跑排到下一轮(D-14,与 D-13 同批)。在那之前该报告不覆盖本次工作台改动。\n\n同轮把已修的 D-12 从 §14.5 未闭环表摘出并指向 §15。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:41:54-07:00"}],"HeadCommit":{"Sha1":"67e81931c6da187ea61adff37ad74a4d9b672e8e","Message":"docs(部署): 记录补 §15——D-12 修掉(实为两处),以及重建产物撞出的两个部署坑\n\n实现提交 59265a6。本节记三件事:\n\n一、D-12 登记的是顶栏,实际是两处同病,第二处(登录页的 typeof window 分支)每次打开都在报、\n与有没有会话无关。它还改写了一条既有结论:同源托管记录 §4.3 记的那个「缺配置」就是产物原文,\n客户端随后整片换掉了——当时看到的渲染没错,但那是水合失败后重渲染的结果,不是水合成功。\n定位用对照实验(清空会话重载不报、植入会话即报),不是读代码猜。\n\n二、重建静态产物撞出两个坑,都会让人误判成「发好了」:\n① next build 把 .env.local 烤进产物——第一次重建后 out/ 里出现 localhost:3098 与工作台\n clientId,而这份产物是给网关同源托管的,API 基地址本该为空。在有 .env.local 的开发机上\n 直接 build,等于把 dev 配置发到网关。\n② next build 删目录再造 out/,inode 变了,caddy 的绑定挂载失效、/srv/workbench 变空,\n 而网关照样回 200——发的是 25 字节占位响应。「200 且有内容」不等于「发的是你刚建的产物」。\n force-recreate 后恢复。时序上坑 ① 那份产物从未真正对外发过,因为坑 ② 同刻已让挂载失效。\n\n三、ui-acceptance 因改动落在 runtime/apps 按作用域过期,Owner 定:先提交、过期登记在案、\n重跑排到下一轮(D-14,与 D-13 同批)。在那之前该报告不覆盖本次工作台改动。\n\n同轮把已修的 D-12 从 §14.5 未闭环表摘出并指向 §15。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:41:54-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/ac4f5b8ef04795013b51bcb9bb6d4c353e091311...67e81931c6da187ea61adff37ad74a4d9b672e8e","Len":1}...
|
1789774924
|
Edit
Delete
|
|
31196
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"ac4f5b8ef {"Commits":[{"Sha1":"ac4f5b8ef04795013b51bcb9bb6d4c353e091311","Message":"chore(reports): check:module-imports 回绑 @ 59265a6\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,绑 59265a6 /\nworktreeDirty=false,扫描 397 个源文件、0 处违规。\n\n上一次绑 557a95c,之后作用域内有两批改动:63ff31f 把 clients 三包的 devDeps pin 到 exact,\n59265a6 给 workbench 加了客户端状态 hook。397 = 上次的 396 + 新增的\nruntime/apps/workbench/src/lib/use-mounted.ts,数字对得上。\n\n这份报告此前卡了一轮:它的证据作用域含 runtime/apps,而并行会话正在改 workbench,\nrebind 按判据拒绝回绑(作用域内有未提交输入)。等其提交后抢的窗口。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:41:33-07:00"}],"HeadCommit":{"Sha1":"ac4f5b8ef04795013b51bcb9bb6d4c353e091311","Message":"chore(reports): check:module-imports 回绑 @ 59265a6\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,绑 59265a6 /\nworktreeDirty=false,扫描 397 个源文件、0 处违规。\n\n上一次绑 557a95c,之后作用域内有两批改动:63ff31f 把 clients 三包的 devDeps pin 到 exact,\n59265a6 给 workbench 加了客户端状态 hook。397 = 上次的 396 + 新增的\nruntime/apps/workbench/src/lib/use-mounted.ts,数字对得上。\n\n这份报告此前卡了一轮:它的证据作用域含 runtime/apps,而并行会话正在改 workbench,\nrebind 按判据拒绝回绑(作用域内有未提交输入)。等其提交后抢的窗口。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:41:33-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/59265a6ffc4d0d4ffda878fd880a5d5a308720bb...ac4f5b8ef04795013b51bcb9bb6d4c353e091311","Len":1}...
|
1789774905
|
Edit
Delete
|
|
31194
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"59265a6ff {"Commits":[{"Sha1":"59265a6ffc4d0d4ffda878fd880a5d5a308720bb","Message":"fix(workbench): 客户端独有的状态不得进首帧——修掉两处水合不一致(D-12)\n\nD-12 登记的是顶栏那一处,查下来是两处同病,其中一处每次打开登录页都在报:\n\n- `app-nav.tsx` 直接渲染会话里的 subject。工作台是 output: \"export\",HTML 在构建期定死,\n 里面不可能有会话,而首帧客户端已经有了。只在 sessionStorage 有令牌时触发。\n- `login/page.tsx` 的 `typeof window === \"undefined\" ? null : readOidcConfig(...)`:服务端恒为\n null(渲染「缺配置」),浏览器算得出配置(渲染登录按钮),**必然**对不上,与有没有会话无关。\n 同源托管记录 §4.3 记的那个「缺配置」就是产物原文,客户端随后整片换掉了。\n\n定位用的是对照实验而不是读代码猜:清空 sessionStorage 重载 / 不报错,植入会话再重载即报;\n重载 /login/ 在无会话时也报。\n\n修法统一为新增的 useMounted():客户端独有的状态(sessionStorage 会话、window.location)\n等挂载之后再渲染,首帧与构建期产物逐字一致。没有复用 store 的 hydrated 标志——那面旗由\nProviders 的 effect 翻,时序上依赖别的组件;组件自己的 useState(false) 在水合那一帧恒为 false。\n\n登录页因此多出第三种状态「读取中」。这与本仓一贯口径一致:配置还没读到时,既不能说\n「缺配置」也不能说「可登录」。\n\n验证:workbench typecheck / lint 通过;next build 六路由导出;重载 /login/ 与植入会话硬跳转 /\n均不再新增 hydration 报错。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:41:05-07:00"}],"HeadCommit":{"Sha1":"59265a6ffc4d0d4ffda878fd880a5d5a308720bb","Message":"fix(workbench): 客户端独有的状态不得进首帧——修掉两处水合不一致(D-12)\n\nD-12 登记的是顶栏那一处,查下来是两处同病,其中一处每次打开登录页都在报:\n\n- `app-nav.tsx` 直接渲染会话里的 subject。工作台是 output: \"export\",HTML 在构建期定死,\n 里面不可能有会话,而首帧客户端已经有了。只在 sessionStorage 有令牌时触发。\n- `login/page.tsx` 的 `typeof window === \"undefined\" ? null : readOidcConfig(...)`:服务端恒为\n null(渲染「缺配置」),浏览器算得出配置(渲染登录按钮),**必然**对不上,与有没有会话无关。\n 同源托管记录 §4.3 记的那个「缺配置」就是产物原文,客户端随后整片换掉了。\n\n定位用的是对照实验而不是读代码猜:清空 sessionStorage 重载 / 不报错,植入会话再重载即报;\n重载 /login/ 在无会话时也报。\n\n修法统一为新增的 useMounted():客户端独有的状态(sessionStorage 会话、window.location)\n等挂载之后再渲染,首帧与构建期产物逐字一致。没有复用 store 的 hydrated 标志——那面旗由\nProviders 的 effect 翻,时序上依赖别的组件;组件自己的 useState(false) 在水合那一帧恒为 false。\n\n登录页因此多出第三种状态「读取中」。这与本仓一贯口径一致:配置还没读到时,既不能说\n「缺配置」也不能说「可登录」。\n\n验证:workbench typecheck / lint 通过;next build 六路由导出;重载 /login/ 与植入会话硬跳转 /\n均不再新增 hydration 报错。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:41:05-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/63ff31f256e45886e0a52d5e819ef7b3730eba9b...59265a6ffc4d0d4ffda878fd880a5d5a308720bb","Len":1}...
|
1789774882
|
Edit
Delete
|
|
31193
|
5
|
5
|
5
|
116
|
0
|
0
|
refs/heads/main
|
0
|
{"Commits":[{"Sha1":"63ff31f25 {"Commits":[{"Sha1":"63ff31f256e45886e0a52d5e819ef7b3730eba9b","Message":"feat(治理): check:pins 扩到第三方依赖——发布包严格,应用侧走存量基线\n\n此前 check:pins 只管 @juhai/*,第三方 pin 完全不看。量了一下:256 个第三方依赖声明里\n218 个(85%)是 range。直接全判红等于让门禁第一天就红 218 处;全量 pin 则要改 218 处并\n重建 runtime / identity 两个 lockfile、触碰整棵依赖树——而 lockfile + --frozen-lockfile\n已经保证了日常构建可复现,range 的真实风险只是有人跑 pnpm update 时意外升级。\n目录负责人裁决:分层。\n\n三层判据:\n\n 1. @juhai/* 一律 exact / workspace:*(原有)\n 2. 对外发布包 第三方依赖也一律 exact。判定依据是 publishConfig 的存在——它是「这个包会被\n 发出去」的机器特征,比硬编码包目录好:新增发布包自动纳入,不必记得回来改门禁。\n 消费者装到的是发布时解析的那棵树,range 在他们那边会解析成别的版本。\n 3. 其余(应用) 存量 209 处登记在 governance/pins-baseline.json,登记外的新增必须 exact。\n 基线**只减不增**:登记项对应的依赖删了条目也要删,否则 BASELINE_STALE 判红。\n\n配套把 clients 三包的 9 处 devDeps pin 掉(@types/node 22.19.20 / typescript 5.9.3 /\nvitest 2.1.9,取自 lockfile 已解析的版本)。lockfile 只动了 9 行 specifier,\n**resolution 变更 0 行**,依赖树没变;pnpm install --frozen-lockfile 复验通过。\n\n**一处会炸下游的设计,改掉了:** 初版把「无基线」当空基线 fail closed。但 @juhai/governance\n是发布给消费者仓(HR / OS)的 CLI,他们跑 juhai-governance check:pins --require @juhai/contracts\n时仓里没有本仓基线,按空基线判会把他们全部第三方 range 判红——一次判据扩展直接炸掉所有下游。\n改为:无基线则第三方层不启用,且**在输出里明说**(不静默关闭)。测试钉住了这条契约。\n\n本机实测:本仓 37 处 @juhai/* + 第三方 256 处(47 exact,含发布包 17 处严格;209 处在基线内)\nexit 0;模拟消费者仓(无基线)exit 0 且第三方层未启用;四种违规场景(发布包 range、\n基线外新增、基线腐烂、无基线)行为逐一验过,退出码直取、不经管道。测试 10 → 17 例。\n\ngovernance/README.md 同步(它随包发布,判据表必须与实现一致);CLAUDE.md 纪律 4 同步。\npins-baseline.json 不进 governance 包的 files——它是本仓的存量账,对消费者无意义。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:37:14-07:00"},{"Sha1":"8939e8fc35a7c42d4957e2297c8dcb8eb58cb663","Message":"chore(reports): check:fixtures 回绑 @ 748492c —— 补上本会话四轮夹具增量欠的那一笔\n\nreports/fixtures.latest.json 此前绑在 7523bd0(17 套件 316 例),check:evidence 报 EVIDENCE_STALE:\n作用域内 14 个文件已变更。变更的大头是本会话四条加夹具的提交——1a1b37e(IM)、bdb662d(数据分析)、\n7a4b693(成本容量)、0b3dab6(Webhook)、4f36e22(注册中心)、4df190d(最后 9 条仅单测)。\n每轮提交信息里都写了「本次不回绑」,当时理由成立(工作树有并行会话 WIP,拿不到 worktreeDirty=false),\n但后续没人补,就成了欠账。\n\n回绑做法:在 企业控制面/.worktrees/rebind-fixtures 开 detached 干净检出(HEAD 748492c),\n把主检出的 node_modules 软链进去(软链不被 .gitignore 的 node_modules/ 目录规则匹配,故写进\n本地 info/exclude,不改仓内 .gitignore),build contracts 与七模块后跑 check:fixtures,\n确认 git status 为空再出报告,最后只把这一份 report 拷回主检出、按 pathspec 单独提交——\n主检出里并行会话另有 11 份报告在改,一份都没碰。\n\n结果:provenance gitSha=748492c、worktreeDirty=false,17 套件 458 例 0 失败 0 不可用\n(此前 316 例,+142 例即本会话四轮的夹具增量)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:33:25-07:00"}],"HeadCommit":{"Sha1":"63ff31f256e45886e0a52d5e819ef7b3730eba9b","Message":"feat(治理): check:pins 扩到第三方依赖——发布包严格,应用侧走存量基线\n\n此前 check:pins 只管 @juhai/*,第三方 pin 完全不看。量了一下:256 个第三方依赖声明里\n218 个(85%)是 range。直接全判红等于让门禁第一天就红 218 处;全量 pin 则要改 218 处并\n重建 runtime / identity 两个 lockfile、触碰整棵依赖树——而 lockfile + --frozen-lockfile\n已经保证了日常构建可复现,range 的真实风险只是有人跑 pnpm update 时意外升级。\n目录负责人裁决:分层。\n\n三层判据:\n\n 1. @juhai/* 一律 exact / workspace:*(原有)\n 2. 对外发布包 第三方依赖也一律 exact。判定依据是 publishConfig 的存在——它是「这个包会被\n 发出去」的机器特征,比硬编码包目录好:新增发布包自动纳入,不必记得回来改门禁。\n 消费者装到的是发布时解析的那棵树,range 在他们那边会解析成别的版本。\n 3. 其余(应用) 存量 209 处登记在 governance/pins-baseline.json,登记外的新增必须 exact。\n 基线**只减不增**:登记项对应的依赖删了条目也要删,否则 BASELINE_STALE 判红。\n\n配套把 clients 三包的 9 处 devDeps pin 掉(@types/node 22.19.20 / typescript 5.9.3 /\nvitest 2.1.9,取自 lockfile 已解析的版本)。lockfile 只动了 9 行 specifier,\n**resolution 变更 0 行**,依赖树没变;pnpm install --frozen-lockfile 复验通过。\n\n**一处会炸下游的设计,改掉了:** 初版把「无基线」当空基线 fail closed。但 @juhai/governance\n是发布给消费者仓(HR / OS)的 CLI,他们跑 juhai-governance check:pins --require @juhai/contracts\n时仓里没有本仓基线,按空基线判会把他们全部第三方 range 判红——一次判据扩展直接炸掉所有下游。\n改为:无基线则第三方层不启用,且**在输出里明说**(不静默关闭)。测试钉住了这条契约。\n\n本机实测:本仓 37 处 @juhai/* + 第三方 256 处(47 exact,含发布包 17 处严格;209 处在基线内)\nexit 0;模拟消费者仓(无基线)exit 0 且第三方层未启用;四种违规场景(发布包 range、\n基线外新增、基线腐烂、无基线)行为逐一验过,退出码直取、不经管道。测试 10 → 17 例。\n\ngovernance/README.md 同步(它随包发布,判据表必须与实现一致);CLAUDE.md 纪律 4 同步。\npins-baseline.json 不进 governance 包的 files——它是本仓的存量账,对消费者无意义。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-18T16:37:14-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/748492c2a1013dbf03b6234f2a85dea73af7e9e6...63ff31f256e45886e0a52d5e819ef7b3730eba9b","Len":2}...
|
1789774676
|
Edit
Delete
|