| content |
{"Commits":[{"Sha1":"6c7f04cb9 {"Commits":[{"Sha1":"6c7f04cb97ab7909f083fd60c790ecda34e9b8ee","Message":"feat(contracts): CT-1 TS 层——JSON Schema 生成类型入库 + Ajv 校验器裸入口,build → dist 随包,check:generated 防漂移(开发计划 §3A CT-1;设计 §9)\n\n- scripts/schema-registry.mjs:key → schemas/ 文件 → 类型名的唯一来源(12 个 Schema);scripts/generate-types.mjs 经 json-schema-to-typescript 16.0.0 生成 generated/*.ts + registry.ts + index.ts 并入库(根类型名取自登记表,不取 $id / title),--check 对比磁盘:缺失 / 差异 / 多余文件均失败\n- src/validators.ts:Ajv 2020(8.20.0 + ajv-formats 3.0.1)按 key 懒编译;validate / isValid / assertValid / schemaOf(副本)/ validateFact(信封 + facts/\u003cfact_type\u003e.v\u003cmajor\u003e 载荷,未登记载荷 Schema 以 payloadSchema 失败关闭)/ factPayloadKey;未知 key 抛 RangeError;CJS 默认导出经 .default 取值以兼容 NodeNext 类型\n- package.json:main / types / exports[\".\"] → dist/src/index.js,files 加 dist,脚本 build(tsc)/ typecheck / generate / check:generated;test 与 check:local 先 build;依赖全部 exact pin;pnpm-lock.yaml 入库;schemas/ 与 catalogs/ 未改\n- 测试:test/validators.test.mjs(examples 4 份 + catalogs 2 份 + 12 份 AppManifest 正例、validateFact 载荷链、缺字段 / 多字段 / 格式 / 未登记 Fact / 未知 key 负例、schemaOf 副本不可放宽)+ test/generate-types.test.mjs(登记表唯一性;--check 在篡改与多余文件时必失败)\n- CI:platform.yml public-static / static 先从公共 npm 安装 contracts 依赖(frozen lockfile),pack 前 build;publish-packages.yml 打包前 enable pnpm + install + build(发布仍 --ignore-scripts)\n- 证据:pnpm --dir contracts check:local 99/99 0 skip;scratchpad 独立克隆模拟 exit 0、83 过 / 16 skip / 0 失败;npm pack --dry-run 85 文件(含 dist/,无 src / generated / test / node_modules);根 check:pins 29 处 exact、governance 测试 85/85\n- 偏差登记:设计 §9 写 zod 校验器,本实现按开发计划 CT-1 用 Ajv 直接编译 JSON Schema 以保 Schema 唯一真源(开发计划 §6 #17);SOURCE.md / README / 仓 README / CLAUDE 状态行同步\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-12T01:09:40-07:00"},{"Sha1":"a4cd6d7af52b77064984a87bbdef3459e574b4a3","Message":"docs(platform): 当前状态 runtime / Release Manifest 两行改引客户端批次证据(runtime 378 / UI 5 @ 1c8a00d;runtime 报告 0ac4419;client-permission 已识别)\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-12T01:07:55-07:00"},{"Sha1":"0ac4419e16662d55aab6bc5a74c2184de26e041b","Message":"chore(reports): refresh clean runtime static evidence @ aeef416(CL-0 / CL-3 后:runtime 378 / UI 5 绑定 1c8a00d;地板 378 / 35 / 185)\n\n根 pnpm check(pins 29 处 / modules / module-imports 201 源文件 0 违规 / catalog / catalog:drift / fixtures 33 / facts / migration-decs / caddy /\ngovernance 测试 / contracts check:local / runtime 静态 14 项 + lint + typecheck)与 release:manifest(partial 缺 5 项,\nclient-permission 1.0.0-rc.0 已识别、client-* 缺项 7 → 6)在 aeef416 上通过。\n只提交 runtime/reports(provenance 以 runtime/ 为根,clean);仓根 reports/*.latest.json 因并行会话 contracts/ CT-1 WIP\n在同一工作树未提交而 worktreeDirty=true,按纪律不提交、已恢复为上一份 clean 绑定(4660ad5)。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-12T01:07:20-07:00"},{"Sha1":"aeef416487271531069d364a1f91dc3ae04f42fd","Message":"docs(runtime): record clean commit acceptance @ 1c8a00d(CL-0 / CL-3 后:runtime 378 / UI 5;地板 378 / 35 / 185)\n\n- 证据新鲜度三行改绑 clean `1c8a00d`:真实 DB check:runtime 378 tests / 0 failures(+32:client-permission 单测 10、\n S-6 夹具对 stub server 三画像 21、api-nestjs 端到端 1)、UI 5/5、双后端差分 0 差异;共享底座 :55470\n `enterprise_platform_acceptance_cl3_20260912` + :56379/7。\n- reports/baseline.json 地板收紧:testsPassed 346 → 378,ownTestCases 184 → 185(ownTests 35 不变:clients / test 工作区包不计)。\n- 三份验收报告 provenance.gitSha = 1c8a00d、worktreeDirty=false(runtime 根口径)。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-12T01:05:45-07:00"},{"Sha1":"1c8a00ddbe6a4c25791df20e425b4817dcd115b6","Message":"feat(clients): @juhai/client-permission 远程权限端口 + client 工作区(开发计划 §3A CL-0 / CL-3)\n\n- runtime/clients/permission(@juhai/client-permission@1.0.0-rc.0,peer @juhai/kernel exact 0.16.1,publishConfig Gitea):\n createRemotePermissionDecisionPort 把内核 PermissionDecisionPort 实现为 POST \u003cbaseUrl\u003e/v1/decisions\n (Catalog 已登记 permission-decision-api.v1);内核请求 → 契约请求体纯映射(点号资源类型 / 单段动作 / 32 hex trace_id /\n actor 缺省 service+workload-identity / scope_version 占位);响应守卫只认契约形状;失败关闭:schema 不通过 / 无租户 /\n 无法映射本地即拒,网络 / 超时 / 5xx → REMOTE_UNAVAILABLE,4xx → REMOTE_REJECTED,非契约响应 → INVALID_RESPONSE,永不抛;\n 未配置退回内核 fail-closed 端口对象;只缓存放行决策到 cache_ttl_seconds(LRU);失效订阅接口 invalidations(DEC-019 / 029 门后接 M3)。\n 10 例单测(注入 fetch,无网络)。\n- runtime/test/port/clients.test.ts:S-6 端口一致性夹具对 stub server 三画像(unavailable / catalog / down)+ 未配置,21 例。\n- api-nestjs 真实 DB 验收增 1 例:client 打装载 permission 的应用 → policy-unavailable;凭证租户 ≠ 上下文租户 → tenant-mismatch;\n 无凭证 → REMOTE_REJECTED(apps 静态 import @juhai/client-* 为 check:module-imports 放行项)。\n- pnpm-workspace 增 clients/*;CI unit job 过滤器增 ./clients/*;runtime/clients/README.md 登记七包状态。\n 传输层先内联在包内,是否抽 @juhai/client-core 仍按开发计划 §6 偏差 #14 待平台负责人。\n- release:manifest 现识别 packages.@juhai/client-permission=1.0.0-rc.0(缺项 client-* 由 7 个降为 6 个,status 仍 partial)。\n\n静态门禁(runtime pnpm check 14 项 + lint + typecheck)与根 check:pins / check:module-imports 在本提交前的脏树上通过;真实 DB 验收随后绑定。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-12T01:03:02-07:00"}],"HeadCommit":{"Sha1":"6c7f04cb97ab7909f083fd60c790ecda34e9b8ee","Message":"feat(contracts): CT-1 TS 层——JSON Schema 生成类型入库 + Ajv 校验器裸入口,build → dist 随包,check:generated 防漂移(开发计划 §3A CT-1;设计 §9)\n\n- scripts/schema-registry.mjs:key → schemas/ 文件 → 类型名的唯一来源(12 个 Schema);scripts/generate-types.mjs 经 json-schema-to-typescript 16.0.0 生成 generated/*.ts + registry.ts + index.ts 并入库(根类型名取自登记表,不取 $id / title),--check 对比磁盘:缺失 / 差异 / 多余文件均失败\n- src/validators.ts:Ajv 2020(8.20.0 + ajv-formats 3.0.1)按 key 懒编译;validate / isValid / assertValid / schemaOf(副本)/ validateFact(信封 + facts/\u003cfact_type\u003e.v\u003cmajor\u003e 载荷,未登记载荷 Schema 以 payloadSchema 失败关闭)/ factPayloadKey;未知 key 抛 RangeError;CJS 默认导出经 .default 取值以兼容 NodeNext 类型\n- package.json:main / types / exports[\".\"] → dist/src/index.js,files 加 dist,脚本 build(tsc)/ typecheck / generate / check:generated;test 与 check:local 先 build;依赖全部 exact pin;pnpm-lock.yaml 入库;schemas/ 与 catalogs/ 未改\n- 测试:test/validators.test.mjs(examples 4 份 + catalogs 2 份 + 12 份 AppManifest 正例、validateFact 载荷链、缺字段 / 多字段 / 格式 / 未登记 Fact / 未知 key 负例、schemaOf 副本不可放宽)+ test/generate-types.test.mjs(登记表唯一性;--check 在篡改与多余文件时必失败)\n- CI:platform.yml public-static / static 先从公共 npm 安装 contracts 依赖(frozen lockfile),pack 前 build;publish-packages.yml 打包前 enable pnpm + install + build(发布仍 --ignore-scripts)\n- 证据:pnpm --dir contracts check:local 99/99 0 skip;scratchpad 独立克隆模拟 exit 0、83 过 / 16 skip / 0 失败;npm pack --dry-run 85 文件(含 dist/,无 src / generated / test / node_modules);根 check:pins 29 处 exact、governance 测试 85/85\n- 偏差登记:设计 §9 写 zod 校验器,本实现按开发计划 CT-1 用 Ajv 直接编译 JSON Schema 以保 Schema 唯一真源(开发计划 §6 #17);SOURCE.md / README / 仓 README / CLAUDE 状态行同步\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-12T01:09:40-07:00"},"CompareURL":"luoanwu/enterprise-platform/compare/0bceefc14d66a2f3544ff1036cbf467d80e2a9ec...6c7f04cb97ab7909f083fd60c790ecda34e9b8ee","Len":5}... |