| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0bceefc14d66a2f3544ff1036cbf467d80e2a9ec","after":"6c7f04cb97ab7909f083fd60c790ecda34e9b8ee","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/0bceefc14d66a2f3544ff1036cbf467d80e2a9ec...6c7f04cb97ab7909f083fd60c790ecda34e9b8ee","commits":[{"id":"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","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/6c7f04cb97ab7909f083fd60c790ecda34e9b8ee","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-12T01:09:40-07:00","added":["contracts/generated/ActorContextV1.ts","contracts/generated/AppManifestV1.ts","contracts/generated/EmploymentProjectionV1.ts","contracts/generated/EmploymentScopeInvalidationProjectionV1.ts","contracts/generated/EmploymentTransferredV1.ts","contracts/generated/FactEnvelopeV1.ts","contracts/generated/PermissionCatalogV1.ts","contracts/generated/PermissionDecisionRequestV1.ts","contracts/generated/PermissionDecisionResponseV1.ts","contracts/generated/PlatformProjectCatalogV1.ts","contracts/generated/PublicFileRefV1.ts","contracts/generated/RequestContextV1.ts","contracts/generated/index.ts","contracts/generated/registry.ts","contracts/pnpm-lock.yaml","contracts/scripts/generate-types.mjs","contracts/scripts/schema-registry.mjs","contracts/src/index.ts","contracts/src/validators.ts","contracts/test/generate-types.test.mjs","contracts/test/validators.test.mjs","contracts/tsconfig.json"],"removed":[],"modified":[".github/workflows/platform.yml",".github/workflows/publish-packages.yml","CLAUDE.md","README.md","contracts/README.md","contracts/SOURCE.md","contracts/package.json"]},{"id":"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","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a4cd6d7af52b77064984a87bbdef3459e574b4a3","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-12T01:07:55-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]},{"id":"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","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/0ac4419e16662d55aab6bc5a74c2184de26e041b","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-12T01:07:20-07:00","added":[],"removed":[],"modified":["runtime/reports/agent-adapters.latest.json","runtime/reports/conformance-matrix.latest.json","runtime/reports/contract-consumers.latest.json","runtime/reports/docs-truth.latest.json","runtime/reports/dual-backend-parity.latest.json","runtime/reports/fork-readiness.latest.json","runtime/reports/governance-docs.latest.json","runtime/reports/governance-rules.latest.json","runtime/reports/governance-status.latest.json","runtime/reports/governance.latest.json","runtime/reports/migrations.latest.json","runtime/reports/naming.latest.json","runtime/reports/runtime-governance.latest.json","runtime/reports/schema-sync.latest.json","runtime/reports/statemachine-write-guard.latest.json","runtime/reports/validation-source.latest.json"]},{"id":"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","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/aeef416487271531069d364a1f91dc3ae04f42fd","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-12T01:05:45-07:00","added":[],"removed":[],"modified":["runtime/CLAUDE.md","runtime/reports/baseline.json","runtime/reports/conformance-differential.latest.json","runtime/reports/runtime-acceptance.latest.json","runtime/reports/ui-acceptance.latest.json"]},{"id":"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","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/1c8a00ddbe6a4c25791df20e425b4817dcd115b6","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-12T01:03:02-07:00","added":["runtime/clients/README.md","runtime/clients/permission/README.md","runtime/clients/permission/package.json","runtime/clients/permission/src/index.test.ts","runtime/clients/permission/src/index.ts","runtime/clients/permission/tsconfig.json","runtime/test/port/clients.test.ts"],"removed":[],"modified":[".github/workflows/platform.yml","runtime/apps/api-nestjs/package.json","runtime/apps/api-nestjs/test/platform.http.acceptance.test.ts","runtime/pnpm-lock.yaml","runtime/pnpm-workspace.yaml","runtime/test/package.json"]}],"total_commits":0,"head_commit":{"id":"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","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/6c7f04cb97ab7909f083fd60c790ecda34e9b8ee","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-12T01:09:40-07:00","added":["contracts/generated/ActorContextV1.ts","contracts/generated/AppManifestV1.ts","contracts/generated/EmploymentProjectionV1.ts","contracts/generated/EmploymentScopeInvalidationProjectionV1.ts","contracts/generated/EmploymentTransferredV1.ts","contracts/generated/FactEnvelopeV1.ts","contracts/generated/PermissionCatalogV1.ts","contracts/generated/PermissionDecisionRequestV1.ts","contracts/generated/PermissionDecisionResponseV1.ts","contracts/generated/PlatformProjectCatalogV1.ts","contracts/generated/PublicFileRefV1.ts","contracts/generated/RequestContextV1.ts","contracts/generated/index.ts","contracts/generated/registry.ts","contracts/pnpm-lock.yaml","contracts/scripts/generate-types.mjs","contracts/scripts/schema-registry.mjs","contracts/src/index.ts","contracts/src/validators.ts","contracts/test/generate-types.test.mjs","contracts/test/validators.test.mjs","contracts/tsconfig.json"],"removed":[],"modified":[".github/workflows/platform.yml",".github/workflows/publish-packages.yml","CLAUDE.md","README.md","contracts/README.md","contracts/SOURCE.md","contracts/package.json"]},"repository":{"id":116,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"enterprise-platform","full_name":"luoanwu/enterprise-platform","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":2635,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/enterprise-platform/languages","html_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/enterprise-platform","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/enterprise-platform.git","clone_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-09-11T07:33:25+08:00","updated_at":"2026-09-12T15:55:53+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}... |