|
24130
|
chore(reports): B2 的四十一份三级证据 回绑 @ d1eb586,刷新快照锚点
|
76
|
5
|
governance.yml
|
74
|
5
|
0
|
refs/heads/main
|
91b5257007ab9d588dcada5c5ca8d0c41a024bb9
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"3deb4ea37b83c2e2977c9c2b8e8166c101002860","after":"91b5257007ab9d588dcada5c5ca8d0c41a024bb9","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/3deb4ea37b83c2e2977c9c2b8e8166c101002860...91b5257007ab9d588dcada5c5ca8d0c41a024bb9","commits":[{"id":"91b5257007ab9d588dcada5c5ca8d0c41a024bb9","message":"chore(reports): B2 的四十一份三级证据 回绑 @ d1eb586,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 d1eb586(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=d1eb586、worktreeDirty:false):\n静态 28 + 运行态 13。\n\n运行态实测与基线逐项持平,**tenantId 收敛在真实写链上行为中性**:\n testsPassed 733(基线 733)· behaviorParityCases 204(基线 204)· testFailures 0\n 87 项指标零违规\n静态整轮 28 步全执行、前 27 绿,末步 check:kernel-admission 仍是那 8 处已知诚实红。\n\n本批次跑了三轮 runtime,前两轮红,都不是 B2 的代码问题,如实记录:\n\n一、第一轮 outcomes.integration.test.ts「outcome not opened in time」(15 秒 E2E 超时)。\n 判为偶发,依据三条:该测试用 tenant-a-nestjs-outcome,在新 schema 下合法;整份日志里\n 新校验的拒绝消息 / ZodError / invalid_string **0 次命中**;同一份代码隔离重跑该文件\n 14/14 通过。第三轮整轮亦一次过。\n 顺带记一个行为:**失败的 runtime 会删掉 8 份运行态报告**(跑到一半中止、未重新生成)。\n\n二、第二轮测试全过(733 / 204-204 / 0 失败)但整轮记 failed,红在末尾的文档复核\n governance-kernel-boundary-number-consistency。根因是本会话的一次操作失误:\n `git restore reports/` 用了目录级范围,把已重新生成的 kernel-boundaries.latest.json\n 退回 HEAD 版(143/143),而 CLAUDE.md 已是 144/144。重跑静态后边界报告回到 144/144,\n 又撞上 governance-number-evidence-shape(要求一份 passed 的 runtime),于是必须再跑\n 第三轮才解环——这正是 CLAUDE.md 记载过的那个环。\n\n 同一次失误还抹掉了三份 reports/ui-*.latest.json 的未提交改动(不属本会话)。\n 已用 git fsck --lost-found 从游离 blob 全数找回并逐字核对:它们是 2026-09-15 的 UI 验收,\n 绑 c433d57 且 dirty=false。本提交仍未包含它们。\n 教训具体化:reports/ 下同时存在「本会话产出的」与「别人的」两类文件,任何范围操作都会\n 同时命中两类,**还原必须逐文件点名**。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/91b5257007ab9d588dcada5c5ca8d0c41a024bb9","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-18T07:31:09-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},{"id":"d1eb5860c4337cf457a03c76670d2551dc848cee","message":"feat(contracts): B2 迁入内核租户原语,收敛 tenantId 的三套口径为单源\n\n立项 B2 原写「净迁入六个」。开工时改了做法并写回立项:**净迁入的模块不该先暴露后接线**。\napi-error / replay-buffer / request-context / platform-ports / alert 只加到 barrel 而不接线,\n就是新增零消费者的 CORE 面——正是本仓 check:kernel-admission 的 K5 在盯、K4 判「声明无回执」\n的同型。改为**接线时才迁入**。六个里只有 tenant 是「迁入即能用」的,本批只做它。\n\n一、packages/contracts/src/tenant.ts 转发 @juhai/kernel 的 11 个租户解析原语。\n 这个名字是上一步 tenant.ts → authorization.ts 改名腾出来的;本仓此前**完全没有这一组**。\n\n二、用它收敛 tenantId 的三套口径(8 处 / 6 个文件):\n z.string().min(1) × 6(无上限、无字符约束) → tenantIdSchema\n .max(128) × 2(有长度无形状) → tenantIdSchema\n ^ten_.+$(事实投影,自成一套) → **叠加**在内核形状之上,不再另起\n\n 判据直接委托 normalizeTenantId,不在仓内重写正则——重写就又是一套口径。\n 用 normalizeTenantId(v) === v 而非 !== undefined:后者放行带首尾空白的值\n (normalize 先 trim 再判),于是「校验通过的值」与「真正该存的值」不是同一个。\n\n收紧实测咬住 11/11。B2 之前 z.string().min(1) 会放行全部这些:\"\"、\" t1 \"、\"t/1\"、\n**\"t\\n1\"**、\"_t\"、129 字符。含换行符那条是框架注释点名的伪造日志行向量(NestJS 侧有字符串\n拼接日志);129 字符那条对应 users 表 @@unique([tenantId, email]) 撞 Postgres btree 约\n2704 字节行上限打 500。也就是说本仓在此之前**没有任何 tenantId 形状与长度校验**。\n\n三处门禁如实红过再修,没有一处先改门禁:\n check:kernel-boundaries B3 新内核面未归类 → tenant.ts 归 CORE(contractModules 32)\n check:kernel-packages P7 公开面变更须伴随版本上调 → @repo/contracts 1.18.0 → 1.19.0\n check:kernel-admission K1 导出清单漂移 → 重签(40 模块 / 756 导出)\n连带同步接入手册下游锁行与 CLAUDE.md 边界数字 143/143 → 144/144。\n\n验证:contracts 312/312 · typecheck 13/13 · 整轮静态 28 步前 27 绿(末步仍是那 8 处已知红)。\n运行态另行重跑后回绑——本提交不含任何运行态报告。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/d1eb5860c4337cf457a03c76670d2551dc848cee","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-18T07:04:17-07:00","added":["packages/contracts/src/tenant.ts"],"removed":[],"modified":["CLAUDE.md","docs/product-extension-guide.md","kernel.boundaries.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/employment-projection.ts","packages/contracts/src/identity.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/kernel.ts","packages/contracts/src/llm-governance.ts","packages/contracts/src/realtime.ts","packages/contracts/src/user.ts"]}],"total_commits":0,"head_commit":{"id":"91b5257007ab9d588dcada5c5ca8d0c41a024bb9","message":"chore(reports): B2 的四十一份三级证据 回绑 @ d1eb586,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 d1eb586(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=d1eb586、worktreeDirty:false):\n静态 28 + 运行态 13。\n\n运行态实测与基线逐项持平,**tenantId 收敛在真实写链上行为中性**:\n testsPassed 733(基线 733)· behaviorParityCases 204(基线 204)· testFailures 0\n 87 项指标零违规\n静态整轮 28 步全执行、前 27 绿,末步 check:kernel-admission 仍是那 8 处已知诚实红。\n\n本批次跑了三轮 runtime,前两轮红,都不是 B2 的代码问题,如实记录:\n\n一、第一轮 outcomes.integration.test.ts「outcome not opened in time」(15 秒 E2E 超时)。\n 判为偶发,依据三条:该测试用 tenant-a-nestjs-outcome,在新 schema 下合法;整份日志里\n 新校验的拒绝消息 / ZodError / invalid_string **0 次命中**;同一份代码隔离重跑该文件\n 14/14 通过。第三轮整轮亦一次过。\n 顺带记一个行为:**失败的 runtime 会删掉 8 份运行态报告**(跑到一半中止、未重新生成)。\n\n二、第二轮测试全过(733 / 204-204 / 0 失败)但整轮记 failed,红在末尾的文档复核\n governance-kernel-boundary-number-consistency。根因是本会话的一次操作失误:\n `git restore reports/` 用了目录级范围,把已重新生成的 kernel-boundaries.latest.json\n 退回 HEAD 版(143/143),而 CLAUDE.md 已是 144/144。重跑静态后边界报告回到 144/144,\n 又撞上 governance-number-evidence-shape(要求一份 passed 的 runtime),于是必须再跑\n 第三轮才解环——这正是 CLAUDE.md 记载过的那个环。\n\n 同一次失误还抹掉了三份 reports/ui-*.latest.json 的未提交改动(不属本会话)。\n 已用 git fsck --lost-found 从游离 blob 全数找回并逐字核对:它们是 2026-09-15 的 UI 验收,\n 绑 c433d57 且 dirty=false。本提交仍未包含它们。\n 教训具体化:reports/ 下同时存在「本会话产出的」与「别人的」两类文件,任何范围操作都会\n 同时命中两类,**还原必须逐文件点名**。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/91b5257007ab9d588dcada5c5ca8d0c41a024bb9","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-18T07:31:09-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":87356,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-18T17:38:56+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"}}...
|
push
|
2
|
36
|
1789741873
|
1789741882
|
0
|
1789741873
|
1789741896
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24131
|
chore(reports): B2 的四十一份三级证据 回绑 @ d1eb586,刷新快照锚点
|
76
|
5
|
platform-governance.yml
|
75
|
5
|
0
|
refs/heads/main
|
91b5257007ab9d588dcada5c5ca8d0c41a024bb9
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"3deb4ea37b83c2e2977c9c2b8e8166c101002860","after":"91b5257007ab9d588dcada5c5ca8d0c41a024bb9","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/3deb4ea37b83c2e2977c9c2b8e8166c101002860...91b5257007ab9d588dcada5c5ca8d0c41a024bb9","commits":[{"id":"91b5257007ab9d588dcada5c5ca8d0c41a024bb9","message":"chore(reports): B2 的四十一份三级证据 回绑 @ d1eb586,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 d1eb586(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=d1eb586、worktreeDirty:false):\n静态 28 + 运行态 13。\n\n运行态实测与基线逐项持平,**tenantId 收敛在真实写链上行为中性**:\n testsPassed 733(基线 733)· behaviorParityCases 204(基线 204)· testFailures 0\n 87 项指标零违规\n静态整轮 28 步全执行、前 27 绿,末步 check:kernel-admission 仍是那 8 处已知诚实红。\n\n本批次跑了三轮 runtime,前两轮红,都不是 B2 的代码问题,如实记录:\n\n一、第一轮 outcomes.integration.test.ts「outcome not opened in time」(15 秒 E2E 超时)。\n 判为偶发,依据三条:该测试用 tenant-a-nestjs-outcome,在新 schema 下合法;整份日志里\n 新校验的拒绝消息 / ZodError / invalid_string **0 次命中**;同一份代码隔离重跑该文件\n 14/14 通过。第三轮整轮亦一次过。\n 顺带记一个行为:**失败的 runtime 会删掉 8 份运行态报告**(跑到一半中止、未重新生成)。\n\n二、第二轮测试全过(733 / 204-204 / 0 失败)但整轮记 failed,红在末尾的文档复核\n governance-kernel-boundary-number-consistency。根因是本会话的一次操作失误:\n `git restore reports/` 用了目录级范围,把已重新生成的 kernel-boundaries.latest.json\n 退回 HEAD 版(143/143),而 CLAUDE.md 已是 144/144。重跑静态后边界报告回到 144/144,\n 又撞上 governance-number-evidence-shape(要求一份 passed 的 runtime),于是必须再跑\n 第三轮才解环——这正是 CLAUDE.md 记载过的那个环。\n\n 同一次失误还抹掉了三份 reports/ui-*.latest.json 的未提交改动(不属本会话)。\n 已用 git fsck --lost-found 从游离 blob 全数找回并逐字核对:它们是 2026-09-15 的 UI 验收,\n 绑 c433d57 且 dirty=false。本提交仍未包含它们。\n 教训具体化:reports/ 下同时存在「本会话产出的」与「别人的」两类文件,任何范围操作都会\n 同时命中两类,**还原必须逐文件点名**。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/91b5257007ab9d588dcada5c5ca8d0c41a024bb9","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-18T07:31:09-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},{"id":"d1eb5860c4337cf457a03c76670d2551dc848cee","message":"feat(contracts): B2 迁入内核租户原语,收敛 tenantId 的三套口径为单源\n\n立项 B2 原写「净迁入六个」。开工时改了做法并写回立项:**净迁入的模块不该先暴露后接线**。\napi-error / replay-buffer / request-context / platform-ports / alert 只加到 barrel 而不接线,\n就是新增零消费者的 CORE 面——正是本仓 check:kernel-admission 的 K5 在盯、K4 判「声明无回执」\n的同型。改为**接线时才迁入**。六个里只有 tenant 是「迁入即能用」的,本批只做它。\n\n一、packages/contracts/src/tenant.ts 转发 @juhai/kernel 的 11 个租户解析原语。\n 这个名字是上一步 tenant.ts → authorization.ts 改名腾出来的;本仓此前**完全没有这一组**。\n\n二、用它收敛 tenantId 的三套口径(8 处 / 6 个文件):\n z.string().min(1) × 6(无上限、无字符约束) → tenantIdSchema\n .max(128) × 2(有长度无形状) → tenantIdSchema\n ^ten_.+$(事实投影,自成一套) → **叠加**在内核形状之上,不再另起\n\n 判据直接委托 normalizeTenantId,不在仓内重写正则——重写就又是一套口径。\n 用 normalizeTenantId(v) === v 而非 !== undefined:后者放行带首尾空白的值\n (normalize 先 trim 再判),于是「校验通过的值」与「真正该存的值」不是同一个。\n\n收紧实测咬住 11/11。B2 之前 z.string().min(1) 会放行全部这些:\"\"、\" t1 \"、\"t/1\"、\n**\"t\\n1\"**、\"_t\"、129 字符。含换行符那条是框架注释点名的伪造日志行向量(NestJS 侧有字符串\n拼接日志);129 字符那条对应 users 表 @@unique([tenantId, email]) 撞 Postgres btree 约\n2704 字节行上限打 500。也就是说本仓在此之前**没有任何 tenantId 形状与长度校验**。\n\n三处门禁如实红过再修,没有一处先改门禁:\n check:kernel-boundaries B3 新内核面未归类 → tenant.ts 归 CORE(contractModules 32)\n check:kernel-packages P7 公开面变更须伴随版本上调 → @repo/contracts 1.18.0 → 1.19.0\n check:kernel-admission K1 导出清单漂移 → 重签(40 模块 / 756 导出)\n连带同步接入手册下游锁行与 CLAUDE.md 边界数字 143/143 → 144/144。\n\n验证:contracts 312/312 · typecheck 13/13 · 整轮静态 28 步前 27 绿(末步仍是那 8 处已知红)。\n运行态另行重跑后回绑——本提交不含任何运行态报告。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/d1eb5860c4337cf457a03c76670d2551dc848cee","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-18T07:04:17-07:00","added":["packages/contracts/src/tenant.ts"],"removed":[],"modified":["CLAUDE.md","docs/product-extension-guide.md","kernel.boundaries.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/employment-projection.ts","packages/contracts/src/identity.ts","packages/contracts/src/index.ts","packages/contracts/src/job.ts","packages/contracts/src/kernel.ts","packages/contracts/src/llm-governance.ts","packages/contracts/src/realtime.ts","packages/contracts/src/user.ts"]}],"total_commits":0,"head_commit":{"id":"91b5257007ab9d588dcada5c5ca8d0c41a024bb9","message":"chore(reports): B2 的四十一份三级证据 回绑 @ d1eb586,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 d1eb586(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=d1eb586、worktreeDirty:false):\n静态 28 + 运行态 13。\n\n运行态实测与基线逐项持平,**tenantId 收敛在真实写链上行为中性**:\n testsPassed 733(基线 733)· behaviorParityCases 204(基线 204)· testFailures 0\n 87 项指标零违规\n静态整轮 28 步全执行、前 27 绿,末步 check:kernel-admission 仍是那 8 处已知诚实红。\n\n本批次跑了三轮 runtime,前两轮红,都不是 B2 的代码问题,如实记录:\n\n一、第一轮 outcomes.integration.test.ts「outcome not opened in time」(15 秒 E2E 超时)。\n 判为偶发,依据三条:该测试用 tenant-a-nestjs-outcome,在新 schema 下合法;整份日志里\n 新校验的拒绝消息 / ZodError / invalid_string **0 次命中**;同一份代码隔离重跑该文件\n 14/14 通过。第三轮整轮亦一次过。\n 顺带记一个行为:**失败的 runtime 会删掉 8 份运行态报告**(跑到一半中止、未重新生成)。\n\n二、第二轮测试全过(733 / 204-204 / 0 失败)但整轮记 failed,红在末尾的文档复核\n governance-kernel-boundary-number-consistency。根因是本会话的一次操作失误:\n `git restore reports/` 用了目录级范围,把已重新生成的 kernel-boundaries.latest.json\n 退回 HEAD 版(143/143),而 CLAUDE.md 已是 144/144。重跑静态后边界报告回到 144/144,\n 又撞上 governance-number-evidence-shape(要求一份 passed 的 runtime),于是必须再跑\n 第三轮才解环——这正是 CLAUDE.md 记载过的那个环。\n\n 同一次失误还抹掉了三份 reports/ui-*.latest.json 的未提交改动(不属本会话)。\n 已用 git fsck --lost-found 从游离 blob 全数找回并逐字核对:它们是 2026-09-15 的 UI 验收,\n 绑 c433d57 且 dirty=false。本提交仍未包含它们。\n 教训具体化:reports/ 下同时存在「本会话产出的」与「别人的」两类文件,任何范围操作都会\n 同时命中两类,**还原必须逐文件点名**。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/91b5257007ab9d588dcada5c5ca8d0c41a024bb9","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-18T07:31:09-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":87356,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-18T17:38:56+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"}}...
|
push
|
2
|
8
|
1789741882
|
1789741891
|
0
|
1789741873
|
1789741896
|
|
|
0
|
Edit
Delete
|
|
24132
|
chore(reports): 静态链首次 28/28 全通过 回绑 @ 801d916,刷新快照锚 chore(reports): 静态链首次 28/28 全通过 回绑 @ 801d916,刷新快照锚点...
|
76
|
5
|
governance.yml
|
76
|
5
|
0
|
refs/heads/main
|
4da2c656ae691428be3f177563952cba66c37b88
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"91b5257007ab9d588dcada5c5ca8d0c41a024bb9","after":"4da2c656ae691428be3f177563952cba66c37b88","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/91b5257007ab9d588dcada5c5ca8d0c41a024bb9...4da2c656ae691428be3f177563952cba66c37b88","commits":[{"id":"4da2c656ae691428be3f177563952cba66c37b88","message":"chore(reports): 静态链首次 28/28 全通过 回绑 @ 801d916,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 801d916(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=801d916、worktreeDirty:false)。\n**pnpm check 退出码 0:28/28 个步骤通过**——自 check:kernel-admission 引入以来首次整链绿,\n也是本仓静态轴扩到 28 步后的首次。\n\n绿的成色写在实现提交里,此处只记边界:唯一没有机器回执的 CORE.crossProductRequired 走的是\nevidenceDeferred 五字段登记(期限 2026-12-18、触发条件=第二个产品真实装载),它在报告里是\nobserved 一行,**不是绿,是登记在案的缺证**。到期不补即转红。\n\n运行态未受本批影响(只动门禁、注册表、夹具与文档,未动 apps/packages 运行代码),\nruntime 报告仍绑在上一批的 d1eb586,13 份运行态证据未重跑也未失效。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/4da2c656ae691428be3f177563952cba66c37b88","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-18T07:42:54-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"801d916f36af0ee32c77b2138ec9afcf14b34db7","message":"feat(governance): K3/K4 裁决——八处准入声明逐条补上真回执,静态链首次 28/28\n\ncheck:kernel-admission 引入时诚实红 8 处(K3 一处 + K4 七处)。本批逐条裁决并清零,\n**没有一处是把判据改松**——三条是补实体,一条是承认无法证明。\n\n一、K3(跨产品证据只有命名空间导入)→ 补实体\n 下游夹具此前只有 10 个 import * as,按构造在契约模块全空时同样通过。改为携带 5 个\n **真实被产品消费**的符号(ProductManifestInput / Composition / RuntimeContractCatalog /\n DataContractImplementation / EventContractImplementation,实测自唯一装载的 juhai.hr)的\n 具名类型导入并用于类型位置——编译通过才第一次构成「下游能按名字用上这些契约」的证据。\n\n二、K4 的结构性问题:两条门禁要求互相冲突,拆字段解决\n check-kernel-boundaries 的 B2 明令 evidenceSources **不得指 reports/**(运行产物随时重跑、\n 可被删除——本会话实测过:失败的 runtime 会删掉 8 份报告),而 K4 要求必须有机器回执。\n 两条各自成立,是同一件事的两半。改为两个字段:\n evidenceSources 持久判据源(脚本 / 词典 / 锁)——B2 判它\n evidenceReceipts 该判据源产出的机器回执——K4 判它\n K4 同时加强:回执须真实存在、带机器结论(status 或 violations)、带 provenance.gitSha、\n 且自身不是红盘。另加两条配套判据:\n · 禁止把**本门禁自己产出的报告**当回执(结构性自指:它只要有发现就是红的)\n · 确实无法被证据支撑时走 evidenceDeferred 五字段登记,降级 observed、过期转红\n\n三、逐条落点\n industryIndependent → kernel-boundaries(逐文件扫 CORE 源码不得内嵌已登记 Product\n 命名空间,check-kernel-boundaries.mjs:181)+ naming(业务词典)\n dualBackendGoverned → dual-backend-parity\n stableContract → kernel-packages\n crossProductRequired → **无回执,登记为「证据待补」**:本仓只装载一个产品,跨产品消费面\n 实测仅 5 个符号 / 34 个模块为零,该证据客观上无从产生。期限\n 2026-12-18,触发条件=第二个产品真实装载;到期转红。\n 硬指一份回执等于把自证换个地方做,不做。\n\n四、订正一处我自己的误判\n 先前称「parity 对 employment 零断言」——**查错了地方**:断言在 governance.registry.json\n 的 employment.parityAssertions 里,由 check-dual-backend-parity.mjs:507 通用执行,本就有\n 10 条(消费者标识分区、new FactInbox、FACT_READ_NOT_CONFIGURED fail-closed、\n autoCommit:false、未配 broker 返回 null)。\n 据此我一度把新断言**硬编码**进脚本,被 check:fork-readiness 的 F2 当场抓住\n (「门禁不得硬编码已登记业务标识」)——F2 抓的是我的代码,抓得对。已撤回硬编码,\n 把两条新不变式(事件载荷与行映射必须走契约单源)按注册表形式补入,10 → 14 条。\n\nkernel.boundaries.json 新增 evidenceNotes:逐份回执记录**它到底判了什么**,含上述订正与\n「dual-backend-behavior 的 63 个矩阵用例不含 llm/employment,故两个 pack 不以它为据」这类边界。\n指针只说明有机器判过,不代表覆盖该词全部含义。\n\n自检 10 → 17 条(新增回执质量、自指、证据待补三组,含 1 条基线正例、2 条防过度判红)。\n整轮 pnpm check:**28/28 步骤全部通过**,退出码 0——自本门禁引入以来首次。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/801d916f36af0ee32c77b2138ec9afcf14b34db7","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-18T07:41:16-07:00","added":[],"removed":[],"modified":["CLAUDE.md","governance.registry.json","kernel.boundaries.json","kernel.downstream.lock.json","scripts/check-dual-backend-parity.mjs","scripts/check-kernel-admission.mjs","tests/kernel-downstream-fixture/src/index.ts"]}],"total_commits":0,"head_commit":{"id":"4da2c656ae691428be3f177563952cba66c37b88","message":"chore(reports): 静态链首次 28/28 全通过 回绑 @ 801d916,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 801d916(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=801d916、worktreeDirty:false)。\n**pnpm check 退出码 0:28/28 个步骤通过**——自 check:kernel-admission 引入以来首次整链绿,\n也是本仓静态轴扩到 28 步后的首次。\n\n绿的成色写在实现提交里,此处只记边界:唯一没有机器回执的 CORE.crossProductRequired 走的是\nevidenceDeferred 五字段登记(期限 2026-12-18、触发条件=第二个产品真实装载),它在报告里是\nobserved 一行,**不是绿,是登记在案的缺证**。到期不补即转红。\n\n运行态未受本批影响(只动门禁、注册表、夹具与文档,未动 apps/packages 运行代码),\nruntime 报告仍绑在上一批的 d1eb586,13 份运行态证据未重跑也未失效。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/4da2c656ae691428be3f177563952cba66c37b88","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-18T07:42:54-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":87761,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-18T22:31:13+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"}}...
|
push
|
2
|
36
|
1789742578
|
1789742587
|
0
|
1789742578
|
1789742601
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24133
|
chore(reports): 静态链首次 28/28 全通过 回绑 @ 801d916,刷新快照锚 chore(reports): 静态链首次 28/28 全通过 回绑 @ 801d916,刷新快照锚点...
|
76
|
5
|
platform-governance.yml
|
77
|
5
|
0
|
refs/heads/main
|
4da2c656ae691428be3f177563952cba66c37b88
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"91b5257007ab9d588dcada5c5ca8d0c41a024bb9","after":"4da2c656ae691428be3f177563952cba66c37b88","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/91b5257007ab9d588dcada5c5ca8d0c41a024bb9...4da2c656ae691428be3f177563952cba66c37b88","commits":[{"id":"4da2c656ae691428be3f177563952cba66c37b88","message":"chore(reports): 静态链首次 28/28 全通过 回绑 @ 801d916,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 801d916(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=801d916、worktreeDirty:false)。\n**pnpm check 退出码 0:28/28 个步骤通过**——自 check:kernel-admission 引入以来首次整链绿,\n也是本仓静态轴扩到 28 步后的首次。\n\n绿的成色写在实现提交里,此处只记边界:唯一没有机器回执的 CORE.crossProductRequired 走的是\nevidenceDeferred 五字段登记(期限 2026-12-18、触发条件=第二个产品真实装载),它在报告里是\nobserved 一行,**不是绿,是登记在案的缺证**。到期不补即转红。\n\n运行态未受本批影响(只动门禁、注册表、夹具与文档,未动 apps/packages 运行代码),\nruntime 报告仍绑在上一批的 d1eb586,13 份运行态证据未重跑也未失效。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/4da2c656ae691428be3f177563952cba66c37b88","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-18T07:42:54-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"801d916f36af0ee32c77b2138ec9afcf14b34db7","message":"feat(governance): K3/K4 裁决——八处准入声明逐条补上真回执,静态链首次 28/28\n\ncheck:kernel-admission 引入时诚实红 8 处(K3 一处 + K4 七处)。本批逐条裁决并清零,\n**没有一处是把判据改松**——三条是补实体,一条是承认无法证明。\n\n一、K3(跨产品证据只有命名空间导入)→ 补实体\n 下游夹具此前只有 10 个 import * as,按构造在契约模块全空时同样通过。改为携带 5 个\n **真实被产品消费**的符号(ProductManifestInput / Composition / RuntimeContractCatalog /\n DataContractImplementation / EventContractImplementation,实测自唯一装载的 juhai.hr)的\n 具名类型导入并用于类型位置——编译通过才第一次构成「下游能按名字用上这些契约」的证据。\n\n二、K4 的结构性问题:两条门禁要求互相冲突,拆字段解决\n check-kernel-boundaries 的 B2 明令 evidenceSources **不得指 reports/**(运行产物随时重跑、\n 可被删除——本会话实测过:失败的 runtime 会删掉 8 份报告),而 K4 要求必须有机器回执。\n 两条各自成立,是同一件事的两半。改为两个字段:\n evidenceSources 持久判据源(脚本 / 词典 / 锁)——B2 判它\n evidenceReceipts 该判据源产出的机器回执——K4 判它\n K4 同时加强:回执须真实存在、带机器结论(status 或 violations)、带 provenance.gitSha、\n 且自身不是红盘。另加两条配套判据:\n · 禁止把**本门禁自己产出的报告**当回执(结构性自指:它只要有发现就是红的)\n · 确实无法被证据支撑时走 evidenceDeferred 五字段登记,降级 observed、过期转红\n\n三、逐条落点\n industryIndependent → kernel-boundaries(逐文件扫 CORE 源码不得内嵌已登记 Product\n 命名空间,check-kernel-boundaries.mjs:181)+ naming(业务词典)\n dualBackendGoverned → dual-backend-parity\n stableContract → kernel-packages\n crossProductRequired → **无回执,登记为「证据待补」**:本仓只装载一个产品,跨产品消费面\n 实测仅 5 个符号 / 34 个模块为零,该证据客观上无从产生。期限\n 2026-12-18,触发条件=第二个产品真实装载;到期转红。\n 硬指一份回执等于把自证换个地方做,不做。\n\n四、订正一处我自己的误判\n 先前称「parity 对 employment 零断言」——**查错了地方**:断言在 governance.registry.json\n 的 employment.parityAssertions 里,由 check-dual-backend-parity.mjs:507 通用执行,本就有\n 10 条(消费者标识分区、new FactInbox、FACT_READ_NOT_CONFIGURED fail-closed、\n autoCommit:false、未配 broker 返回 null)。\n 据此我一度把新断言**硬编码**进脚本,被 check:fork-readiness 的 F2 当场抓住\n (「门禁不得硬编码已登记业务标识」)——F2 抓的是我的代码,抓得对。已撤回硬编码,\n 把两条新不变式(事件载荷与行映射必须走契约单源)按注册表形式补入,10 → 14 条。\n\nkernel.boundaries.json 新增 evidenceNotes:逐份回执记录**它到底判了什么**,含上述订正与\n「dual-backend-behavior 的 63 个矩阵用例不含 llm/employment,故两个 pack 不以它为据」这类边界。\n指针只说明有机器判过,不代表覆盖该词全部含义。\n\n自检 10 → 17 条(新增回执质量、自指、证据待补三组,含 1 条基线正例、2 条防过度判红)。\n整轮 pnpm check:**28/28 步骤全部通过**,退出码 0——自本门禁引入以来首次。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/801d916f36af0ee32c77b2138ec9afcf14b34db7","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-18T07:41:16-07:00","added":[],"removed":[],"modified":["CLAUDE.md","governance.registry.json","kernel.boundaries.json","kernel.downstream.lock.json","scripts/check-dual-backend-parity.mjs","scripts/check-kernel-admission.mjs","tests/kernel-downstream-fixture/src/index.ts"]}],"total_commits":0,"head_commit":{"id":"4da2c656ae691428be3f177563952cba66c37b88","message":"chore(reports): 静态链首次 28/28 全通过 回绑 @ 801d916,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 801d916(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=801d916、worktreeDirty:false)。\n**pnpm check 退出码 0:28/28 个步骤通过**——自 check:kernel-admission 引入以来首次整链绿,\n也是本仓静态轴扩到 28 步后的首次。\n\n绿的成色写在实现提交里,此处只记边界:唯一没有机器回执的 CORE.crossProductRequired 走的是\nevidenceDeferred 五字段登记(期限 2026-12-18、触发条件=第二个产品真实装载),它在报告里是\nobserved 一行,**不是绿,是登记在案的缺证**。到期不补即转红。\n\n运行态未受本批影响(只动门禁、注册表、夹具与文档,未动 apps/packages 运行代码),\nruntime 报告仍绑在上一批的 d1eb586,13 份运行态证据未重跑也未失效。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/4da2c656ae691428be3f177563952cba66c37b88","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-18T07:42:54-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":87761,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-18T22:31:13+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"}}...
|
push
|
2
|
8
|
1789742587
|
1789742596
|
0
|
1789742578
|
1789742601
|
|
|
0
|
Edit
Delete
|
|
24134
|
chore(reports): dev 常驻运行时切换后的部署门禁回绑 @ 06c3d4c
|
116
|
5
|
platform.yml
|
119
|
5
|
0
|
refs/heads/main
|
0c6a1918aa223b1779ce4653ba2c4e4609aea336
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"05e3826e9e9e4dbbdd753252c2134b8494b08f2b","after":"0c6a1918aa223b1779ce4653ba2c4e4609aea336","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/05e3826e9e9e4dbbdd753252c2134b8494b08f2b...0c6a1918aa223b1779ce4653ba2c4e4609aea336","commits":[{"id":"0c6a1918aa223b1779ce4653ba2c4e4609aea336","message":"chore(reports): dev 常驻运行时切换后的部署门禁回绑 @ 06c3d4c\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/0c6a1918aa223b1779ce4653ba2c4e4609aea336","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-18T07:34:13-07:00","added":[],"removed":[],"modified":["reports/deployed-runtime.latest.json"]},{"id":"06c3d4cb7fd09b2b44e621a56d7b14653bb8b445","message":"chore(reports): runtime 镜像重建与冒烟证据回绑 @ 05e3826\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/06c3d4cb7fd09b2b44e621a56d7b14653bb8b445","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-18T07:33:44-07:00","added":[],"removed":[],"modified":["reports/image-digest.json","reports/image-smoke.latest.json"]}],"total_commits":0,"head_commit":{"id":"0c6a1918aa223b1779ce4653ba2c4e4609aea336","message":"chore(reports): dev 常驻运行时切换后的部署门禁回绑 @ 06c3d4c\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/0c6a1918aa223b1779ce4653ba2c4e4609aea336","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-18T07:34:13-07:00","added":[],"removed":[],"modified":["reports/deployed-runtime.latest.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":18767,"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":43,"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-18T22:42:51+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"}}...
|
push
|
2
|
30
|
1789742609
|
1789742647
|
0
|
1789742609
|
1789742676
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24135
|
fix(contracts): 通知与 Webhook 规则补入参体检——一处倒向放行、两处崩溃面与 fix(contracts): 通知与 Webhook 规则补入参体检——一处倒向放行、两处崩溃面与目标地址的同义写法...
|
116
|
5
|
platform.yml
|
120
|
5
|
0
|
refs/heads/main
|
c190a6ab5d2c50e4c90f027bbcca72f1f3050005
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0c6a1918aa223b1779ce4653ba2c4e4609aea336","after":"c190a6ab5d2c50e4c90f027bbcca72f1f3050005","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/0c6a1918aa223b1779ce4653ba2c4e4609aea336...c190a6ab5d2c50e4c90f027bbcca72f1f3050005","commits":[{"id":"c190a6ab5d2c50e4c90f027bbcca72f1f3050005","message":"fix(contracts): 通知与 Webhook 规则补入参体检——一处倒向放行、两处崩溃面与目标地址的同义写法\n\n迁入版把策略快照一侧校验到底(normalizeSnapshot 逐字段抛),请求一侧、目标地址一侧与夹具评估器三处漏风。\n补强前对 dist 逐条实测:\n\n- 放行面(唯一一处方向倒向放行):三个状态位按真值判,`replayAuthorized: \"false\"` 在 `!value` 下为 false,\n 未授权重放被判成已授权 → DELIVER;planner 原样透传这三位,计划面同样通。现在只认布尔字面量。\n- 崩溃面:classifyNotificationEffect(undefined) / classifyProviderOutcome(undefined) 抛 TypeError 而不是拒绝,\n 夹具的 effect / provider 两条规则都能直接触发——门禁那时拿到的是异常不是判定,落到消费侧是 500 不是拒绝。\n- 目标地址(C08.05 / 蓝图「私网地址失败关闭」):isPrivateLiteral 只认四段十进制,2130706433 / 0x7f000001 /\n 0177.0.0.1 / 127.1 全判成公网;0.0.0.0/8、CGNAT 100.64/10、组播与保留段、.internal、末尾点均未覆盖。\n 现在数字形主机一律按 IP 字面量处理,只放行严格四段十进制的公网地址;allowedHosts 自己先过这道地板\n (WEBHOOK_ALLOWED_HOST_NOT_PUBLIC),小写归一后再查一次重名。\n- 本次唯一放宽的一处,据实登记:迁入版按字符串前缀 fc / fd / fe80 判私网 IPv6,fc-portal.example.com 这类\n 正常域名被误判成私网。改判后它可用,但仍须先进运营批准的 allowlist 且为 HTTPS,不构成新的可达面。\n- 死代码:WEBHOOK_TENANT_WILDCARD_FORBIDDEN 写在字符集校验之后,`*` 永远先报 WEBHOOK_ROUTE_TENANTS_INVALID,\n 蓝图写明的「tenant allowlist 禁止 *」从未以自己的名义拦下过。\n- 退避:decideProviderOutcome 原取 min(maximumBackoff, retryAfter),供应商回一个 Retry-After: 0 即可把批准过的\n 退避清零。现在外部回执只能把退避拉长到策略上界,上界语义与既有用例逐字不变。\n- 夹具评估器把两种非放行当成放行:SKIP_DUPLICATE 与 DLQ 都没有 reasons 字段,被 `\"reasons\" in r` 判成空数组\n = ACCEPT,与该文件自己第一句「只有 DELIVER / DELIVERED 算放行」正相反。另补 refresh 规则。\n- effect_id 改为强校验:五段必须是规范标识符(因此不含 :),否则 a:b+c 与 a+b:c 会拼出同一个 id;\n 请求一侧的标识符不再先 trim 再判定。\n\n合法快照与合法请求的判定结果逐字不变:迁入的 14 例断言一条未改。单测 14 → 24 例;夹具 8 → 17 例,并修好\n名不副实的 N06-plan-without-policy-denies-all——它此前只喂了两个字段的请求,压根走不到「无策略即拒」那一步。\n\n核验(工作树 dirty,报告未回绑,只绑本地):contracts build / typecheck 绿、本域单测 24/24、\ncontracts/test/*.test.mjs 330/330、check:fixtures 17 套件 236 例 0 失败 0 不可用(本域 17/17;用临时报告名跑,\n跑完删除,reports/ 未动)。负向实测两次:① 把 HEAD 版三支规则单独编译后喂新夹具,8 例新增负例全部不通过\n(N07/N10/N11 直接放行、N08/N09 抛 TypeError、N12 换原因、N13/N14 旧评估器不识别 refresh);\n② 篡改 N10 的声明原因 → 门禁 exit 1 并点名该例,翻 expect → 被 id/expect 一致性先挡下,还原后 exit 0。\n\n未做:缺失模块完善清单 C12 的模板审批 / 多渠道 Provider / 签名防重放 / 渠道切换本仓仍一件没有(该行类型是\n「裁决」,前置是运行宿主 Q01),本轮仍是契约包形态,不代表通知服务上线;Catalog 登记未动(仍 module_e2,\ncode_truth 指工单仓 packages/notification-delivery);三个消费仓的 packages/notification-delivery 未同步;\n入站回调验签(C12.05)与 UNKNOWN 回执(C12.04)属判定面扩张,只登记未实现。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/c190a6ab5d2c50e4c90f027bbcca72f1f3050005","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-18T07:43:48-07:00","added":["contracts/src/domain/notification-webhook/value-guards.ts"],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/notification-webhook/fixture-evaluator.ts","contracts/src/domain/notification-webhook/notification-effect.ts","contracts/src/domain/notification-webhook/webhook-delivery-planner.ts","contracts/test/fixtures/notification-webhook.fixtures.json","contracts/test/notification-webhook-domain.test.mjs"]},{"id":"9d13fb058d2a0356797f26d1d17a4b2149b6ab97","message":"docs(runbook): 订正 CORS 一句——服务端代理不解 CORS,工作台吃的是 :3101 那个进程的白名单\n\n原文「控制面 Web 与 identity dev 走服务端代理,不吃这条」把两件事混了。代理只是把上游的\nAccess-Control-Allow-Origin 原样回传,吃不吃只看浏览器所在页面的 origin 与被请求 origin\n是否同源:控制面 Web 的页面与它的 /api 代理同源,不吃;工作台 dev(:3010)经 :3098 代理\n打到 :3101,跨源,放行的必须是 :3101 那个进程的 CORS_ORIGIN,而不是容器的\nPLATFORM_CORS_ORIGIN——后者 2026-09-18 补过、前者一直缺,于是总览两块读面全被浏览器拦成\n「依赖故障」,而服务端日志里是一次正常 200。今天按这句话排查,方向被带偏过一次。\n\n同轮登记两处仓外事实:identity dev 的 env 文件位置(企业控制面/.secrets/\nenterprise-platform-identity-dev.env,已含 CORS_ORIGIN=http://localhost:3010),\n以及工作台 API 基地址的单一出处(apps/workbench/.env.local,launch.json 不再覆盖)。\n\n作用域 = 文档订正,不含代码与门禁证据。本机 dev 实测:预检 204 / 三个读面 200 /\nidentity 探针 database:up redis:up,证据只绑本地运行态。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/9d13fb058d2a0356797f26d1d17a4b2149b6ab97","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-18T07:42:44-07:00","added":[],"removed":[],"modified":["docs/runbook.md"]},{"id":"13c7eb7271af67df9d0b4e5223bda3eaa4ab7b10","message":"fix(contracts): 跨域流程规则补入参体检,并补上 FLOW-01 与 effect 幂等两条自己没做到的红线\n\n迁入版的判定在「入参可信」时是对的,但本能力的真实入口是 JSON:夹具评估器、approved 快照、\n未来的 Owner Adapter 载荷都从反序列化来,TS 类型只在编译期成立。四类问题均有 dist 实测,非读代码推断。\n\n1. 崩溃面八处抛 TypeError 而不是拒绝。assessWorkflowDefinition(undefined) →\n Cannot read properties of undefined (reading 'domains');{}、domains 非数组、steps 非数组、\n 步骤缺 dependsOn、effectIdempotencyKey 是数字同理;LocalWorkflowPlanner.plan({}) →\n Cannot read properties of undefined (reading 'trim')。夹具 definition 与 plan 两条规则都能直接触发——\n 门禁那时拿到的是崩溃不是判定,落到消费侧是 500 不是拒绝。现在两侧都先按 unknown 体检:\n 定义非对象 → WORKFLOW_DEFINITION_INVALID,请求非对象或归属三件套非空串 → WORKFLOW_ATTRIBUTION_REQUIRED。\n\n2. 放行面三处脏值倒向合格。timeoutSeconds: \"abc\" 因 \"abc\" \u003c= 0 为 false 而合格;\n irreversibleEffect: 0 被当成可逆,整条不可逆效果的幂等键要求随之失效;steps: [] 的「流程」也合格,\n approved 快照喂进来就是一份零命令的 PLAN。现在 timeout 必须是正整数、irreversibleEffect 必须是布尔、\n 零步骤 → WORKFLOW_STEPS_REQUIRED。\n\n3. 判定面在两处确有扩张,都是本规则自己没做到自己的红线。FLOW-01 Eligibility 是开发计划写死的\n 第一道闸(「拒绝把域内定时任务和单域状态机迁入平台」),但迁入版只数 domains 声明了几个域,\n 不数步骤实际落在几个域——把单域状态机的 domains 写成两个即可整条绕过,实测\n {domains:[\"hr\",\"identity\"], steps:[两步都 ownerDomain:\"hr\"]} 判 ELIGIBLE。现在 Owner 面体检通过后\n 再数步骤真实跨度,沿用 NOT_CROSS_DOMAIN 不新增原因码。另一条红线写「不可逆外部效果使用独立\n effect idempotency,平台重放不得重复付款、通知」,但两个不可逆步骤共用同一把键时无人拦,\n 一次效果的幂等记录会压掉另一次 → 新增 EFFECT_IDEMPOTENCY_NOT_UNIQUE。\n\n4. 第三条扩张在 governed 步骤一侧:不可逆步骤既无同 Owner 补偿又不开人工接管时此前照常编进波次,\n 而退出门要求「每步唯一 Owner、timeout 和恢复责任明确」,这种步骤失败后没有任何恢复责任人 →\n STEP_RECOVERY_RESPONSIBILITY_REQUIRED。补偿仍是可选项:人工接管或补偿有其一即可,\n 可逆步骤不受约束,两条都有正向用例钉住。\n\n另修一处诊断损失:normalizeSnapshot 把定义体检的多条原因只抛第一条,改为逐条抛出。\n合法定义与合法请求的判定结果逐字不变,迁入的 11 例单测断言一条未改。\n\n覆盖:定向测试 11 → 22 例,补强用例另起两节;夹具 7 → 16 例(正 2 / 反 14),并给原 N01—N05\n补 reasons 声明——此前只断言「拒绝」,换一条原因拒绝也算过。\n\n未做(越界,已在 SOURCE.md 与蓝图增量节写明):流程实例、持久调度、补偿执行器、Timer、\nOwner Adapter 与 M5 分工一件未建,按缺失模块完善清单 C15 卡在运行宿主 Q01 与 G4,本轮仍是契约包形态,\n不代表编排平台上线;Catalog 登记一律未动(仍 candidate_e0 / E0);步骤 Permission 的资源归属仍不校验\n(ownerDomain \"hr\" 的步骤声明 identity 资源照样编进计划,而资源名与域的绑定在本包里没有可判定的真源,\n纯规则读不到 catalogs/permissions.json);commandIdempotencyKey 含定义版本号,同一实例升版重放会换键,\n不可逆效果由不含版本的 effectIdempotencyKey 兜底,改它属运行宿主裁决时一并定的事。\n\n证据:在仅含本提交改动的导出树上 tsc 与 typecheck 绿、定向 22/22、contract-cross-domain-workflow\n夹具 16/16;负向实测把 N07-declared-domains-without-real-owner-span 的声明原因改成 WORKFLOW_CYCLE,\n门禁 exit 1 并点名该例(reasons=[\"NOT_CROSS_DOMAIN\"]),还原后转绿。导出树里 governance-linter.test.mjs\n因 /tmp 下工作区根不可解析而失败,pristine HEAD 导出树同样失败,与本次改动无关;真实工作树\ncontracts:check:local 330/330、check:fixtures 17 套件 227 例 0 失败。工作树另有并行会话的 WIP,\n故本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/13c7eb7271af67df9d0b4e5223bda3eaa4ab7b10","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-18T07:42:22-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/cross-domain-workflow/workflow-definition.ts","contracts/src/domain/cross-domain-workflow/workflow-planner.ts","contracts/test/cross-domain-workflow-domain.test.mjs","contracts/test/fixtures/cross-domain-workflow.fixtures.json","docs/domain/workflow-definition-blueprint.md"]},{"id":"5720165763b35035e6778fe9a802493a16eb5aca","message":"fix(contracts): 会话准入规则补入参体检——四条 fail-open 与一处「兜底自己会抛」收口\n\n九项契约包自 2026-09-14 迁入以来一直是「原样迁入、未改语义」,本条是第一次动判定。\n起因是对 collaboration-messaging 逐条实测而非读代码:迁入版把策略快照一侧校验到底\n(normalizeSnapshot 逐字段抛并被工厂捕获),请求一侧整个信任声明类型,而声明类型\n约束不了 HTTP 与夹具送进来的 JSON。五条缺陷均可复现,且都打在该能力自己 README 的\n「最小验收」与蓝图的「失败闭合」上:\n\n1. 抛而不拒。三个导出在畸形 JSON 下抛 TypeError 而不是返回 REJECT。兜底的 bundled\n deny-all 也不例外——createRuntimeConversationAdmissionPlanner().plan({}) 抛异常,\n 即「什么都不放行」的最后一道在畸形入参下等于没有。\n\n2. 未知 senderType 放行,且 \"AI_AGENT\"(只改大小写)同样放行。AI_ATTRIBUTION_REQUIRED\n 只在严格等于 ai_agent 时触发,于是「AI 不得冒充人员」有一条改大小写就能走的绕过路径。\n 不做大小写归一化——归一化等于替冒充者补齐形状。\n\n3. 游标不绑定会话。ConversationAppendState 有 expectedTenantId 却没有会话标识,拿 conv-1\n 的游标判 conv-9 的消息得到 APPEND,planner 直接 ADMIT 并按 conv-9 生成幂等键;重复与\n 序列 Gap 判定全程可能在读另一个会话的账本。\n\n4. processedMessageIds 传成字符串时 includes 退化为子串判断,幂等两个方向都错:\n \"msg-1\" 不含 \"msg-2\" 则漏判重复,\"msg-1,msg-2\" 含则误判重复。\n\n5. memberActive 传成真值字符串即算在籍(原判据 !state.memberActive,\"false\" 是真值)。\n\n附带:hasAttachment 非布尔即拒。此前缺字段时 attachmentAuthorizationRequired 是\nundefined,下游 if (plan.attachmentAuthorizationRequired) 就跳过公共文件平台重新授权,\n等于「缺字段 = 不需要授权」。\n\n改法只收紧失败一侧,合法输入的判定结果逐字不变:迁入的 16 例断言一条未改,只给游标补了\n新的必填字段。expectedConversationId 做成必填而不是「在场才查」——可选只能拦住已经想起来\n要绑定的调用方,拦不住忘了的那个,而忘了的那个正是第 3 条的全部成因;破坏面可枚举且全在\n仓内(本包测试与夹具各一处),Catalog 上该项 candidate_e0 / code_truth 指向本目录 /\n上层真实消费者为零。ConversationAppendDecision 新增 CONVERSATION_BINDING_REQUIRED /\nCONVERSATION_MISMATCH / STATE_INVALID 三档(原先「序列非整数」复用 REJECT,与「消息体检\n未过」同码,改后 REJECT 专指后者);planner 新增 REQUEST_SHAPE_INVALID /\nATTACHMENT_FLAG_INVALID 两条原因与两条映射。新增原因一律排在既有原因之后判定,既有原因码\n的优先级未动。\n\n顺带修一条证据登记缺口:reports/fixtures.latest.json 的作用域只写到 runtime/modules,\n九个契约包套件的两类输入整个在作用域外——夹具用例在 contracts/test/fixtures/,判定用的\nevaluateFixturePayload 在 contracts/src/domain/。作用域写于只有运行时模块有夹具的时候,\n2026-09-14 迁入时没随迁,后果是改夹具或改规则都不会让这份报告过期,而它正是这九项在\nCatalog 上登记的证据之一。实据不用构造:本轮改动与并行会话的 public-file 改动同时在树上,\ncheck:evidence 仍不点它。补两条后该报告立刻转 EVIDENCE_WORKTREE_CHANGED,check:evidence\n由 4 条过期变 6 条——多出来的不是新问题,是此前看不见的问题。\n\n核验:contracts test 285 → 292(我的增量 +7,既有断言未改;树上现读 330,多出的是并行会话\n在途改动);check:fixtures 本套件 8 → 14 例(正 2 / 反 12)0 失败;负向实做:把 N11 的声明\n原因改成不会产生的串,门禁 exit 1 并点名该例,还原后 exit 0;governance 测试 340/340;\n工作区一致性 L4 / L10 / L13 均 0。\n\n未做(越界):会话 / 成员 / 消息账本、长连接服务、Fact、独立运行服务一件未建——按缺失模块\n完善清单 C16 卡在「裁决 · 实现」,前置是 Owner ADR、三消费者与 G4。Catalog 的\nimplementation_state / evidence_level / code_truth / evidence 一律未动(改登记须 CHG)。\n蓝图迁入原文逐字未改,硬化增量另起一节附在其后。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/5720165763b35035e6778fe9a802493a16eb5aca","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-18T07:41:37-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/collaboration-messaging/conversation-admission-planner.ts","contracts/src/domain/collaboration-messaging/conversation-message.ts","contracts/src/domain/collaboration-messaging/fixture-evaluator.ts","contracts/test/collaboration-messaging-domain.test.mjs","contracts/test/fixtures/collaboration-messaging.fixtures.json","docs/domain/conversation-message-blueprint.md","governance/evidence-scopes.json"]},{"id":"793d0a106f07c2b9974991a2a5953fdebc5be1b3","message":"fix(contracts): 公共文件规则补入参体检——plan 遇畸形请求此前抛 TypeError,非布尔授权位此前被判成放行\n\n迁入版本在「入参可信」的前提下是对的,但本能力的实际入口是 JSON:夹具评估器、策略快照、\n三个消费仓的载荷都从反序列化来,TS 类型只在编译期成立。判定面没有扩张,改的只是拿到脏值时往哪边倒。\n\n三个缺口(均有实测,非读代码推断):\n\n1. `LocalPublicFileAccessPlanner.plan()` 遇畸形请求抛 TypeError 而不是拒绝。补强前 dist 实测\n `plan({})` → `TypeError: Cannot read properties of undefined (reading 'trim')`,`plan(null)`\n 与缺 `file` 的请求同理。蓝图写的「失败闭合」只覆盖快照畸形(bundled deny-all),没覆盖请求畸形——\n 抛异常落到消费侧是 500,不是拒绝。现按同包 `webhook-delivery-planner.plan()` 的既有先例先体检请求:\n 非对象 → FILE_ACCESS_REQUEST_INVALID,归属三件套缺失或非字符串 → FILE_ACCESS_ATTRIBUTION_REQUIRED,\n `file` 不是对象 → FILE_REFERENCE_INVALID。\n\n2. 非布尔的授权位被判成放行。`if (!context.permissionGranted)` 对 \"false\" / 1 / {} 全部放行;\n `authorizationVersion \u003c requiredAuthorizationVersion` 与 `expiresAt \u003c= now` 在另一端缺失时都是 false,\n 即「比不出来」被当成「比过了」。现在授权位只认字面 true,两个比较的两端都必须是整数。\n\n3. `PublicFileRef.version` 声明为 \"v1\" 却从来没被校验,换版本的引用会被 v1 判定顺带放行。\n 加 FILE_REF_VERSION_UNSUPPORTED。\n\n覆盖:夹具评估器不再先把缺字段补成 \"\" / NaN(那层补齐等于夹具永远喂不进脏值,而脏值正是这次要固定的\n那一侧),payload 原样交给规则;新增 refresh 规则——planner 第三个公开方法此前在门禁上零覆盖。\n夹具 13 → 29 例(正 4 / 反 25),补齐六条此前只有单测、门禁上没有的策略白名单原因,以及\nFILE_ACCESS_ATTRIBUTION_REQUIRED / FILE_TENANT_NOT_ALLOWED 两条此前任何地方都没覆盖的原因;\n定向测试 15 → 22 例,迁入的 15 例一条未改。\n\n未做(需 CHG,已在 index.ts 抬头与 SOURCE.md 写明,不再沿用旧措辞):\nschemas/public-file-ref.v1.schema.json(version=1 数字 + ownerEntity*/storageRef)与本目录的\nPublicFileRef(version=\"v1\" 字符串 + sha256/size/mimeType/scanStatus)不是同一个对象——一份通得过\nSchema 的引用喂不进 assessPublicFileRef,反之亦然。合并属契约变更,不在本次范围。Catalog 登记未动\n(public-file 仍 module_e2、code_truth 指向工单仓 packages/attachments),三个消费仓的副本未同步本次补强。\n\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 22/22、contract-public-file 夹具 29/29;\n工作树另有并行会话的 WIP,故本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/793d0a106f07c2b9974991a2a5953fdebc5be1b3","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-18T07:38:28-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/public-file/fixture-evaluator.ts","contracts/src/domain/public-file/index.ts","contracts/src/domain/public-file/public-file-access-planner.ts","contracts/src/domain/public-file/public-file-ref.ts","contracts/test/fixtures/public-file.fixtures.json","contracts/test/public-file-domain.test.mjs","docs/domain/public-file-ref-blueprint.md"]}],"total_commits":0,"head_commit":{"id":"c190a6ab5d2c50e4c90f027bbcca72f1f3050005","message":"fix(contracts): 通知与 Webhook 规则补入参体检——一处倒向放行、两处崩溃面与目标地址的同义写法\n\n迁入版把策略快照一侧校验到底(normalizeSnapshot 逐字段抛),请求一侧、目标地址一侧与夹具评估器三处漏风。\n补强前对 dist 逐条实测:\n\n- 放行面(唯一一处方向倒向放行):三个状态位按真值判,`replayAuthorized: \"false\"` 在 `!value` 下为 false,\n 未授权重放被判成已授权 → DELIVER;planner 原样透传这三位,计划面同样通。现在只认布尔字面量。\n- 崩溃面:classifyNotificationEffect(undefined) / classifyProviderOutcome(undefined) 抛 TypeError 而不是拒绝,\n 夹具的 effect / provider 两条规则都能直接触发——门禁那时拿到的是异常不是判定,落到消费侧是 500 不是拒绝。\n- 目标地址(C08.05 / 蓝图「私网地址失败关闭」):isPrivateLiteral 只认四段十进制,2130706433 / 0x7f000001 /\n 0177.0.0.1 / 127.1 全判成公网;0.0.0.0/8、CGNAT 100.64/10、组播与保留段、.internal、末尾点均未覆盖。\n 现在数字形主机一律按 IP 字面量处理,只放行严格四段十进制的公网地址;allowedHosts 自己先过这道地板\n (WEBHOOK_ALLOWED_HOST_NOT_PUBLIC),小写归一后再查一次重名。\n- 本次唯一放宽的一处,据实登记:迁入版按字符串前缀 fc / fd / fe80 判私网 IPv6,fc-portal.example.com 这类\n 正常域名被误判成私网。改判后它可用,但仍须先进运营批准的 allowlist 且为 HTTPS,不构成新的可达面。\n- 死代码:WEBHOOK_TENANT_WILDCARD_FORBIDDEN 写在字符集校验之后,`*` 永远先报 WEBHOOK_ROUTE_TENANTS_INVALID,\n 蓝图写明的「tenant allowlist 禁止 *」从未以自己的名义拦下过。\n- 退避:decideProviderOutcome 原取 min(maximumBackoff, retryAfter),供应商回一个 Retry-After: 0 即可把批准过的\n 退避清零。现在外部回执只能把退避拉长到策略上界,上界语义与既有用例逐字不变。\n- 夹具评估器把两种非放行当成放行:SKIP_DUPLICATE 与 DLQ 都没有 reasons 字段,被 `\"reasons\" in r` 判成空数组\n = ACCEPT,与该文件自己第一句「只有 DELIVER / DELIVERED 算放行」正相反。另补 refresh 规则。\n- effect_id 改为强校验:五段必须是规范标识符(因此不含 :),否则 a:b+c 与 a+b:c 会拼出同一个 id;\n 请求一侧的标识符不再先 trim 再判定。\n\n合法快照与合法请求的判定结果逐字不变:迁入的 14 例断言一条未改。单测 14 → 24 例;夹具 8 → 17 例,并修好\n名不副实的 N06-plan-without-policy-denies-all——它此前只喂了两个字段的请求,压根走不到「无策略即拒」那一步。\n\n核验(工作树 dirty,报告未回绑,只绑本地):contracts build / typecheck 绿、本域单测 24/24、\ncontracts/test/*.test.mjs 330/330、check:fixtures 17 套件 236 例 0 失败 0 不可用(本域 17/17;用临时报告名跑,\n跑完删除,reports/ 未动)。负向实测两次:① 把 HEAD 版三支规则单独编译后喂新夹具,8 例新增负例全部不通过\n(N07/N10/N11 直接放行、N08/N09 抛 TypeError、N12 换原因、N13/N14 旧评估器不识别 refresh);\n② 篡改 N10 的声明原因 → 门禁 exit 1 并点名该例,翻 expect → 被 id/expect 一致性先挡下,还原后 exit 0。\n\n未做:缺失模块完善清单 C12 的模板审批 / 多渠道 Provider / 签名防重放 / 渠道切换本仓仍一件没有(该行类型是\n「裁决」,前置是运行宿主 Q01),本轮仍是契约包形态,不代表通知服务上线;Catalog 登记未动(仍 module_e2,\ncode_truth 指工单仓 packages/notification-delivery);三个消费仓的 packages/notification-delivery 未同步;\n入站回调验签(C12.05)与 UNKNOWN 回执(C12.04)属判定面扩张,只登记未实现。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/c190a6ab5d2c50e4c90f027bbcca72f1f3050005","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-18T07:43:48-07:00","added":["contracts/src/domain/notification-webhook/value-guards.ts"],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/notification-webhook/fixture-evaluator.ts","contracts/src/domain/notification-webhook/notification-effect.ts","contracts/src/domain/notification-webhook/webhook-delivery-planner.ts","contracts/test/fixtures/notification-webhook.fixtures.json","contracts/test/notification-webhook-domain.test.mjs"]},"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":18768,"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":43,"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-18T22:43:29+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"}}...
|
push
|
2
|
34
|
1789742678
|
1789742716
|
0
|
1789742672
|
1789742745
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24136
|
chore(reports): 入口门禁与工作台两份快照回绑 @ a9abcbe
|
116
|
5
|
platform.yml
|
121
|
5
|
0
|
refs/heads/main
|
e8fda74e279a5884440d5efaac2265e513c814b6
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c190a6ab5d2c50e4c90f027bbcca72f1f3050005","after":"e8fda74e279a5884440d5efaac2265e513c814b6","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/c190a6ab5d2c50e4c90f027bbcca72f1f3050005...e8fda74e279a5884440d5efaac2265e513c814b6","commits":[{"id":"e8fda74e279a5884440d5efaac2265e513c814b6","message":"chore(reports): 入口门禁与工作台两份快照回绑 @ a9abcbe\n\n在 a9abcbe 的干净 detached 检出里重跑(governance/rebind-reports.mjs --gates caddy,workbench-snapshots,\n带 CHECK_CADDY_DOCKER=1),三份均 provenance.gitSha=a9abcbe / worktreeDirty=false。\n\n- reports/caddy.latest.json:0 违规。12 个 HTTP 契约前缀 × 2 profile 全覆盖;新增的 routing 段逐条记下\n 模拟出来的块链,13 条登记前缀(11 个去重契约前缀 + 2 个长连接前缀)全部到达 {$PLATFORM_API_UPSTREAM};\n workbenchGuard.reached=true / conditionalBefore=0;语法校验 dev / staging 均 passed,via docker,\n 镜像 caddy@sha256:5f5c8640…d58648(compose 锁定的那一个,不再是浮动 tag)。\n- reports/workbench-catalog-snapshot.latest.json:只有 provenance 变。caddy-routes.json 进了它的作用域\n (新增 validate / mount 段),被 check:evidence 判过期,但快照只吃 routes.contracts,内容逐字未变——\n 重建后与旧版按字段比对一致,已实测。\n- reports/workbench-ops-snapshot.latest.json:与 catalog 同一脚本产出,必须一起带回(分开会绑不同提交)。\n 它有一处内容变化不由本轮改动引起:image 段从 d8f09205 / sha256:fe418667… 更新到 05e3826e /\n sha256:c0869934…,来源是 06c3d4c 已提交的 reports/image-digest.json——此前那份快照相对该提交是旧的。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/e8fda74e279a5884440d5efaac2265e513c814b6","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-18T07:46:25-07:00","added":[],"removed":[],"modified":["reports/caddy.latest.json","reports/workbench-catalog-snapshot.latest.json","reports/workbench-ops-snapshot.latest.json"]},{"id":"a9abcbe392de8a903512ab4b25529a6e277113ee","message":"feat(gateway): 入口门禁改为解析块树后模拟路由——「文件里配了」不等于「这条路径上生效」\n\nC08 应用群网关是采纳形态,判定在 Caddyfile 这份配置里,由 check-caddy 守。它此前是逐行正则:\n某条指令在文件里出现过就算配了。本轮不动入口运行行为(两份 Caddyfile 一个字没改),只把它\n自己在注释里写明判不了的那一类失效变成静态判定。\n\n逐行正则判不出来的三件事:\n- 有个更靠前的 handle 块把 /api/platform/* 截走——入口鉴权配得好好的,请求根本走不到它。\n caddy-routes.json 的 workbench.note 原文是「这种绕过只能靠运行态探针发现」。\n- 请求体上限 / 上游超时 / request-id 注入写在别的块里,门禁全绿,平台路由上一层保护都没有。\n BODY_LIMIT_MISSING 这类规则问的是「文件里有没有」,不是「这条路由上有没有」。\n- 契约前缀有匹配器、但请求先被别人服务了:ROUTE_UNCOVERED 绿,流量到不了 API。\n\n新增块树解析(tokenizeLine / parseCaddyfile:`{` 只有作为行末独立 token 才开块,占位符\n{$VAR} 与 {http.request.uuid} 是 token 内部的花括号)与路由模拟(按 Caddy 的 handle 互斥语义\n与指令序,逐层并入命名匹配器),据此新增:\n- ROUTE_SHADOWED 前缀有匹配器但被更靠前的 handler 截走,到不了 {$PLATFORM_API_UPSTREAM}\n- WORKBENCH_AUTH_BYPASS 被守护前缀在到达 forward_auth 所在块之前就被别的 handler 服务了;\n 更靠前的 handler 若条件不是纯路径(header / method / file),按「可能截走」同样判红\n- INGRESS_GUARD_OUT_OF_SCOPE 入口约定在文件里有,却不在服务该前缀的那条块链上\n- STREAMING_ROUTE_UNCOVERED 登记的长连接前缀没被路由到上游(与「禁 read_timeout」凑成一对)\n- CADDYFILE_UNPARSED 花括号不配平 / 没有站点块——判不了就报,不静默通过\n\n同轮补三条登记面的:\n- PROFILE_MOUNT_UNBOUND profile 的 Caddyfile 没被登记的 compose 挂进入口容器。staging 那份此前\n 只被校验、没人核对它有没有被 overlay 加载;校验一份没人加载的配置等于没校验。\n- CADDY_IMAGE_UNPINNED compose 的入口镜像不是 digest 锁定。docker 校验原先写死浮动 tag\n caddy:2-alpine,而跑的是锁定镜像——拿另一个版本的 Caddy 校验,过了也\n 不代表运行的那个认它。现在从 compose 取镜像,取不到即 skipped,不退回浮动 tag。\n- ROUTE_MAPPING_ORPHANED 登记表映射了 modules.json 里已不存在的契约(CONTRACT_UNMAPPED 的反向死登记)\n\nstripComments 按 Caddy 口径重写:引号内的 # 是字面量,# 只有在 token 开头才起注释——原先一刀切到\n第一个 #,会把 respond \"a#b\" 这类值截半,反过来让门禁看不见后面真实生效的指令。\nevidence-scopes 的 caddy 作用域补进 stack/compose.yaml 与 stack/overlays/staging.yaml:结论现在\n也取决于「挂没挂进容器」和「校验用的是不是那个镜像」,这两个输入一改结论就可能不再成立。\n\n核验(工作树 dirty,报告未回绑,只绑本地):\n- CHECK_CADDY_DOCKER=1 check:caddy exit 0:12 个 HTTP 契约前缀 × 2 profile 全覆盖;模拟路由 13 条\n 前缀(11 个去重契约前缀 + 2 个长连接前缀)全部到达上游且入口约定就在各自链上;\n workbenchGuard.reached=true;两份 Caddyfile 语法均 passed,镜像 caddy@sha256:5f5c8640…d58648\n (= compose 锁定、dev 常驻容器正在跑的那一个)。\n- check-caddy.test.mjs 19 → 37 例,每条新规则都有篡改夹具且夹具断言「确实改到了」。两例专门对照\n 旧规则:插入抢先的 handle 后 evaluateCaddyfile / evaluateWorkbench 仍全绿,新规则判红。\n- 与真实 Caddy 对照(同一 digest 镜像,两个一次性容器,上游指向死端口):真实基线\n GET /api/platform/probe → 502(forward_auth 去校验,没放行);插入抢先 handle 的那份 → 200\n 「bypassed」,门禁判红。同一份里 /api/v1/decisions 仍 502,截走范围与模拟一致。\n- 一处自测抓到的实现缺陷:scopeNodes 顶层那一跳没挡 handler 分支,\"别的块里配了也算数\"——\n 正是要判的那种失效;已修并由「请求体上限挪到别的块」一例钉住。另一例钉住命名匹配器声明在\n 里层块时必须判得动(撤掉修复即落在 reverse_proxy 而非 respond,实测过)。\n- 回归:governance 全套 340/340;工作区一致性门禁只余既有 L9 compose 重名 1 条,与本轮无关。\n\n未做:G-3 限流要 caddy-ratelimit 插件即自建镜像,会打破 digest 锁定的官方镜像,是 stack 决策;\nHTTP 方法白名单归属 2026-09-16 已裁为不阻塞退役、转 stack 待办;C08.04 East-West 身份、C08.05\nWebhook ingress 与 Egress SSRF、C08.06 外发 / WAF / HA 全无落点(Q03)。静态判定的边界据实登记:\n非路径条件只能判「可能」,route 只作近似,每个前缀只探一条代表路径(/t/\u003ctenant\u003e/login 这类\n「有意分流一部分」不在判定范围),入口鉴权仍挡不住文档导航——运行态探针仍是必要补充。\n\n报告回绑另起 chore(reports) 提交(仓纪律 5)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a9abcbe392de8a903512ab4b25529a6e277113ee","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-18T07:45:36-07:00","added":["docs/应用群网关门禁结构感知-2026-09-18.md"],"removed":[],"modified":["docs/工作台同源托管与入口鉴权实现记录-2026-09-18.md","governance/caddy-routes.json","governance/check-caddy.mjs","governance/evidence-scopes.json","governance/test/check-caddy.test.mjs"]}],"total_commits":0,"head_commit":{"id":"e8fda74e279a5884440d5efaac2265e513c814b6","message":"chore(reports): 入口门禁与工作台两份快照回绑 @ a9abcbe\n\n在 a9abcbe 的干净 detached 检出里重跑(governance/rebind-reports.mjs --gates caddy,workbench-snapshots,\n带 CHECK_CADDY_DOCKER=1),三份均 provenance.gitSha=a9abcbe / worktreeDirty=false。\n\n- reports/caddy.latest.json:0 违规。12 个 HTTP 契约前缀 × 2 profile 全覆盖;新增的 routing 段逐条记下\n 模拟出来的块链,13 条登记前缀(11 个去重契约前缀 + 2 个长连接前缀)全部到达 {$PLATFORM_API_UPSTREAM};\n workbenchGuard.reached=true / conditionalBefore=0;语法校验 dev / staging 均 passed,via docker,\n 镜像 caddy@sha256:5f5c8640…d58648(compose 锁定的那一个,不再是浮动 tag)。\n- reports/workbench-catalog-snapshot.latest.json:只有 provenance 变。caddy-routes.json 进了它的作用域\n (新增 validate / mount 段),被 check:evidence 判过期,但快照只吃 routes.contracts,内容逐字未变——\n 重建后与旧版按字段比对一致,已实测。\n- reports/workbench-ops-snapshot.latest.json:与 catalog 同一脚本产出,必须一起带回(分开会绑不同提交)。\n 它有一处内容变化不由本轮改动引起:image 段从 d8f09205 / sha256:fe418667… 更新到 05e3826e /\n sha256:c0869934…,来源是 06c3d4c 已提交的 reports/image-digest.json——此前那份快照相对该提交是旧的。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/e8fda74e279a5884440d5efaac2265e513c814b6","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-18T07:46:25-07:00","added":[],"removed":[],"modified":["reports/caddy.latest.json","reports/workbench-catalog-snapshot.latest.json","reports/workbench-ops-snapshot.latest.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":18935,"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":43,"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-18T22:44:32+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"}}...
|
push
|
3
|
29
|
1789742875
|
1789742912
|
0
|
1789742873
|
1789742926
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24137
|
fix(contracts): 注册中心规则补失败关闭与摘要规范化——三个入口此前抛 TypeErr fix(contracts): 注册中心规则补失败关闭与摘要规范化——三个入口此前抛 TypeError,同一摘要的两种写法此前分叉成两个复核键...
|
116
|
5
|
platform.yml
|
122
|
5
|
0
|
refs/pull/1/head
|
92a6b8e647c2c4d764c1fcdb8448bfc48a4dc4ed
|
0
|
0
|
0
|
pull_request
|
{"action":"opened","number" {"action":"opened","number":1,"pull_request":{"id":163,"url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/pulls/1","number":1,"user":{"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"},"title":"fix(contracts): 注册中心规则补失败关闭与摘要规范化——三个入口此前抛 TypeError,同一摘要的两种写法此前分叉成两个复核键","body":"蓝图 docs/domain/registry-snapshot-blueprint.md 从迁入起就写着「失败关闭」与\r\n「review key 仅用于人工复核幂等」两条不变量,实测三处不成立。本次按蓝图自己的口径补齐,\r\n改动只在 contracts/src/domain/application-contract-registry/:不新增写入点、不新增宿主、\r\n不动 Catalog 与 Schema,每条输出仍固定 activationAllowed=false / registryWriteAllowed=false /\r\nhumanApprovalRequired=true。\r\n\r\n1. 失败关闭:assessRegistrySnapshot / assessRegistryTransition /\r\n reviewCandidateSnapshotUpgrade 对畸形输入抛 TypeError(快照缺字段、now 不是 Date、\r\n decisions 整个缺失都会抛),四个入口里只有 LocalManifestAdmissionPlanner.plan 是\r\n 失败关闭的。现四个入口一致返回 REJECT + 原因码。这不是洁癖:check-fixtures 把抛出当\r\n 配置错误处理,实测一次 TypeError 会让整套 15 例逐例判定塌成一条 configuration 失败。\r\n\r\n2. 十六进制引用规范化:digest / commit 的正则带 /i 收大小写两种写法,比较与入键却\r\n 大小写敏感——同一摘要写成大写会得到另一个 reviewIdempotencyKey,同版本大小写翻转被判成\r\n SAME_VERSION_DIGEST_CHANGED,大写回滚 pin 被判成 ROLLBACK_PIN_MUST_MATCH_CURRENT。\r\n 现一律规范化为小写后再比较、再入键,ACCEPT 回吐规范化后的值。\r\n\r\n3. 版本文法收敛:一个模块三套(快照流与清单准入用 \\d+\\.\\d+\\.\\d+,升级复核用严格 SemVer),\r\n 新增 registry-primitives.ts 作单一来源,含预发布序;DEC-009—012 此前在两份文件各写一份,\r\n 一并收敛。snapshot-upgrade-review.ts 因此净减约 60 行重复实现。\r\n\r\n两处语义变化(蓝图新增一节已如实登记):\r\n- 收紧:1.02.0 这类前导零版本此前被放行,现在拒;assessRegistrySnapshot 另开始拒 latest\r\n 这类可变标签——此前它能过体检却必然过不了迁移规则。\r\n- 放宽:1.0.0-rc.1 这类预发布版本此前被快照流整条挡在外面,现在按 SemVer 序参与迁移。\r\n 平台自己发的就是 1.0.0-rc.N,升级复核那一侧本来就这么判。风险面有限:本模块所有出口\r\n 都不激活、不写 Registry,多进人工复核队列不等于多放行制品。\r\n\r\n证据(本分支隔离工作树,clean):注册中心单测 44/44(原 34 + 加固 10);\r\ncontracts check:local 302/302;check:fixtures 九个契约域套件 100 例 0 失败,\r\n其中本套件 15 例(正 4 / 反 11,原 8 例)。篡改必红实测两次:sameHexRef 退回大小写敏感\r\n→ 单测 1 红 + 夹具 P03 红;去掉快照入口守卫 → 整套塌成 0 例 1 配置失败。\r\n\r\n仍为仓内候选 sdk_e2,不代表正式 Registry、Snapshot 发布或跨仓 Required Check 已上线。\r\n清单登记的 C01.04 / C01.06 是「接线」型缺口且前置 Q01 运行宿主未裁,本次未动。\r\nreports/fixtures.latest.json 未回绑:它是 17 套件的聚合报告,只跑 9 个套件去覆盖会缩小结论面,\r\n应在整批(含并行会话的 public-file / IM / 跨域流程改动)落定后统一重跑回绑。\r\n\r\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e","labels":[],"milestone":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_reviewers_teams":[],"state":"open","draft":false,"is_locked":false,"comments":0,"additions":520,"deletions":144,"changed_files":9,"html_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/pulls/1","diff_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/pulls/1.diff","patch_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/pulls/1.patch","mergeable":true,"merged":false,"merged_at":null,"merge_commit_sha":null,"merged_by":null,"allow_maintainer_edit":false,"base":{"label":"main","ref":"main","sha":"e8fda74e279a5884440d5efaac2265e513c814b6","repo_id":116,"repo":{"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":19008,"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":43,"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-18T22:47:53+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"head":{"label":"feat/registry-rule-hardening","ref":"feat/registry-rule-hardening","sha":"92a6b8e647c2c4d764c1fcdb8448bfc48a4dc4ed","repo_id":116,"repo":{"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":19008,"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":43,"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-18T22:47:53+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":false,"push":false,"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":[]}},"merge_base":"793d0a106f07c2b9974991a2a5953fdebc5be1b3","due_date":null,"created_at":"2026-09-18T22:48:38+08:00","updated_at":"2026-09-18T22:48:38+08:00","closed_at":null,"pin_order":0},"requested_reviewer":null,"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":19008,"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":43,"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-18T22:47: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":[]},"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"},"commit_id":"","review":null}...
|
pull_request
|
2
|
30
|
1789742924
|
1789742961
|
0
|
1789742918
|
1789743036
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/pull/1/head
|
1
|
Edit
Delete
|
|
24138
|
Merge pull request 'fix(contracts): 注册中心规则补失败关 Merge pull request 'fix(contracts): 注册中心规则补失败关闭与摘要规范化——三个入口此前抛 TypeError,同一摘要的两种写法此前分叉成两个复核键' (#1) from feat/registry-rule-hardening into main...
|
116
|
5
|
platform.yml
|
123
|
5
|
0
|
refs/heads/main
|
b62945890987b341b65684046c6e4d8ae612c529
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"e8fda74e279a5884440d5efaac2265e513c814b6","after":"b62945890987b341b65684046c6e4d8ae612c529","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/e8fda74e279a5884440d5efaac2265e513c814b6...b62945890987b341b65684046c6e4d8ae612c529","commits":[{"id":"b62945890987b341b65684046c6e4d8ae612c529","message":"Merge pull request 'fix(contracts): 注册中心规则补失败关闭与摘要规范化——三个入口此前抛 TypeError,同一摘要的两种写法此前分叉成两个复核键' (#1) from feat/registry-rule-hardening into main\n\nReviewed-on: https://gitea.g-hi.com/luoanwu/enterprise-platform/pulls/1\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/b62945890987b341b65684046c6e4d8ae612c529","author":{"name":"luoanwu","email":"law@g-hi.com","username":"luoanwu"},"committer":{"name":"luoanwu","email":"law@g-hi.com","username":"luoanwu"},"verification":null,"timestamp":"2026-09-18T22:48:44+08:00","added":["contracts/src/domain/application-contract-registry/registry-primitives.ts"],"removed":[],"modified":["contracts/src/domain/application-contract-registry/fixture-evaluator.ts","contracts/src/domain/application-contract-registry/index.ts","contracts/src/domain/application-contract-registry/manifest-admission-planner.ts","contracts/src/domain/application-contract-registry/registry-snapshot.ts","contracts/src/domain/application-contract-registry/snapshot-upgrade-review.ts","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json","docs/domain/registry-snapshot-blueprint.md"]},{"id":"92a6b8e647c2c4d764c1fcdb8448bfc48a4dc4ed","message":"fix(contracts): 注册中心规则补失败关闭与摘要规范化——三个入口此前抛 TypeError,同一摘要的两种写法此前分叉成两个复核键\n\n蓝图 docs/domain/registry-snapshot-blueprint.md 从迁入起就写着「失败关闭」与\n「review key 仅用于人工复核幂等」两条不变量,实测三处不成立。本次按蓝图自己的口径补齐,\n改动只在 contracts/src/domain/application-contract-registry/:不新增写入点、不新增宿主、\n不动 Catalog 与 Schema,每条输出仍固定 activationAllowed=false / registryWriteAllowed=false /\nhumanApprovalRequired=true。\n\n1. 失败关闭:assessRegistrySnapshot / assessRegistryTransition /\n reviewCandidateSnapshotUpgrade 对畸形输入抛 TypeError(快照缺字段、now 不是 Date、\n decisions 整个缺失都会抛),四个入口里只有 LocalManifestAdmissionPlanner.plan 是\n 失败关闭的。现四个入口一致返回 REJECT + 原因码。这不是洁癖:check-fixtures 把抛出当\n 配置错误处理,实测一次 TypeError 会让整套 15 例逐例判定塌成一条 configuration 失败。\n\n2. 十六进制引用规范化:digest / commit 的正则带 /i 收大小写两种写法,比较与入键却\n 大小写敏感——同一摘要写成大写会得到另一个 reviewIdempotencyKey,同版本大小写翻转被判成\n SAME_VERSION_DIGEST_CHANGED,大写回滚 pin 被判成 ROLLBACK_PIN_MUST_MATCH_CURRENT。\n 现一律规范化为小写后再比较、再入键,ACCEPT 回吐规范化后的值。\n\n3. 版本文法收敛:一个模块三套(快照流与清单准入用 \\d+\\.\\d+\\.\\d+,升级复核用严格 SemVer),\n 新增 registry-primitives.ts 作单一来源,含预发布序;DEC-009—012 此前在两份文件各写一份,\n 一并收敛。snapshot-upgrade-review.ts 因此净减约 60 行重复实现。\n\n两处语义变化(蓝图新增一节已如实登记):\n- 收紧:1.02.0 这类前导零版本此前被放行,现在拒;assessRegistrySnapshot 另开始拒 latest\n 这类可变标签——此前它能过体检却必然过不了迁移规则。\n- 放宽:1.0.0-rc.1 这类预发布版本此前被快照流整条挡在外面,现在按 SemVer 序参与迁移。\n 平台自己发的就是 1.0.0-rc.N,升级复核那一侧本来就这么判。风险面有限:本模块所有出口\n 都不激活、不写 Registry,多进人工复核队列不等于多放行制品。\n\n证据(本分支隔离工作树,clean):注册中心单测 44/44(原 34 + 加固 10);\ncontracts check:local 302/302;check:fixtures 九个契约域套件 100 例 0 失败,\n其中本套件 15 例(正 4 / 反 11,原 8 例)。篡改必红实测两次:sameHexRef 退回大小写敏感\n→ 单测 1 红 + 夹具 P03 红;去掉快照入口守卫 → 整套塌成 0 例 1 配置失败。\n\n仍为仓内候选 sdk_e2,不代表正式 Registry、Snapshot 发布或跨仓 Required Check 已上线。\n清单登记的 C01.04 / C01.06 是「接线」型缺口且前置 Q01 运行宿主未裁,本次未动。\nreports/fixtures.latest.json 未回绑:它是 17 套件的聚合报告,只跑 9 个套件去覆盖会缩小结论面,\n应在整批(含并行会话的 public-file / IM / 跨域流程改动)落定后统一重跑回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/92a6b8e647c2c4d764c1fcdb8448bfc48a4dc4ed","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-18T07:40:10-07:00","added":["contracts/src/domain/application-contract-registry/registry-primitives.ts"],"removed":[],"modified":["contracts/src/domain/application-contract-registry/fixture-evaluator.ts","contracts/src/domain/application-contract-registry/index.ts","contracts/src/domain/application-contract-registry/manifest-admission-planner.ts","contracts/src/domain/application-contract-registry/registry-snapshot.ts","contracts/src/domain/application-contract-registry/snapshot-upgrade-review.ts","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json","docs/domain/registry-snapshot-blueprint.md"]}],"total_commits":0,"head_commit":{"id":"b62945890987b341b65684046c6e4d8ae612c529","message":"Merge pull request 'fix(contracts): 注册中心规则补失败关闭与摘要规范化——三个入口此前抛 TypeError,同一摘要的两种写法此前分叉成两个复核键' (#1) from feat/registry-rule-hardening into main\n\nReviewed-on: https://gitea.g-hi.com/luoanwu/enterprise-platform/pulls/1\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/b62945890987b341b65684046c6e4d8ae612c529","author":{"name":"luoanwu","email":"law@g-hi.com","username":"luoanwu"},"committer":{"name":"luoanwu","email":"law@g-hi.com","username":"luoanwu"},"verification":null,"timestamp":"2026-09-18T22:48:44+08:00","added":["contracts/src/domain/application-contract-registry/registry-primitives.ts"],"removed":[],"modified":["contracts/src/domain/application-contract-registry/fixture-evaluator.ts","contracts/src/domain/application-contract-registry/index.ts","contracts/src/domain/application-contract-registry/manifest-admission-planner.ts","contracts/src/domain/application-contract-registry/registry-snapshot.ts","contracts/src/domain/application-contract-registry/snapshot-upgrade-review.ts","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json","docs/domain/registry-snapshot-blueprint.md"]},"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":19008,"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":43,"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-18T22:47: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"}}...
|
push
|
2
|
30
|
1789742961
|
1789742999
|
0
|
1789742926
|
1789743053
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24139
|
chore(reports): check:fixtures 回绑 @ 7f82399
|
116
|
5
|
platform.yml
|
124
|
5
|
0
|
refs/heads/main
|
0ed7ee700a678dd6bea6879c5c575bd03cdb612c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"b62945890987b341b65684046c6e4d8ae612c529","after":"0ed7ee700a678dd6bea6879c5c575bd03cdb612c","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/b62945890987b341b65684046c6e4d8ae612c529...0ed7ee700a678dd6bea6879c5c575bd03cdb612c","commits":[{"id":"0ed7ee700a678dd6bea6879c5c575bd03cdb612c","message":"chore(reports): check:fixtures 回绑 @ 7f82399\n\n合并后重跑并重新绑定。上一份绑的是 532e807,其注册中心一栏计的是本地 9ac9914 那套夹具(19 例),\n该实现已在 7f82399 的合并中整体放弃,报告随之失真,故在合并提交上重跑。\n\n在 .worktrees/merge-registry-remote 的干净检出(HEAD=7f82399)跑全 17 套件:\n296 例,失败 0,不可用 0,configurationError 0;provenance worktreeDirty=false、runner=local。\n与上一份的差异只在注册中心一栏:19 例(本地实现)→ 15 例(远端实现),总数 300 → 296。\n\ncontracts/dist 由该检出自己 tsc 构建;runtime 九个模块经 turbo 全量缓存命中\n(runtime/ 自上次绑定以来无任何提交,构建输入哈希一致)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/0ed7ee700a678dd6bea6879c5c575bd03cdb612c","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-18T08:07:24-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.json"]},{"id":"7f82399ee801c5d5a740ef8a85366ea9f086650e","message":"Merge remote-tracking branch 'origin/main' —— 注册中心取远端那套,本地 9ac9914 的实现整体放弃\n\n本域被两个并行会话各补强了一遍:Gitea 上经 PR #1 合入的 92a6b8e(抽出 registry-primitives.ts、\n重写 snapshot-upgrade-review.ts),与本地未推送的 9ac9914(守卫内联在 registry-snapshot.ts)。\n二者是对同一批规则的两套独立实现,合并时 5 个文件 11 处冲突,冲突内容是两套失败关闭实现之间的取舍。\n\n按 Owner 裁断取远端。解法不是逐块挑,而是把整个域按 origin/main 逐字取入——包括自动合并成功的\nfixture-evaluator.ts / index.ts / manifest-admission-planner.ts,避免留下两套写法拼起来的中间产物:\n\n git checkout origin/main -- contracts/src/domain/application-contract-registry \\\n contracts/test/application-contract-registry-domain.test.mjs \\\n contracts/test/fixtures/application-contract-registry.fixtures.json \\\n docs/domain/registry-snapshot-blueprint.md\n\n取入后逐文件与 origin/main 比对,九个文件全部无差异;目录内容与 origin/main 的 tree 一致\n(本地那套没有引入远端没有的文件,不存在残留)。\n\ncontracts/SOURCE.md 未被远端改动,故不在冲突里,但 9ac9914 在其中写的注册中心条目描述的是已被放弃的实现,\n留着即是假记录。该条目已替换为取舍记录:说明两套实现的来历、裁断结果与核验数字,并注明 PR #1 未在\nSOURCE.md 留条目、其缺陷清单以提交信息与蓝图增量节为准,不替它复述未经本会话核验的细节。\n\n核验(合并后,工作树 dirty,报告另行回绑):\n- node --test contracts/test/*.test.mjs 361/361\n- 定向 contracts/test/application-contract-registry-domain.test.mjs 44/44\n- check:fixtures 17 套件 296 例,失败 0,不可用 0,configurationError 0\n (contract-application-contract-registry 15 例;本地那套的 19 例随实现一并放弃,故总数由 300 降至 296)\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/7f82399ee801c5d5a740ef8a85366ea9f086650e","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-18T08:07:00-07:00","added":["contracts/src/domain/application-contract-registry/registry-primitives.ts"],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/application-contract-registry/fixture-evaluator.ts","contracts/src/domain/application-contract-registry/index.ts","contracts/src/domain/application-contract-registry/manifest-admission-planner.ts","contracts/src/domain/application-contract-registry/registry-snapshot.ts","contracts/src/domain/application-contract-registry/snapshot-upgrade-review.ts","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json","docs/domain/registry-snapshot-blueprint.md"]},{"id":"33d84b86199f79c639208042c77816b597eeceb1","message":"chore(reports): check:fixtures 回绑 @ 532e807\n\n在 .worktrees/evidence-fixtures 开 detached 干净检出(HEAD=532e807)跑全 17 套件:\n17 套件 300 例,失败 0,不可用 0,configurationError 0;provenance worktreeDirty=false、runner=local。\n\n为什么另开检出:主检出有并行会话未提交的 governance/check-module-imports.mjs,worktreeDirty 恒为 true,\n报告只能绑本地、不能回绑。依赖用符号链接接过来——runtime/.gitignore 的 node_modules 与 dist 不带斜杠,\n符号链接同样被忽略;根 .gitignore 的 node_modules/ 带斜杠不匹配符号链接,故 contracts/node_modules\n建成真目录、内部逐项链接,跑门禁前 git status --porcelain --untracked-files=all 实测为空。\ncontracts/dist 由该检出自己 tsc 构建;runtime 九个模块经 turbo 全量缓存命中(runtime/ 自上次绑定以来\n无任何提交,构建输入哈希一致)。\n\n案例数由上次绑定(765300b,189 例)升至 300 例,增量来自本轮九个契约包域的入参硬化:\nconfiguration-feature-flags 10→17 是本次提交带来的,其余由并行会话的同批提交带来\n(public-file 13→29、data-analytics 8→27、cost-capacity 9→32、application-contract-registry 8→19、\nenterprise-experience 6→17、notification-webhook 8→17、collaboration-messaging 8→14、\ncross-domain-workflow 7→16)。本次一并回绑,不逐仓拆分。\n\n其余 stale 报告不在本次范围,且都不由本次提交引起:release-manifest / sbom / image-smoke 的作用域变更是\nreports/image-digest.json 与 stack/compose.yaml;runtime/reports/naming 与 fork-readiness 是工作台四个文件;\nreports/module-imports.latest.json 处于 EVIDENCE_WORKTREE_CHANGED,须等并行会话提交\ngovernance/check-module-imports.mjs 后由其重跑回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/33d84b86199f79c639208042c77816b597eeceb1","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-18T08:01:21-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.json"]},{"id":"532e8072ab29d24da41fae7717985c2bcc771cd9","message":"fix(contracts): 配置与功能开关规则补入参体检——三处倒向「开 / 采纳」、四处崩溃面与免检的兜底快照\n\n迁入版在入参可信的前提下是对的,但本能力的真实入口全是 JSON——夹具 payload、\ncreateRuntimeConfigurationClient(rawSnapshot) 收的快照文本、远端下发的开关规则都从反序列化来,\nTS 类型只在编译期成立。补强前对 dist 逐条实测,问题分六类:\n\n- 版本闸门形同虚设:rule.version \u003c context.minimumVersion 两端都不校验类型,缺任一端时 `\u003c` 恒为 false,\n 「比不出来」被当成「没过期」。version: undefined / version: \"3\" / minimumVersion: undefined\n 三种输入都直接 { enabled: true, reason: \"PERCENTAGE\" }——版本下限是配置回滚时唯一的保护。\n- 租户白名单退化成子串匹配:allowTenantIds 传成字符串时 .includes() 走的是 String.prototype.includes,\n \"xtenant-1x\" 让租户 tenant-1 命中 ALLOWLIST 并开启——不在白名单里的租户被开了灰度。\n- 未批准的配置快照被采纳:snapshotUsable 对 approved / schemaValid / containsPlaintextSecret 按真值判,\n approved: \"false\" 与 schemaValid: 1 都返回 USE_CANDIDATE;开关位 enabled: 1 同样被判成开启。\n 现在四个前提只认字面值,开关位只认布尔字面量。\n- 崩溃面:evaluateFeatureFlag(undefined, ctx) / (rule, undefined) / key: null / allowTenantIds: null 与\n selectConfigurationSnapshot(undefined, …) 全部抛 TypeError。夹具评估器两条规则各自只要少写一个键就能触发,\n 而 check:fixtures 对抛出物的处理是把整个套件记成 configurationError(0 例、报错文本当理由),\n 等于夹具门禁自己先倒了,不是多红一条。\n- 兜底快照免检:create(candidate, lastKnownGood) 对第二个参数只有声明类型,\n { version: 9, approved: \"yes\", schemaValid: 1, digest: \"zz\", values: \"nope\" } 可直接以 last_known_good 上岗——\n 它恰恰是候选不可用时的兜底,越是兜底越不能免检。现在 LKG 与候选走同一道 normalizeSnapshot,\n 参数类型也从 RuntimeConfigurationSnapshot 放宽成 unknown:这是入口,写成强类型挡不住任何东西。\n- 配置值穿透原型链:values 经 Object.fromEntries 建在 Object.prototype 上,get(\"constructor\") 返回一个函数,\n 消费侧一句 get(key) ?? fallback 就会拿函数当配置值。现在用 Object.create(null) 承载再冻结。\n 顺带收紧:version 必须是整数(原 typeof \"number\" 放过 NaN / 1.5),配置值里的数字必须有限。\n\n夹具评估器一并订正:Number(p[\"minimumVersion\"]) 会把夹具里写的 \"5\" 悄悄转成 5,\n夹具证明的是转换后的输入而不是自己写的那份。评估器应当是传声筒,现在原值直传。\n\n判定面与原因码面都没有扩张——FeatureFlagDecision 仍是那五个 reason、SnapshotSelection 仍是那三个 kind,\n没有新增任何原因码,整份改动只改「拿到脏值时往哪边倒」;迁入的 10 例单测断言一条未改。\nrefresh() 的 KEPT 分支放宽到 !== USE_CANDIDATE 并补上版本下限属防御性改动,它不修任何已知缺陷、\n对现有任何输入都不改变输出,已在 SOURCE.md 据实登记。\n\n覆盖:定向单测 10 → 20 例,夹具 10 → 17 例(正 4 / 反 13),新增目录内部件 value-guards.ts(不经 index.ts 导出)。\n负向实测三次:① 把 HEAD 版四个文件单独编到临时目录再喂新夹具,7 例全部不通过——\nN07 / N08 / N09 / N11 / N13 五例直接放行(reasons: [] = ACCEPT),N10 / N12 两例抛 TypeError;\n② 篡改 N11 的声明原因 → check-fixtures exit 1 并点名该例,把 id/expect 翻成 ACCEPT 仍 exit 1,还原后 exit 0;\n③ 源码侧还原 enabled 的布尔判定与 allowTenantIds 的数组判定 → 单测 20 例中 3 例转红,还原后 20/20。\n工作树 dirty(同期有并行会话在改其他契约包域),报告未回绑,本次用临时报告名跑完即删。\n\n未做:Catalog 登记一律未动(仍 module_e2、code_truth 指工单仓 packages/configuration-client),改登记需 CHG;\ndigest 只校验形状不校验内容、明文密钥只按顶层键名正则判、缺失模块完善清单 C13 的分桶 / 发布状态机 / kill switch\n均属判定面扩张或运行宿主(Q01),只登记未做。本轮仍是契约包形态,不代表配置中心上线。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/532e8072ab29d24da41fae7717985c2bcc771cd9","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-18T07:57:18-07:00","added":["contracts/src/domain/configuration-feature-flags/value-guards.ts"],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/configuration-feature-flags/configuration-client.ts","contracts/src/domain/configuration-feature-flags/feature-flag.ts","contracts/src/domain/configuration-feature-flags/fixture-evaluator.ts","contracts/test/configuration-feature-flags-domain.test.mjs","contracts/test/fixtures/configuration-feature-flags.fixtures.json","docs/domain/feature-flag-blueprint.md"]},{"id":"9ac9914ce25315472d3634c9d6d4d64e72dbe98f","message":"fix(contracts): 注册中心规则补入参体检——393 行升级复核此前零门禁覆盖,四条就绪闸门被真值字符串顶开\n\n九个契约包里最后一个未补强的。三类问题,均先对 dist 实测再改。\n\n一、崩溃面。assessRegistrySnapshot(undefined) 与 assessRegistrySnapshot({}) 抛\nTypeError(后者停在 snapshot.appId.trim());assessRegistryTransition 任一侧非对象即抛;\nreviewCandidateSnapshotUpgrade 在 request / context 非对象、currentPin 或 impactEvidence\n缺失、context.now 非 Date 时抛;夹具评估器的 snapshot / transition 两条跟着抛。补\nSNAPSHOT_SHAPE_INVALID / UPGRADE_REQUEST_INVALID / UPGRADE_REVIEW_CONTEXT_INVALID\n三个稳定原因码。LocalManifestAdmissionPlanner.plan() 改前就已失败关闭,本轮一行未动。\n\n二、四条就绪闸门被真值字符串顶开。independentGitSourceReady / codeownersReady /\nrequiredCheckEvidenceReady / rollbackEvidenceReady 写作 !context.x,传 \"false\" 一律\n判为就绪并直达 READY_FOR_CONSUMER_UPGRADE_REVIEW。同一文件的 sourceWorktreeDirty !== false\n与 compatible / manualReviewRequired 本来就是严格写法,本次把这四条统一成它。\n\n三、两处身份判定过宽。\n\n blockedBy 传成字符串时 .length 是字符数——\"\" 等于「无阻塞」,带阻塞的快照会被放行。\n 现要求字符串数组,否则 BLOCKERS_SHAPE_INVALID。\n\n 摘要与提交 SHA 的正则带 i,大小写两收。摘要是制品的身份:两种写法都认等于同一制品\n 有两个身份,而后续每一处 !== 比较(SAME_VERSION_DIGEST_CHANGED、pin 与 target 的摘要\n 对齐、fromDigest / toDigest 对齐)都会把它们当成两件不同的东西。现只收小写;仓内\n Catalog 与夹具无任何大写摘要在用,实测无影响面。\n\n门禁覆盖:snapshot-upgrade-review.ts 整份 393 行此前在门禁上零覆盖(评估器只有\nsnapshot / transition / plan 三条规则),而它持有上述四条闸门与全部证据新鲜度判定。\n补 upgrade 规则,BLOCKED 不算放行。\n\n核验:定向 34 → 40 例;迁入的 34 例在硬化后的 dist 上 0 失败,即合法输入的判定结果\n逐字未变;夹具 8 → 19 例(正 3 / 反 16)0 失败;负向实做:把\nN13-truthy-string-must-not-mark-the-git-source-ready 的声明原因改成不会产生的串,\n门禁 exit 1 并点名该例,还原后 exit 0。仍不发布、不改消费者 pin、不写 Registry;\nCatalog 登记未动(改登记须 CHG)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/9ac9914ce25315472d3634c9d6d4d64e72dbe98f","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-18T07:52:43-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/application-contract-registry/fixture-evaluator.ts","contracts/src/domain/application-contract-registry/registry-snapshot.ts","contracts/src/domain/application-contract-registry/snapshot-upgrade-review.ts","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json","docs/domain/registry-snapshot-blueprint.md"]}],"total_commits":0,"head_commit":{"id":"0ed7ee700a678dd6bea6879c5c575bd03cdb612c","message":"chore(reports): check:fixtures 回绑 @ 7f82399\n\n合并后重跑并重新绑定。上一份绑的是 532e807,其注册中心一栏计的是本地 9ac9914 那套夹具(19 例),\n该实现已在 7f82399 的合并中整体放弃,报告随之失真,故在合并提交上重跑。\n\n在 .worktrees/merge-registry-remote 的干净检出(HEAD=7f82399)跑全 17 套件:\n296 例,失败 0,不可用 0,configurationError 0;provenance worktreeDirty=false、runner=local。\n与上一份的差异只在注册中心一栏:19 例(本地实现)→ 15 例(远端实现),总数 300 → 296。\n\ncontracts/dist 由该检出自己 tsc 构建;runtime 九个模块经 turbo 全量缓存命中\n(runtime/ 自上次绑定以来无任何提交,构建输入哈希一致)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/0ed7ee700a678dd6bea6879c5c575bd03cdb612c","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-18T08:07:24-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.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":19014,"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":43,"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-18T22:48:47+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"}}...
|
push
|
2
|
30
|
1789744065
|
1789744103
|
0
|
1789744064
|
1789744132
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24140
|
docs(部署): 记录补 §12——三个 dev 运行面重启复验与读写面 curl 取证
|
116
|
5
|
platform.yml
|
125
|
5
|
0
|
refs/heads/main
|
34403ffdfeda4af776b5f4063a40b9b04340895a
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0ed7ee700a678dd6bea6879c5c575bd03cdb612c","after":"34403ffdfeda4af776b5f4063a40b9b04340895a","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/0ed7ee700a678dd6bea6879c5c575bd03cdb612c...34403ffdfeda4af776b5f4063a40b9b04340895a","commits":[{"id":"34403ffdfeda4af776b5f4063a40b9b04340895a","message":"docs(部署): 记录补 §12——三个 dev 运行面重启复验与读写面 curl 取证\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/34403ffdfeda4af776b5f4063a40b9b04340895a","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-18T08:07:48-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"34403ffdfeda4af776b5f4063a40b9b04340895a","message":"docs(部署): 记录补 §12——三个 dev 运行面重启复验与读写面 curl 取证\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/34403ffdfeda4af776b5f4063a40b9b04340895a","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-18T08:07:48-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},"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":19363,"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":43,"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-18T23:07:44+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"}}...
|
push
|
2
|
34
|
1789744134
|
1789744171
|
0
|
1789744129
|
1789744199
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24141
|
chore(reports): B3′ 的四十一份三级证据 回绑 @ df72512,刷新快照锚点
|
76
|
5
|
governance.yml
|
78
|
5
|
0
|
refs/heads/main
|
74c732d8d4b88957365dd80770032bab706e84e2
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"4da2c656ae691428be3f177563952cba66c37b88","after":"74c732d8d4b88957365dd80770032bab706e84e2","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/4da2c656ae691428be3f177563952cba66c37b88...74c732d8d4b88957365dd80770032bab706e84e2","commits":[{"id":"74c732d8d4b88957365dd80770032bab706e84e2","message":"chore(reports): B3′ 的四十一份三级证据 回绑 @ df72512,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 df72512(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=df72512、worktreeDirty:false):\n静态 28 + 运行态 13。静态整轮 **28/28 步骤全部通过**(退出码 0),运行态 733 tests /\n行为矩阵 204/204 / 87 项指标零违规。\n\n本批改的是两后端的 WS 传输层与 replay 查询,两个预设风险点均未兑现:\n- 16 KiB 传输层上限**未挡住任何测试**——正常控制帧远在其下,上限值选得合适\n- outbox 查询由 findFirst 改为 aggregate(_min/_max) 后,在 RLS enforce 下行为与原先一致\n\nruntime 跑了两轮,**数字完全一致**(733 / 204-204 / 零违规),无非确定性;第一轮因改动\n尚未提交而 worktreeDirty:true,按仓规矩只绑定本地、不能作阶段门证据,故提交实现后重跑。\n这是顺序问题不是结果问题——记下来是为了下次先提交再跑,省一轮 20 分钟。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/74c732d8d4b88957365dd80770032bab706e84e2","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-18T08:15:17-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},{"id":"df72512110999b668b00c5cbf94ce0691ec7f3af","message":"feat(realtime): B3′ 采纳上游两处加固——重放游标缺口判定与 WS 传输层单帧上限\n\n立项 §2 的「采纳上游加固 4」批次。逐个比对后实收两处真加固、一处口径收敛,另有两处\n开工时的判断被实测推翻,一并更正在代码注释里。\n\n一、replay 转发到 @juhai/kernel,补上 cursor-unknown\n\n本仓的 replay.ts 是框架 0.1.0 时代的拷贝,导出名与框架一致但实现落后一代,缺\n`maxSeq` 与策略「游标超前于现存最大 seq ⇒ 报缺口」。旧实现下,客户端报一个本租户\n从未产生过的游标(伪造 / 串号 / DB 被重置)会命中 pendingCount === 0 而返回 none——\n「已追平」与「真的没有新事件」在数值上无从区分,客户端**永远停在一个不存在的进度上、\n再也收不到补发**,与本仓「绝不静默缺口」的判据直接冲突。\n\n实证(打转发后的实现):\n since=999999, maxSeq=42 → {\"kind\":\"gap\",\"reason\":\"cursor-unknown\"}\n since=42, maxSeq=42 → {\"kind\":\"none\"} ← 真已追平,无误报\n\n框架同时修了契约文件内部的自相矛盾:pendingCount 旧注释写「且已投递」,与两后端刻意\n选定的账本语义相反(outbox 是「发生过什么」的账本,补发范围是全部留存行,重叠由客户端\n按信封 id 去重)——docs-truth 扫不到这类矛盾。\n\n两后端各改一处查询:findFirst(minSeq) → aggregate(_min/_max),一次拿两个边界,\n比原先还少一次往返。\n\n二、WS 传输层单帧上限(REALTIME_WS_MAX_PAYLOAD_BYTES = 16 KiB)\n\n框架注释记了一次真实事故,而**本仓此前正处在那个状态**:只有应用层的\nREALTIME_MAX_COMMAND_BYTES = 4096,没有接线传输层,而 ws 的默认 maxPayload 是 100MiB\n——任意客户端反复发 100MiB 帧即可制造内存压力,而「防撑爆」的守卫在内存被完整缓冲\n之后才生效。本批同时接线两后端并取同值(G17):\n Fastify app.register(websocket, { options: { maxPayload: … } })\n NestJS @WebSocketGateway({ path: \"/ws\", maxPayload: … })\n传输层 16384 比应用层 4096 留一档余量,使「超协议约束」与「超传输上限」成为两种可区分\n的失败:4096~16384 的帧仍拿到语义清晰的 connection.error(too-large),真正的巨帧在协议层\n即被 close 1009 掐断。**只加常量不接线正是该注释批评的形态**,故两者同批落地。\n\n三、两处开工判断被实测推翻,已更正在注释里\n\n1) 「订阅列表无上限」不成立:本仓原本就有 .max(50) / .max(200),只是写成字面量,\n 值与框架一致。本批只是把魔法数字收敛成具名单源,不是补安全缺口。\n2) subscription 不是单纯落后,而是**互有领先**:框架有那两个上限,本仓有\n `envelope.resourceRefs` 这条「新事件唯一扩展协议」(禁止为产品主键继续追加字段名猜测,\n 否则行业对象会反向污染内核),框架那份仍是「取第一个以 Id 结尾的键」的启发式。\n 整份转发会删掉本仓这个设计,故**不转发**——按迁移手册 §6 走分歧账本,只取上限、\n 保留本仓实现。这是三个模块里唯一的合并式采纳。\n\n@repo/contracts 1.19.0 → 1.20.0。注意 P7 **没有要求**这次升版:根与 kernel 两个 barrel 的\nexport 行都没变,而 apiDigest 只哈希入口 .d.ts。但公开面实际多了 3 个符号,按语义应升——\n真正记录这次面变化的是 K1 锁(replay.ts 的 4 个导出转移给内核包、另两处各 +1/+2,\n40 模块 / 755 导出)。\n\n验证:contracts 312/312 · typecheck 13/13 · 静态整轮 28/28 · runtime 733 / 行为矩阵 204/204 /\n零违规(16 KiB 上限未挡住任何测试,aggregate 在 RLS enforce 下行为与 findFirst 一致)。\nruntime 报告在本提交后重跑回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/df72512110999b668b00c5cbf94ce0691ec7f3af","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-18T08:03:00-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/replay.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/replay.service.ts","docs/product-extension-guide.md","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/realtime-command.ts","packages/contracts/src/replay.ts","packages/contracts/src/subscription.ts"]}],"total_commits":0,"head_commit":{"id":"74c732d8d4b88957365dd80770032bab706e84e2","message":"chore(reports): B3′ 的四十一份三级证据 回绑 @ df72512,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 df72512(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=df72512、worktreeDirty:false):\n静态 28 + 运行态 13。静态整轮 **28/28 步骤全部通过**(退出码 0),运行态 733 tests /\n行为矩阵 204/204 / 87 项指标零违规。\n\n本批改的是两后端的 WS 传输层与 replay 查询,两个预设风险点均未兑现:\n- 16 KiB 传输层上限**未挡住任何测试**——正常控制帧远在其下,上限值选得合适\n- outbox 查询由 findFirst 改为 aggregate(_min/_max) 后,在 RLS enforce 下行为与原先一致\n\nruntime 跑了两轮,**数字完全一致**(733 / 204-204 / 零违规),无非确定性;第一轮因改动\n尚未提交而 worktreeDirty:true,按仓规矩只绑定本地、不能作阶段门证据,故提交实现后重跑。\n这是顺序问题不是结果问题——记下来是为了下次先提交再跑,省一轮 20 分钟。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/74c732d8d4b88957365dd80770032bab706e84e2","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-18T08:15:17-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88055,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-18T22:42:58+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"}}...
|
push
|
2
|
36
|
1789744521
|
1789744530
|
0
|
1789744520
|
1789744543
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24142
|
chore(reports): B3′ 的四十一份三级证据 回绑 @ df72512,刷新快照锚点
|
76
|
5
|
platform-governance.yml
|
79
|
5
|
0
|
refs/heads/main
|
74c732d8d4b88957365dd80770032bab706e84e2
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"4da2c656ae691428be3f177563952cba66c37b88","after":"74c732d8d4b88957365dd80770032bab706e84e2","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/4da2c656ae691428be3f177563952cba66c37b88...74c732d8d4b88957365dd80770032bab706e84e2","commits":[{"id":"74c732d8d4b88957365dd80770032bab706e84e2","message":"chore(reports): B3′ 的四十一份三级证据 回绑 @ df72512,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 df72512(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=df72512、worktreeDirty:false):\n静态 28 + 运行态 13。静态整轮 **28/28 步骤全部通过**(退出码 0),运行态 733 tests /\n行为矩阵 204/204 / 87 项指标零违规。\n\n本批改的是两后端的 WS 传输层与 replay 查询,两个预设风险点均未兑现:\n- 16 KiB 传输层上限**未挡住任何测试**——正常控制帧远在其下,上限值选得合适\n- outbox 查询由 findFirst 改为 aggregate(_min/_max) 后,在 RLS enforce 下行为与原先一致\n\nruntime 跑了两轮,**数字完全一致**(733 / 204-204 / 零违规),无非确定性;第一轮因改动\n尚未提交而 worktreeDirty:true,按仓规矩只绑定本地、不能作阶段门证据,故提交实现后重跑。\n这是顺序问题不是结果问题——记下来是为了下次先提交再跑,省一轮 20 分钟。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/74c732d8d4b88957365dd80770032bab706e84e2","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-18T08:15:17-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},{"id":"df72512110999b668b00c5cbf94ce0691ec7f3af","message":"feat(realtime): B3′ 采纳上游两处加固——重放游标缺口判定与 WS 传输层单帧上限\n\n立项 §2 的「采纳上游加固 4」批次。逐个比对后实收两处真加固、一处口径收敛,另有两处\n开工时的判断被实测推翻,一并更正在代码注释里。\n\n一、replay 转发到 @juhai/kernel,补上 cursor-unknown\n\n本仓的 replay.ts 是框架 0.1.0 时代的拷贝,导出名与框架一致但实现落后一代,缺\n`maxSeq` 与策略「游标超前于现存最大 seq ⇒ 报缺口」。旧实现下,客户端报一个本租户\n从未产生过的游标(伪造 / 串号 / DB 被重置)会命中 pendingCount === 0 而返回 none——\n「已追平」与「真的没有新事件」在数值上无从区分,客户端**永远停在一个不存在的进度上、\n再也收不到补发**,与本仓「绝不静默缺口」的判据直接冲突。\n\n实证(打转发后的实现):\n since=999999, maxSeq=42 → {\"kind\":\"gap\",\"reason\":\"cursor-unknown\"}\n since=42, maxSeq=42 → {\"kind\":\"none\"} ← 真已追平,无误报\n\n框架同时修了契约文件内部的自相矛盾:pendingCount 旧注释写「且已投递」,与两后端刻意\n选定的账本语义相反(outbox 是「发生过什么」的账本,补发范围是全部留存行,重叠由客户端\n按信封 id 去重)——docs-truth 扫不到这类矛盾。\n\n两后端各改一处查询:findFirst(minSeq) → aggregate(_min/_max),一次拿两个边界,\n比原先还少一次往返。\n\n二、WS 传输层单帧上限(REALTIME_WS_MAX_PAYLOAD_BYTES = 16 KiB)\n\n框架注释记了一次真实事故,而**本仓此前正处在那个状态**:只有应用层的\nREALTIME_MAX_COMMAND_BYTES = 4096,没有接线传输层,而 ws 的默认 maxPayload 是 100MiB\n——任意客户端反复发 100MiB 帧即可制造内存压力,而「防撑爆」的守卫在内存被完整缓冲\n之后才生效。本批同时接线两后端并取同值(G17):\n Fastify app.register(websocket, { options: { maxPayload: … } })\n NestJS @WebSocketGateway({ path: \"/ws\", maxPayload: … })\n传输层 16384 比应用层 4096 留一档余量,使「超协议约束」与「超传输上限」成为两种可区分\n的失败:4096~16384 的帧仍拿到语义清晰的 connection.error(too-large),真正的巨帧在协议层\n即被 close 1009 掐断。**只加常量不接线正是该注释批评的形态**,故两者同批落地。\n\n三、两处开工判断被实测推翻,已更正在注释里\n\n1) 「订阅列表无上限」不成立:本仓原本就有 .max(50) / .max(200),只是写成字面量,\n 值与框架一致。本批只是把魔法数字收敛成具名单源,不是补安全缺口。\n2) subscription 不是单纯落后,而是**互有领先**:框架有那两个上限,本仓有\n `envelope.resourceRefs` 这条「新事件唯一扩展协议」(禁止为产品主键继续追加字段名猜测,\n 否则行业对象会反向污染内核),框架那份仍是「取第一个以 Id 结尾的键」的启发式。\n 整份转发会删掉本仓这个设计,故**不转发**——按迁移手册 §6 走分歧账本,只取上限、\n 保留本仓实现。这是三个模块里唯一的合并式采纳。\n\n@repo/contracts 1.19.0 → 1.20.0。注意 P7 **没有要求**这次升版:根与 kernel 两个 barrel 的\nexport 行都没变,而 apiDigest 只哈希入口 .d.ts。但公开面实际多了 3 个符号,按语义应升——\n真正记录这次面变化的是 K1 锁(replay.ts 的 4 个导出转移给内核包、另两处各 +1/+2,\n40 模块 / 755 导出)。\n\n验证:contracts 312/312 · typecheck 13/13 · 静态整轮 28/28 · runtime 733 / 行为矩阵 204/204 /\n零违规(16 KiB 上限未挡住任何测试,aggregate 在 RLS enforce 下行为与 findFirst 一致)。\nruntime 报告在本提交后重跑回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/df72512110999b668b00c5cbf94ce0691ec7f3af","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-18T08:03:00-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-fastify/src/modules/replay.ts","apps/api-nestjs/src/events/events.gateway.ts","apps/api-nestjs/src/events/replay.service.ts","docs/product-extension-guide.md","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/realtime-command.ts","packages/contracts/src/replay.ts","packages/contracts/src/subscription.ts"]}],"total_commits":0,"head_commit":{"id":"74c732d8d4b88957365dd80770032bab706e84e2","message":"chore(reports): B3′ 的四十一份三级证据 回绑 @ df72512,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 df72512(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=df72512、worktreeDirty:false):\n静态 28 + 运行态 13。静态整轮 **28/28 步骤全部通过**(退出码 0),运行态 733 tests /\n行为矩阵 204/204 / 87 项指标零违规。\n\n本批改的是两后端的 WS 传输层与 replay 查询,两个预设风险点均未兑现:\n- 16 KiB 传输层上限**未挡住任何测试**——正常控制帧远在其下,上限值选得合适\n- outbox 查询由 findFirst 改为 aggregate(_min/_max) 后,在 RLS enforce 下行为与原先一致\n\nruntime 跑了两轮,**数字完全一致**(733 / 204-204 / 零违规),无非确定性;第一轮因改动\n尚未提交而 worktreeDirty:true,按仓规矩只绑定本地、不能作阶段门证据,故提交实现后重跑。\n这是顺序问题不是结果问题——记下来是为了下次先提交再跑,省一轮 20 分钟。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/74c732d8d4b88957365dd80770032bab706e84e2","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-18T08:15:17-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88055,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-18T22:42:58+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"}}...
|
push
|
2
|
8
|
1789744530
|
1789744538
|
0
|
1789744521
|
1789744544
|
|
|
0
|
Edit
Delete
|
|
24143
|
docs(治理): CODEOWNERS 占位维持原样——裁决与理由写进文件本身,不再让下一个人重新 docs(治理): CODEOWNERS 占位维持原样——裁决与理由写进文件本身,不再让下一个人重新吵...
|
116
|
5
|
platform.yml
|
126
|
5
|
0
|
refs/heads/main
|
56039d0a57c27a4ec97ad38e4fc982ec28f136c1
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"34403ffdfeda4af776b5f4063a40b9b04340895a","after":"56039d0a57c27a4ec97ad38e4fc982ec28f136c1","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/34403ffdfeda4af776b5f4063a40b9b04340895a...56039d0a57c27a4ec97ad38e4fc982ec28f136c1","commits":[{"id":"56039d0a57c27a4ec97ad38e4fc982ec28f136c1","message":"docs(治理): CODEOWNERS 占位维持原样——裁决与理由写进文件本身,不再让下一个人重新吵\n\nPR #36 把全部团队占位改指 @laoluojuhai(修 GitHub API 的 16 条 Unknown owner),rebase 试算时\n这处是六个 PR 里唯一一处不能机械合的冲突:照它合会抹掉 main 里 CHG-018 条件 D 要求的工作台实名行,\n照 main 合又等于默默丢掉它的修复意图。2026-09-18 由目录负责人裁决:**维持占位。**\n\n裁决时核到的事实(都写进 .github/CODEOWNERS 头注释了):\n- GitHub 仓是个人仓(owner.type=User、private、唯一协作者 laoluojuhai/admin)。个人账号下不可能有团队,\n `@juhai-platform/*` 这 16 行永远解析不了;API 实测正是 16 条 Unknown owner,工作台那行实名反而可解析。\n- 真源远端是 Gitea(luoanwu),`@laoluojuhai` 在那边同样解析不了——这份文件当前在**两个远端都不产生\n required reviewer**,它现在只是路径 → 角色的登记。\n- 所以 16 条 Unknown owner 是「治理尚未接线」的真实信号,与本仓「显式 skipped 不冒充 passed」同口径。\n- 反面代价:唯一 owner = 唯一协作者,一旦启用 require review from Code Owners,Owner 自己的 PR 无人可批、\n 全部卡死。现在分支保护没启用所以无实害,但那正是这份文件将来要用的地方。\n\n解除条件:仓库迁入 GitHub Organization 并建出 @juhai-platform/* 团队(SRE / Owner 的仓库设置动作)。\nCLAUDE.md 未完成清单那条同步标注为「已裁 + 解除条件」,不再挂成无人认领的欠账。\n\n本提交不改任何 owner 行,只加注释:codeowners.test.mjs 2/2 通过(八条路径覆盖、七模块各有独立行)。\ntrial/rebase-36 上这处本就取的 main 侧,裁决与该分支现状一致,无需再改。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/56039d0a57c27a4ec97ad38e4fc982ec28f136c1","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-18T15:24:55-07:00","added":[],"removed":[],"modified":[".github/CODEOWNERS","CLAUDE.md"]},{"id":"de532d4cdc4577caab37df28e8775d4291a8290b","message":"chore(reports): check:fixtures 回绑 @ 94366bc\n\n17 套件 302 例,失败 0,不可用 0;provenance 绑 94366bc、worktreeDirty=false。\n\n生成方式与既往不同,记在这里以便复核:主工作区连续 4 小时没有出现过干净树\n(并行会话常驻 2—3 份在途文件),因此按偏差 #34-A 裁决立的那条路径——「不放宽\nworktreeDirty 判据,改为换个干净的地方生成报告」——在 HEAD 开 git worktree、装依赖、\n构建后在该检出内跑门禁,再把报告带回。reports:rebind 工具本身拒绝 check:fixtures,\n理由是它需要构建产物(工具靠 governance/ 零依赖才能免 install),那是工具能力边界,\n不是判据边界;本次手工补上了它缺的 install 与 build 两步。\n\n检出必须落在工作区内(本次用 企业控制面/.worktrees/):dec-039-party-model 是\nworkspaceRelative 套件,要向上找到含 workspace.json 的工作区根,放在 /private/tmp\n会以 unavailable 让门禁 exit 1。\n\n本报告作用域内(governance/fixtures、check-fixtures.mjs、lib/json-schema.mjs、\nruntime/modules、contracts/src/domain、contracts/test/fixtures、contracts/schemas)\n无任何未提交输入;当时主工作区脏的 3 个文件(CLAUDE.md 与 check-module-imports 及其\n测试)全部在作用域之外。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/de532d4cdc4577caab37df28e8775d4291a8290b","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-18T12:25:54-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.json"]},{"id":"94366bc03cb9ba137cd353d50151a01023e9a9c7","message":"fix(contracts): 注册中心四条就绪闸门只认字面 true,并把持有它们的 393 行接进夹具门禁\n\n不是恢复 9ac9914。那版实现已由 7f82399 的合并整体放弃、取远端那套;本条只在现行\n实现上补它缺的一类判定,用现行实现自己的命名与写法。\n\n现行实现已经做到的,本轮一行未动:崩溃面在远端那版就已收口(REGISTRY_SNAPSHOT_REQUIRED /\nUPGRADE_REQUEST_REQUIRED / UPGRADE_REVIEW_CONTEXT_REQUIRED 等);摘要大小写的处理比\n本地那版更好——normalizeDigest 归一化成小写、sameHexRef 做大小写无关比较,是规范化\n而不是拒绝,这条采纳远端口径。\n\n仍缺的一条:independentGitSourceReady / codeownersReady / requiredCheckEvidenceReady /\nrollbackEvidenceReady 写作 !context.x。实测传 \"false\"——JSON 里最常见的假值写法——\n一律判为已就绪并直达 READY_FOR_CONSUMER_UPGRADE_REVIEW,1 / \"no\" / {} 同理。同一文件的\nsourceWorktreeDirty !== false 与 compatible / manualReviewRequired 本来就是严格写法,\n本轮把这四条与之对齐。\n\n门禁覆盖:snapshot-upgrade-review.ts 在夹具评估器上仍是零覆盖(规则只有 snapshot /\ntransition / plan),而它正是这四条闸门的所在。补 upgrade 规则,BLOCKED 不算放行。\n\n核验:定向 44 → 46 例(既有 44 例一条未改);夹具 15 → 21 例(正 5 / 反 16)0 失败,\n两个方向都钉(真值字符串与字面 false 各一组);负向实做:把\nN13-truthy-string-must-not-mark-codeowners-ready 的声明原因改成不会产生的串,门禁\nexit 1 并点名该例,还原后 exit 0。Catalog 登记未动。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/94366bc03cb9ba137cd353d50151a01023e9a9c7","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-18T12:24:22-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/application-contract-registry/fixture-evaluator.ts","contracts/src/domain/application-contract-registry/snapshot-upgrade-review.ts","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"56039d0a57c27a4ec97ad38e4fc982ec28f136c1","message":"docs(治理): CODEOWNERS 占位维持原样——裁决与理由写进文件本身,不再让下一个人重新吵\n\nPR #36 把全部团队占位改指 @laoluojuhai(修 GitHub API 的 16 条 Unknown owner),rebase 试算时\n这处是六个 PR 里唯一一处不能机械合的冲突:照它合会抹掉 main 里 CHG-018 条件 D 要求的工作台实名行,\n照 main 合又等于默默丢掉它的修复意图。2026-09-18 由目录负责人裁决:**维持占位。**\n\n裁决时核到的事实(都写进 .github/CODEOWNERS 头注释了):\n- GitHub 仓是个人仓(owner.type=User、private、唯一协作者 laoluojuhai/admin)。个人账号下不可能有团队,\n `@juhai-platform/*` 这 16 行永远解析不了;API 实测正是 16 条 Unknown owner,工作台那行实名反而可解析。\n- 真源远端是 Gitea(luoanwu),`@laoluojuhai` 在那边同样解析不了——这份文件当前在**两个远端都不产生\n required reviewer**,它现在只是路径 → 角色的登记。\n- 所以 16 条 Unknown owner 是「治理尚未接线」的真实信号,与本仓「显式 skipped 不冒充 passed」同口径。\n- 反面代价:唯一 owner = 唯一协作者,一旦启用 require review from Code Owners,Owner 自己的 PR 无人可批、\n 全部卡死。现在分支保护没启用所以无实害,但那正是这份文件将来要用的地方。\n\n解除条件:仓库迁入 GitHub Organization 并建出 @juhai-platform/* 团队(SRE / Owner 的仓库设置动作)。\nCLAUDE.md 未完成清单那条同步标注为「已裁 + 解除条件」,不再挂成无人认领的欠账。\n\n本提交不改任何 owner 行,只加注释:codeowners.test.mjs 2/2 通过(八条路径覆盖、七模块各有独立行)。\ntrial/rebase-36 上这处本就取的 main 侧,裁决与该分支现状一致,无需再改。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/56039d0a57c27a4ec97ad38e4fc982ec28f136c1","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-18T15:24:55-07:00","added":[],"removed":[],"modified":[".github/CODEOWNERS","CLAUDE.md"]},"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":19379,"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":43,"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-18T23:08:49+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"}}...
|
push
|
2
|
30
|
1789770383
|
1789770423
|
0
|
1789770383
|
1789770452
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24144
|
chore(reports): B2c-1 的二十八份静态证据 回绑 @ 9eba0fd,刷新快照锚 chore(reports): B2c-1 的二十八份静态证据 回绑 @ 9eba0fd,刷新快照锚点...
|
76
|
5
|
governance.yml
|
80
|
5
|
0
|
refs/heads/main
|
60abd47e194c0b84e63968d27d493fd2fbdde658
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"74c732d8d4b88957365dd80770032bab706e84e2","after":"60abd47e194c0b84e63968d27d493fd2fbdde658","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/74c732d8d4b88957365dd80770032bab706e84e2...60abd47e194c0b84e63968d27d493fd2fbdde658","commits":[{"id":"60abd47e194c0b84e63968d27d493fd2fbdde658","message":"chore(reports): B2c-1 的二十八份静态证据 回绑 @ 9eba0fd,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 9eba0fd(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=9eba0fd、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\n未跑运行态:本批只新增两个纯转发的契约文件,未改任何运行代码,runtime 证据仍绑\ndf72512(733 / 204-204 / 零违规)且未失效。按三级分开陈述纪律,不用静态绿冒充运行态绿,\n也不为没动运行代码的改动重跑一轮 20 分钟。\n\nkernel-admission 报告里 request-context.ts 与 platform-ports.ts 会出现在 K5 的\n「零跨产品消费」观测行——这是**预期且已登记**的过渡态(立项 §5.1),不是新缺口:\n接线在 B2c-2,届时它们才真正被消费。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/60abd47e194c0b84e63968d27d493fd2fbdde658","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-18T15:32:52-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"9eba0fd28474159053db82929391b72070d4c78f","message":"feat(contracts): B2c-1 迁入平台端口契约——自建 permission/audit 的可替换插座就位\n\n「内核退回 pin」里价值最高的一块的**契约层**。框架 0.7.0 的 platform-ports 给出四个端口\n(权限 / 审计 / 事实出口 / 服务凭据),各自对应一个企业控制面模块;端口只定形状与\nfail-closed 默认实现,权威实现由基础设施在装配点注入。\n\n packages/contracts/src/request-context.ts 14 导出(platform-ports 的决策入参形状)\n packages/contracts/src/platform-ports.ts 31 导出\n\n对本仓的意义:自建 identity / permission / audit 是错层资产(铁律三:平台拥有规则),\n但此前**没有可替换的接口**,替换等于大手术。插座就位后,将来控制面客户端发布且有 CI\n阶段门证据时只换实现、**接口不变**——迁移从「大手术」降为「接插座」。本仓分叉于框架\n0.1.0、从未见过这组端口,这正是当初各造一套的原因。\n\n**本批只做契约层,接线另起一片(B2c-2),理由与代价登记在立项 §5.1。**\nB2 开工时我立过「净迁入的模块不该先暴露后接线」,这里部分收回并说明区别:接线实测远大于\n立项估计——要在两后端各实现 PermissionDecisionPort、经 registry.replace() 注入、改写一条\n**正在生效的权限判定链**。安全敏感改动不该接在长批次尾巴上做。过渡期这两个模块是零消费面,\nK5 会把它们列进观测行;**这不是绿,是登记在案的欠账**,B2c-2 长期不做就应当退回去。\n\n已查清的接线设计(下一片直接用):**不能直接拿框架的 createLocalPlatformPorts 做权限端口**\n——它是「租户作用域 + 动作目录」式放行,比本仓的 resolveEffectivePermissions(角色矩阵 +\nsubject 级覆盖 + ALLOW/DENY 优先级)**弱**,套用等于削弱一条在跑的控制。正确做法是本仓实现\n自己的端口委托现有判定,用框架为此预留的 registry.replace() 注入。收口点已定位:\nNestJS PermissionsService.require()、Fastify hasEffectivePermission()。\n顺带好性质:PLATFORM_PORTS_MODE=local 将成为部署配置里一句可审计的显式声明\n——「本部署跑在自建权限上,不是平台权威」,错层资产第一次在编排层可见。\n\n过程中修了两个同类错误,都是**转发清单靠 grep 生成而 grep 漏了模式**:\n ① 漏 `export async function` → assertPermitted 未转发\n ② 把 class PlatformPortsRegistry 放进 type 组 → tsc 全过、运行时取不到\n第二个尤其阴险。现已加运行时可取性核对,10 个值导出全过;31 个导出与框架逐一比对无遗漏。\n\n@repo/contracts 1.20.0 → 1.21.0;三把锁重签(exports 42 模块 / 755 导出);边界受管面\n144 → 146;接入手册下游锁行同步。静态整轮 **28/28**(退出码 0)。\n运行态未受影响——本批只加契约文件,未改任何运行代码,runtime 仍绑 df72512。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/9eba0fd28474159053db82929391b72070d4c78f","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-18T15:31:20-07:00","added":["packages/contracts/src/platform-ports.ts","packages/contracts/src/request-context.ts"],"removed":[],"modified":["CLAUDE.md","docs/planning/内核退回pin立项-2026-09-18.md","docs/product-extension-guide.md","kernel.boundaries.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/index.ts","packages/contracts/src/kernel.ts"]}],"total_commits":0,"head_commit":{"id":"60abd47e194c0b84e63968d27d493fd2fbdde658","message":"chore(reports): B2c-1 的二十八份静态证据 回绑 @ 9eba0fd,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 9eba0fd(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=9eba0fd、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\n未跑运行态:本批只新增两个纯转发的契约文件,未改任何运行代码,runtime 证据仍绑\ndf72512(733 / 204-204 / 零违规)且未失效。按三级分开陈述纪律,不用静态绿冒充运行态绿,\n也不为没动运行代码的改动重跑一轮 20 分钟。\n\nkernel-admission 报告里 request-context.ts 与 platform-ports.ts 会出现在 K5 的\n「零跨产品消费」观测行——这是**预期且已登记**的过渡态(立项 §5.1),不是新缺口:\n接线在 B2c-2,届时它们才真正被消费。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/60abd47e194c0b84e63968d27d493fd2fbdde658","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-18T15:32:52-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88443,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-18T23:15:21+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"}}...
|
push
|
2
|
36
|
1789770777
|
1789770786
|
0
|
1789770776
|
1789770800
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24145
|
chore(reports): B2c-1 的二十八份静态证据 回绑 @ 9eba0fd,刷新快照锚 chore(reports): B2c-1 的二十八份静态证据 回绑 @ 9eba0fd,刷新快照锚点...
|
76
|
5
|
platform-governance.yml
|
81
|
5
|
0
|
refs/heads/main
|
60abd47e194c0b84e63968d27d493fd2fbdde658
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"74c732d8d4b88957365dd80770032bab706e84e2","after":"60abd47e194c0b84e63968d27d493fd2fbdde658","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/74c732d8d4b88957365dd80770032bab706e84e2...60abd47e194c0b84e63968d27d493fd2fbdde658","commits":[{"id":"60abd47e194c0b84e63968d27d493fd2fbdde658","message":"chore(reports): B2c-1 的二十八份静态证据 回绑 @ 9eba0fd,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 9eba0fd(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=9eba0fd、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\n未跑运行态:本批只新增两个纯转发的契约文件,未改任何运行代码,runtime 证据仍绑\ndf72512(733 / 204-204 / 零违规)且未失效。按三级分开陈述纪律,不用静态绿冒充运行态绿,\n也不为没动运行代码的改动重跑一轮 20 分钟。\n\nkernel-admission 报告里 request-context.ts 与 platform-ports.ts 会出现在 K5 的\n「零跨产品消费」观测行——这是**预期且已登记**的过渡态(立项 §5.1),不是新缺口:\n接线在 B2c-2,届时它们才真正被消费。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/60abd47e194c0b84e63968d27d493fd2fbdde658","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-18T15:32:52-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"9eba0fd28474159053db82929391b72070d4c78f","message":"feat(contracts): B2c-1 迁入平台端口契约——自建 permission/audit 的可替换插座就位\n\n「内核退回 pin」里价值最高的一块的**契约层**。框架 0.7.0 的 platform-ports 给出四个端口\n(权限 / 审计 / 事实出口 / 服务凭据),各自对应一个企业控制面模块;端口只定形状与\nfail-closed 默认实现,权威实现由基础设施在装配点注入。\n\n packages/contracts/src/request-context.ts 14 导出(platform-ports 的决策入参形状)\n packages/contracts/src/platform-ports.ts 31 导出\n\n对本仓的意义:自建 identity / permission / audit 是错层资产(铁律三:平台拥有规则),\n但此前**没有可替换的接口**,替换等于大手术。插座就位后,将来控制面客户端发布且有 CI\n阶段门证据时只换实现、**接口不变**——迁移从「大手术」降为「接插座」。本仓分叉于框架\n0.1.0、从未见过这组端口,这正是当初各造一套的原因。\n\n**本批只做契约层,接线另起一片(B2c-2),理由与代价登记在立项 §5.1。**\nB2 开工时我立过「净迁入的模块不该先暴露后接线」,这里部分收回并说明区别:接线实测远大于\n立项估计——要在两后端各实现 PermissionDecisionPort、经 registry.replace() 注入、改写一条\n**正在生效的权限判定链**。安全敏感改动不该接在长批次尾巴上做。过渡期这两个模块是零消费面,\nK5 会把它们列进观测行;**这不是绿,是登记在案的欠账**,B2c-2 长期不做就应当退回去。\n\n已查清的接线设计(下一片直接用):**不能直接拿框架的 createLocalPlatformPorts 做权限端口**\n——它是「租户作用域 + 动作目录」式放行,比本仓的 resolveEffectivePermissions(角色矩阵 +\nsubject 级覆盖 + ALLOW/DENY 优先级)**弱**,套用等于削弱一条在跑的控制。正确做法是本仓实现\n自己的端口委托现有判定,用框架为此预留的 registry.replace() 注入。收口点已定位:\nNestJS PermissionsService.require()、Fastify hasEffectivePermission()。\n顺带好性质:PLATFORM_PORTS_MODE=local 将成为部署配置里一句可审计的显式声明\n——「本部署跑在自建权限上,不是平台权威」,错层资产第一次在编排层可见。\n\n过程中修了两个同类错误,都是**转发清单靠 grep 生成而 grep 漏了模式**:\n ① 漏 `export async function` → assertPermitted 未转发\n ② 把 class PlatformPortsRegistry 放进 type 组 → tsc 全过、运行时取不到\n第二个尤其阴险。现已加运行时可取性核对,10 个值导出全过;31 个导出与框架逐一比对无遗漏。\n\n@repo/contracts 1.20.0 → 1.21.0;三把锁重签(exports 42 模块 / 755 导出);边界受管面\n144 → 146;接入手册下游锁行同步。静态整轮 **28/28**(退出码 0)。\n运行态未受影响——本批只加契约文件,未改任何运行代码,runtime 仍绑 df72512。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/9eba0fd28474159053db82929391b72070d4c78f","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-18T15:31:20-07:00","added":["packages/contracts/src/platform-ports.ts","packages/contracts/src/request-context.ts"],"removed":[],"modified":["CLAUDE.md","docs/planning/内核退回pin立项-2026-09-18.md","docs/product-extension-guide.md","kernel.boundaries.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/index.ts","packages/contracts/src/kernel.ts"]}],"total_commits":0,"head_commit":{"id":"60abd47e194c0b84e63968d27d493fd2fbdde658","message":"chore(reports): B2c-1 的二十八份静态证据 回绑 @ 9eba0fd,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 9eba0fd(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=9eba0fd、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\n未跑运行态:本批只新增两个纯转发的契约文件,未改任何运行代码,runtime 证据仍绑\ndf72512(733 / 204-204 / 零违规)且未失效。按三级分开陈述纪律,不用静态绿冒充运行态绿,\n也不为没动运行代码的改动重跑一轮 20 分钟。\n\nkernel-admission 报告里 request-context.ts 与 platform-ports.ts 会出现在 K5 的\n「零跨产品消费」观测行——这是**预期且已登记**的过渡态(立项 §5.1),不是新缺口:\n接线在 B2c-2,届时它们才真正被消费。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/60abd47e194c0b84e63968d27d493fd2fbdde658","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-18T15:32:52-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88443,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-18T23:15:21+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"}}...
|
push
|
2
|
8
|
1789770787
|
1789770795
|
0
|
1789770776
|
1789770801
|
|
|
0
|
Edit
Delete
|
|
24146
|
chore(reports): check:module-imports 回绑 @ e61bfcf
|
116
|
5
|
platform.yml
|
127
|
5
|
0
|
refs/heads/main
|
04d02d611af85737ed1ee7ae7d6644b6dedb51ad
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"56039d0a57c27a4ec97ad38e4fc982ec28f136c1","after":"04d02d611af85737ed1ee7ae7d6644b6dedb51ad","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/56039d0a57c27a4ec97ad38e4fc982ec28f136c1...04d02d611af85737ed1ee7ae7d6644b6dedb51ad","commits":[{"id":"04d02d611af85737ed1ee7ae7d6644b6dedb51ad","message":"chore(reports): check:module-imports 回绑 @ e61bfcf\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,绑 e61bfcf / worktreeDirty=false。\n扫描 396 个源文件(扫描集 git,含新纳入的 runtime/clients 9 个),0 处违规。\n\n本工作区另有 5 份 stale 报告(release-manifest / sbom / image-smoke / runtime 的 naming 与\nfork-readiness)不由本次改动引起,属其他任务的 WIP,未动。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/04d02d611af85737ed1ee7ae7d6644b6dedb51ad","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-18T15:29:14-07:00","added":[],"removed":[],"modified":["reports/module-imports.latest.json"]},{"id":"e61bfcf394f90171647b453a6960e84408109ed8","message":"fix(governance): check:module-imports 补上 clients 扫描面与行号——对外发布包此前零门禁,违规行号整体前移\n\n扫描集与三处判定问题一并收口:\n\n1. 扫描集取自 `git ls-files` 而不是文件系统遍历:walk() 只认 SKIP_DIR、从不读 .gitignore,\n workbench 静态导出产物与两个 next-env.d.ts 也被计进 filesScanned,同一提交在干净检出报 387、\n 在构建过的开发机报 411。filesScanned 是绑在 provenance.gitSha 上的声明,必须是该提交能复现的数。\n 代价是未 `git add` 的新文件扫不到(实测:未 add 绿、`git add -N` 后红),由 worktreeDirty=true 标出。\n\n2. runtime/clients 此前是**双重盲区**:既不在 SCAN_ROOTS,evaluateImports 也没有该路径前缀的分支,\n 实测三种违规(module 包 / @repo/* / 越包相对)全部返回 []。唯一的事实防线是 tsc,而它只拦带绑定的\n import(TS2307);`import \"@juhai/module-permission\";` 这种纯副作用写法 exit 0,偏偏它就足以把整个\n 模块拉进发布包的运行时依赖图。`governance/evidence-scopes.json` 的 module-imports 条目 scope 里\n 早就写着 runtime/clients——登记与实现在此分叉,登记那侧是对的。\n 新增 CLIENT_FORBIDDEN_IMPORT / ESCAPES_CLIENT;禁的是整个 @repo/*,不只 @repo/contracts:\n @repo/config 与 @repo/telemetry 同样 workspace-only,发布后消费者一律解析不到。对 module-kit 不开口子。\n\n3. 违规行号系统性偏移:stripComments 整段删块注释、又把 // 行从数组里 filter 掉,两处都在丢行。\n 本仓文件普遍有顶部大段块注释,实测真实第 9 行的违规报成第 3 行。改为等量保留换行。\n 行号是报告与 CLI 给人定位的唯一坐标,错的行号比没有行号更费事。\n\n4. violations 按 (文件, 行) 排序再交出:extractSpecifiers 按三个 pattern 分组扫,原始顺序里\n `import \"x\";` 会掉到同文件更靠后的 `import … from \"x\"` 之后。用 codePoint 序而非 localeCompare,\n 避免 CI 与本机 ICU 不同让 reports/ 的 diff 无故抖动。\n\n导出 SCAN_ROOTS 供测试引用,消除测试里另抄一份路径清单(抄的那份会跟实现分叉)。\n\n本机实测:扫描 396 个源文件(387 + 9 个 clients),全量 pnpm check 16 道 exit 0,\ngovernance 测试 341 → 346(+4 行号与 clients 回归、+1 排序回归);篡改必红实测通过。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/e61bfcf394f90171647b453a6960e84408109ed8","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-18T15:28:21-07:00","added":[],"removed":[],"modified":["CLAUDE.md","governance/check-module-imports.mjs","governance/test/check-module-imports.test.mjs"]}],"total_commits":0,"head_commit":{"id":"04d02d611af85737ed1ee7ae7d6644b6dedb51ad","message":"chore(reports): check:module-imports 回绑 @ e61bfcf\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,绑 e61bfcf / worktreeDirty=false。\n扫描 396 个源文件(扫描集 git,含新纳入的 runtime/clients 9 个),0 处违规。\n\n本工作区另有 5 份 stale 报告(release-manifest / sbom / image-smoke / runtime 的 naming 与\nfork-readiness)不由本次改动引起,属其他任务的 WIP,未动。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/04d02d611af85737ed1ee7ae7d6644b6dedb51ad","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-18T15:29:14-07:00","added":[],"removed":[],"modified":["reports/module-imports.latest.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":19458,"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":43,"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-19T06:26:23+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"}}...
|
push
|
2
|
30
|
1789771530
|
1789771569
|
0
|
1789771529
|
1789771598
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24147
|
chore(reports): runtime 静态门禁链整批回绑 @ 7fc7f02
|
116
|
5
|
platform.yml
|
128
|
5
|
0
|
refs/heads/main
|
b60cc18d640a6561ccdd0fa798753d1f6476bad5
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"04d02d611af85737ed1ee7ae7d6644b6dedb51ad","after":"b60cc18d640a6561ccdd0fa798753d1f6476bad5","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/04d02d611af85737ed1ee7ae7d6644b6dedb51ad...b60cc18d640a6561ccdd0fa798753d1f6476bad5","commits":[{"id":"b60cc18d640a6561ccdd0fa798753d1f6476bad5","message":"chore(reports): runtime 静态门禁链整批回绑 @ 7fc7f02\n\n在 7fc7f02 的干净 detached worktree 里跑完整 `pnpm --dir runtime check`\n(先 install --frozen-lockfile + prisma:generate,否则 api-nestjs#build 会以\n@prisma/client 缺导出成员一类的 TS 错误失败):turbo 31/31,聚合\nruntime/reports/governance.latest.json status=passed,15 项违规指标全 0——\n其中 reportProvenanceViolations=0,正是此前单跑一道门禁做不到的那一条。\n\n18 份静态子报告现在同绑 7fc7f02 / worktreeDirty=false,15 份共用同一 runId\n(permission-catalog 与 platform-ops-definitions 沿用各自的 sync 脚本 runId,与改动前一致)。\n\n三份高等级真跑证据按原样保留、未被覆盖:runtime-acceptance @ 08c3788、\nui-acceptance @ 1b23285、conformance-differential @ 08c3788。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/b60cc18d640a6561ccdd0fa798753d1f6476bad5","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-18T15:48:28-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/permission-catalog.latest.json","runtime/reports/platform-ops-definitions.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":"57023cdc23442303c3336e86a433638d16c29452","message":"docs(治理): 订正两处版本声明——内核 pin 落后六个 minor,contracts 落后两个 RC\n\n两处都是带来源标注、看起来可核对的事实,实际都已漂:\n\n- 内核 pin 写 `@juhai/kernel@0.16.1`,实际 `runtime/pnpm-lock.yaml` 解析到 `0.22.0`\n (tarball 确在 Gitea `luoanwu`,来源描述本身没错),12 个 package.json 声明一致。\n- contracts 写 `1.0.0-rc.1`。2026-09-18 向 Gitea Registry 实查:`@juhai/contracts` 的\n rc.0 / rc.1 / rc.2 / rc.3 四版俱在,与 `contracts/package.json` 的 rc.3 一致;\n `@juhai/governance` 同为四版,`@juhai/client-fact` 为 rc.2 / rc.3。\n\n顺带把发布通道写进去,避免下一个人把 rc.3 当成走过发布门禁的版本:rc.2 与 rc.3 都经\n本地旁路通道发出(rc.2 见 docs/G-12本地旁路发布记录-2026-09-13.md,源 eb3cf2c,\nprovenance.json 如实写 runner:\"local\")。按 G-12 划的边界,这两版可称「已发布、可被\nexact pin 消费」,不得称「经过发布门禁验证」。\n\n**rc.3 在仓内没有对应的发布记录文档**(G-12 只记到 rc.2,而 runtime/clients/README.md\n与两份清单都已按「rc.3 已发布」在引用它)——本次只把缺口标注出来,补记录另做。\n\n这两处此前无人守:治理层 L13 只守「治理层自己的」裁决数 / 平台项目数 / 收纳表文件数,\n不覆盖真源仓 CLAUDE.md 的版本 pin。改 pin 时须手动回来改这两行。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/57023cdc23442303c3336e86a433638d16c29452","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-18T15:48:19-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]},{"id":"7fc7f02c88c9768be49c80096b80962a6d6624ad","message":"docs(治理): runtime 动态区回灌两级验收 SHA——报告已跑到 08c3788 / 1b23285,动态区还停在 765300b\n\ncheck:docs-truth 的 freshness-sha-runtime / freshness-sha-ui 两条在 HEAD 上就是红的:\nruntime-acceptance 与 ui-acceptance 已分别重跑并绑定 08c3788 / 1b23285,而动态区仍声明\n765300b,连带隔离栈与端口也是上一轮的(ms23-ci :55485 / :56395 db10、web :3157)。\n\n按两份报告逐字回灌:775 tests / 0 failures、5 用例 / 0 失败、tenantRlsEnforced=1、\n验收库 enterprise_platform_acceptance_20260918(PG :55471)+ Redis :56380 db7、\nweb :3120 / api :3222。删掉「框架同步后首跑」——那是 765300b 那一轮的上下文,\n08c3788 已是其后的再跑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/7fc7f02c88c9768be49c80096b80962a6d6624ad","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-18T15:47:25-07:00","added":[],"removed":[],"modified":["runtime/CLAUDE.md"]},{"id":"772b253623b14f66b8cd1bfddd60901348d5ca9b","message":"chore(reports): release-manifest / sbom / naming / fork-readiness 四份回绑 @ 04d02d6\n\n四份都是真过期(与上一轮 module-imports 不同——那份实为已新鲜、误判后我撤回未提交):\n\n release-manifest 作用域内 reports/image-digest.json 与 stack/compose.yaml 变更\n sbom 作用域内 reports/image-digest.json 变更,即它描述的是旧镜像\n naming runtime/apps/workbench 四个源文件变更\n fork-readiness 同上\n\n生成方式同 de532d4:主工作区常驻并行会话在途文件、拿不到干净树,按偏差 #34-A 裁决\n「不放宽 worktreeDirty 判据,改为换个干净的地方生成报告」,在 HEAD 开 worktree\n(落在 企业控制面/.worktrees/,workspaceRelative 套件要向上找 workspace.json)跑门禁\n再带回。release-manifest 与 sbom 的生成器在零依赖的 governance/ 下,无需 install;\nnaming 与 fork-readiness 需要已安装的私有内核包,故在检出内 pnpm --dir runtime install。\n\n四份结论逐项与旧版对照,无一劣化:\n\n release-manifest status 仍 partial,缺项仍 6 条;只有镜像绑定那条的 sha 随之更新\n (d8f0920 ≠ b202dde → 05e3826 ≠ 04d02d6),runtime 镜像仍未在 HEAD 重建\n sbom coverage 仍 partial、268 包不变;ref 由 fe418667 更新为 c0869934,\n 即它现在描述的是当前登记的镜像而不是旧的那个。连带重出\n reports/sbom.spdx.json,其 sha256 与报告记录实算一致(ecc5e62e…)\n naming violations 0 不变\n fork-readiness violations [] / forkReadinessViolations 0 不变\n\n四份 provenance 均绑 04d02d6、worktreeDirty=false,与提交时主仓 HEAD 一致。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/772b253623b14f66b8cd1bfddd60901348d5ca9b","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-18T15:46:46-07:00","added":[],"removed":[],"modified":["reports/release-manifest.latest.json","reports/sbom.latest.json","reports/sbom.spdx.json","runtime/reports/fork-readiness.latest.json","runtime/reports/naming.latest.json"]}],"total_commits":0,"head_commit":{"id":"b60cc18d640a6561ccdd0fa798753d1f6476bad5","message":"chore(reports): runtime 静态门禁链整批回绑 @ 7fc7f02\n\n在 7fc7f02 的干净 detached worktree 里跑完整 `pnpm --dir runtime check`\n(先 install --frozen-lockfile + prisma:generate,否则 api-nestjs#build 会以\n@prisma/client 缺导出成员一类的 TS 错误失败):turbo 31/31,聚合\nruntime/reports/governance.latest.json status=passed,15 项违规指标全 0——\n其中 reportProvenanceViolations=0,正是此前单跑一道门禁做不到的那一条。\n\n18 份静态子报告现在同绑 7fc7f02 / worktreeDirty=false,15 份共用同一 runId\n(permission-catalog 与 platform-ops-definitions 沿用各自的 sync 脚本 runId,与改动前一致)。\n\n三份高等级真跑证据按原样保留、未被覆盖:runtime-acceptance @ 08c3788、\nui-acceptance @ 1b23285、conformance-differential @ 08c3788。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/b60cc18d640a6561ccdd0fa798753d1f6476bad5","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-18T15:48:28-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/permission-catalog.latest.json","runtime/reports/platform-ops-definitions.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"]},"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":19488,"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":43,"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-19T06:45:30+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"}}...
|
push
|
2
|
30
|
1789771714
|
1789771753
|
0
|
1789771713
|
1789771799
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24148
|
chore(reports): ADR 0011 提案的二十八份静态证据 回绑 @ 74fbaea, chore(reports): ADR 0011 提案的二十八份静态证据 回绑 @ 74fbaea,刷新快照锚点...
|
76
|
5
|
governance.yml
|
82
|
5
|
0
|
refs/heads/main
|
f3d2cfe8c6567a9f343080ec659543e412c4e688
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"60abd47e194c0b84e63968d27d493fd2fbdde658","after":"f3d2cfe8c6567a9f343080ec659543e412c4e688","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/60abd47e194c0b84e63968d27d493fd2fbdde658...f3d2cfe8c6567a9f343080ec659543e412c4e688","commits":[{"id":"f3d2cfe8c6567a9f343080ec659543e412c4e688","message":"chore(reports): ADR 0011 提案的二十八份静态证据 回绑 @ 74fbaea,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 74fbaea(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=74fbaea、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\n未跑运行态:本批只动文档(ADR 0011 提案、立项书 B2c-2 挂起登记、ADR 索引),未改任何运行\n代码,runtime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/f3d2cfe8c6567a9f343080ec659543e412c4e688","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-18T15:49:10-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"74fbaea684f5b580936edcdcdb1b56a0557fade8","message":"docs(决策): ADR 0011 提案——授权判定不得以 IdP 的 role claim 为权威\n\nB2c-2 平台端口接线开工即撞到阻塞,它暴露的不是接线问题,而是本仓授权模型的一个错层。\n按「单独立裁决项」处理,B2c-2 挂起。\n\n阻塞:框架 PermissionDecisionPort.decide() 的入参是 { context: RequestContext, action,\nresourceType, resourceId },RequestContext 只有 tenantId / actorId——**不带角色声明**。\n而本仓生效角色判定是 bootstrapAdmin ? \"admin\" : (DB 角色 ?? claim 角色),注释写明\n「DB 覆盖 claim」:**无 DB 记录时已验签 token 的 claim 角色就是权威**。原样接线会让\n「无记录」那类 subject 的授权来源消失。平台端口假设权威方能从(租户, 主体, 动作)自行解出\n一切——这对拥有角色存储的平台成立,对本仓的混合模式不成立。\n\n所以差距不只是「谁来实现」,还包括「决策输入是什么」。\n\n提案内容:生效角色只来自本系统可控的来源(roleAssignment 记录 + AUTH_BOOTSTRAP_ADMIN\n引导身份);已验签 token 的 role claim 降级为信息,不参与授权判定。\n\n三条理由,第一条不是架构整洁而是安全面:\n1. **签发方等于授权方。** 当前只要 IdP 在 token 里写 role: admin,本仓即授予 admin,\n **OS 侧没有任何记录**。IdP 被攻陷或被误配就直接等于本仓提权,且事后审计在 OS 侧查不到\n 授予动作——因为从来没有授予动作。「DB 覆盖 claim」只在有记录时防住,恰恰在最常见的\n 「没记录」路径上不防。\n2. 铁律三「平台拥有规则」:角色归属属于规则,权威应在控制面 permission 模块。\n3. 这是 drop-in 的前提:决策还依赖 claim,将来换控制面客户端时仍是行为变更,只是推迟。\n\n影响面按 DB 记录有无精确切分(ADR §影响 有完整表):有记录者不变;验签且 claim 为\nmember/缺失者不变;**验签、无记录、claim 为 approver/admin 者降为 member**(失败方向是\n更拒绝,不是 fail-open,但对这些人是功能性中断);**demo 姿态自报 admin 会降为 member**,\n而它是 UI 验收与本地开发的前提(check:ui 打 mock-oidc-idp.mjs),须一并处理。\n\nADR 明确写下裁决前置:**必须先取得目标环境中「无 DB 记录且 claim 为 approver/admin」的\nsubject 实测计数**。该计数不取得,本 ADR 不应被批准——影响面未知的授权语义变更不可裁。\n\n同批:立项书 B2c-2 行改为「挂起,待 ADR 0011」并写明阻塞原因;docs/adr/README 加索引。\nB2c-1 迁入的 platform-ports / request-context 维持零消费面的过渡态(立项 §5.1 已登记)。\nB2c-2 开工时写的 NestJS 装配模块未提交(设计已完整记在 ADR 与立项里,届时重写即可)。\n\n静态整轮 28/28。本批只动文档,未改运行代码。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/74fbaea684f5b580936edcdcdb1b56a0557fade8","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-18T15:47:35-07:00","added":["docs/adr/0011-authorization-must-not-trust-idp-role-claim.md"],"removed":[],"modified":["CLAUDE.md","docs/adr/README.md","docs/planning/内核退回pin立项-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"f3d2cfe8c6567a9f343080ec659543e412c4e688","message":"chore(reports): ADR 0011 提案的二十八份静态证据 回绑 @ 74fbaea,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 74fbaea(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=74fbaea、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\n未跑运行态:本批只动文档(ADR 0011 提案、立项书 B2c-2 挂起登记、ADR 索引),未改任何运行\n代码,runtime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/f3d2cfe8c6567a9f343080ec659543e412c4e688","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-18T15:49:10-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88725,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-19T06:32:56+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"}}...
|
push
|
2
|
36
|
1789771765
|
1789771773
|
0
|
1789771754
|
1789771805
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24149
|
chore(reports): ADR 0011 提案的二十八份静态证据 回绑 @ 74fbaea, chore(reports): ADR 0011 提案的二十八份静态证据 回绑 @ 74fbaea,刷新快照锚点...
|
76
|
5
|
platform-governance.yml
|
83
|
5
|
0
|
refs/heads/main
|
f3d2cfe8c6567a9f343080ec659543e412c4e688
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"60abd47e194c0b84e63968d27d493fd2fbdde658","after":"f3d2cfe8c6567a9f343080ec659543e412c4e688","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/60abd47e194c0b84e63968d27d493fd2fbdde658...f3d2cfe8c6567a9f343080ec659543e412c4e688","commits":[{"id":"f3d2cfe8c6567a9f343080ec659543e412c4e688","message":"chore(reports): ADR 0011 提案的二十八份静态证据 回绑 @ 74fbaea,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 74fbaea(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=74fbaea、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\n未跑运行态:本批只动文档(ADR 0011 提案、立项书 B2c-2 挂起登记、ADR 索引),未改任何运行\n代码,runtime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/f3d2cfe8c6567a9f343080ec659543e412c4e688","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-18T15:49:10-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"74fbaea684f5b580936edcdcdb1b56a0557fade8","message":"docs(决策): ADR 0011 提案——授权判定不得以 IdP 的 role claim 为权威\n\nB2c-2 平台端口接线开工即撞到阻塞,它暴露的不是接线问题,而是本仓授权模型的一个错层。\n按「单独立裁决项」处理,B2c-2 挂起。\n\n阻塞:框架 PermissionDecisionPort.decide() 的入参是 { context: RequestContext, action,\nresourceType, resourceId },RequestContext 只有 tenantId / actorId——**不带角色声明**。\n而本仓生效角色判定是 bootstrapAdmin ? \"admin\" : (DB 角色 ?? claim 角色),注释写明\n「DB 覆盖 claim」:**无 DB 记录时已验签 token 的 claim 角色就是权威**。原样接线会让\n「无记录」那类 subject 的授权来源消失。平台端口假设权威方能从(租户, 主体, 动作)自行解出\n一切——这对拥有角色存储的平台成立,对本仓的混合模式不成立。\n\n所以差距不只是「谁来实现」,还包括「决策输入是什么」。\n\n提案内容:生效角色只来自本系统可控的来源(roleAssignment 记录 + AUTH_BOOTSTRAP_ADMIN\n引导身份);已验签 token 的 role claim 降级为信息,不参与授权判定。\n\n三条理由,第一条不是架构整洁而是安全面:\n1. **签发方等于授权方。** 当前只要 IdP 在 token 里写 role: admin,本仓即授予 admin,\n **OS 侧没有任何记录**。IdP 被攻陷或被误配就直接等于本仓提权,且事后审计在 OS 侧查不到\n 授予动作——因为从来没有授予动作。「DB 覆盖 claim」只在有记录时防住,恰恰在最常见的\n 「没记录」路径上不防。\n2. 铁律三「平台拥有规则」:角色归属属于规则,权威应在控制面 permission 模块。\n3. 这是 drop-in 的前提:决策还依赖 claim,将来换控制面客户端时仍是行为变更,只是推迟。\n\n影响面按 DB 记录有无精确切分(ADR §影响 有完整表):有记录者不变;验签且 claim 为\nmember/缺失者不变;**验签、无记录、claim 为 approver/admin 者降为 member**(失败方向是\n更拒绝,不是 fail-open,但对这些人是功能性中断);**demo 姿态自报 admin 会降为 member**,\n而它是 UI 验收与本地开发的前提(check:ui 打 mock-oidc-idp.mjs),须一并处理。\n\nADR 明确写下裁决前置:**必须先取得目标环境中「无 DB 记录且 claim 为 approver/admin」的\nsubject 实测计数**。该计数不取得,本 ADR 不应被批准——影响面未知的授权语义变更不可裁。\n\n同批:立项书 B2c-2 行改为「挂起,待 ADR 0011」并写明阻塞原因;docs/adr/README 加索引。\nB2c-1 迁入的 platform-ports / request-context 维持零消费面的过渡态(立项 §5.1 已登记)。\nB2c-2 开工时写的 NestJS 装配模块未提交(设计已完整记在 ADR 与立项里,届时重写即可)。\n\n静态整轮 28/28。本批只动文档,未改运行代码。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/74fbaea684f5b580936edcdcdb1b56a0557fade8","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-18T15:47:35-07:00","added":["docs/adr/0011-authorization-must-not-trust-idp-role-claim.md"],"removed":[],"modified":["CLAUDE.md","docs/adr/README.md","docs/planning/内核退回pin立项-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"f3d2cfe8c6567a9f343080ec659543e412c4e688","message":"chore(reports): ADR 0011 提案的二十八份静态证据 回绑 @ 74fbaea,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 74fbaea(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=74fbaea、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\n未跑运行态:本批只动文档(ADR 0011 提案、立项书 B2c-2 挂起登记、ADR 索引),未改任何运行\n代码,runtime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/f3d2cfe8c6567a9f343080ec659543e412c4e688","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-18T15:49:10-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88725,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-19T06:32:56+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"}}...
|
push
|
2
|
8
|
1789771773
|
1789771782
|
0
|
1789771754
|
1789771805
|
|
|
0
|
Edit
Delete
|
|
24150
|
chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚 chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚点...
|
76
|
5
|
governance.yml
|
84
|
5
|
0
|
refs/heads/main
|
85a263fb1667d12318daa5601f7e6e23284c5dfd
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"f3d2cfe8c6567a9f343080ec659543e412c4e688","after":"85a263fb1667d12318daa5601f7e6e23284c5dfd","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/f3d2cfe8c6567a9f343080ec659543e412c4e688...85a263fb1667d12318daa5601f7e6e23284c5dfd","commits":[{"id":"85a263fb1667d12318daa5601f7e6e23284c5dfd","message":"chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 402f502(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=402f502、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\nfork-readiness 报告的 frameworkCriteriaRegisteredMissing 由 3 降为 2(F14 转 implemented),\ndeclared 仍 14、交叉核对 verified。\n\n未跑运行态:本批只改 compose 顶层 name / 宿主端口参数化与门禁脚本,未动任何应用运行代码,\nruntime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。compose 的实际效果要到下次\ndocker compose up 才体现——改名时两个 project 下均无容器与卷,不存在需要迁移的运行态。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/85a263fb1667d12318daa5601f7e6e23284c5dfd","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-18T15:55:42-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"402f502bec6d503e2e6c8b1319b0862eb2b9ed03","message":"feat(governance): 落地框架 F14——compose 身份派生自包名,本仓退出 L9 的 project 共用\n\n框架判据 F14 由 missing 转 implemented。这是三条 missing 里唯一不阻塞于「内核退回 pin」\n立项本身的,故先做。\n\n**问题(工作区 L9 的本仓实证):** compose 在没有顶层 name / -p / COMPOSE_PROJECT_NAME 时\n按**文件所在目录名**推导 project。开发基座在每个派生仓里都住在 apps/api-nestjs/,于是所有仓\n推导出同一个 project `api-nestjs`,共用具名卷与容器名——后 up 者接管先起者。一致性门禁实测\n本机 8 个仓共用该 project,本仓是其中之一。这与 F3(测试库名前缀)、F12(RLS 组角色名)同族:\n**集群级资源的身份必须派生自 package.json name**。\n\n两处实体修复:\n apps/api-nestjs/docker-compose.yml 补 name: ${COMPOSE_PROJECT_NAME:-digital-employee-os}\n redis 宿主端口 \"6379:6379\" → \"${REDIS_PORT:-6379}:6379\"\n (postgres 那条原本就已参数化)\n deploy/production/compose.yml 默认值 deos-production → digital-employee-os-production\n (原值既非包名派生身份、也非其 digital-employee-os-* 子命名)\n\n**改名零中断**:动手前实测两个 project 下均无容器与卷(docker ps -a / volume ls 按\ncom.docker.compose.project 标签查,皆空)。我先前提过「要挑运维窗口」——实测之后这个顾虑\n不成立,如实更正。\n\n门禁实现与框架有一处口径差异,已登记在门禁注释与 framework-criteria.json:\n**本仓限定扫 git 跟踪的 compose**,框架按目录黑名单遍历全仓。理由是本仓有 gitignored 的\ntmp/ops-config/compose.local.yml(本机运维配置,随时重建),扫未跟踪的本地状态会让门禁在\n别人 clone 后得出不同结论——**不可复现的判据比没有判据更糟**。\n\n三条负向探针实活验证,非只读代码推断:去掉顶层 name、端口写死、身份写成别的仓(api-nestjs),\n各自如期转红,还原后复验绿。\n\n效果:工作区一致性门禁 L9 的共用仓数 **8 → 7,本仓出列**(其余 7 仓是各自 Owner 的事)。\n框架判据覆盖:implemented 10(+F14)、missing 2(F8 / F11,均阻塞于内核退回 pin 立项)、\nimplemented-elsewhere 1、not-applicable 1。\n\n静态整轮 28/28。本批未改运行代码,runtime 仍绑 df72512。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/402f502bec6d503e2e6c8b1319b0862eb2b9ed03","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-18T15:53:53-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-nestjs/docker-compose.yml","deploy/production/compose.yml","framework-criteria.json","scripts/check-fork-readiness.mjs"]}],"total_commits":0,"head_commit":{"id":"85a263fb1667d12318daa5601f7e6e23284c5dfd","message":"chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 402f502(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=402f502、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\nfork-readiness 报告的 frameworkCriteriaRegisteredMissing 由 3 降为 2(F14 转 implemented),\ndeclared 仍 14、交叉核对 verified。\n\n未跑运行态:本批只改 compose 顶层 name / 宿主端口参数化与门禁脚本,未动任何应用运行代码,\nruntime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。compose 的实际效果要到下次\ndocker compose up 才体现——改名时两个 project 下均无容器与卷,不存在需要迁移的运行态。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/85a263fb1667d12318daa5601f7e6e23284c5dfd","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-18T15:55:42-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88985,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-19T06:49:14+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"}}...
|
push
|
2
|
36
|
1789772147
|
1789772238
|
0
|
1789772145
|
1789772364
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24151
|
chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚 chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚点...
|
76
|
5
|
platform-governance.yml
|
85
|
5
|
0
|
refs/heads/main
|
85a263fb1667d12318daa5601f7e6e23284c5dfd
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"f3d2cfe8c6567a9f343080ec659543e412c4e688","after":"85a263fb1667d12318daa5601f7e6e23284c5dfd","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/f3d2cfe8c6567a9f343080ec659543e412c4e688...85a263fb1667d12318daa5601f7e6e23284c5dfd","commits":[{"id":"85a263fb1667d12318daa5601f7e6e23284c5dfd","message":"chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 402f502(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=402f502、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\nfork-readiness 报告的 frameworkCriteriaRegisteredMissing 由 3 降为 2(F14 转 implemented),\ndeclared 仍 14、交叉核对 verified。\n\n未跑运行态:本批只改 compose 顶层 name / 宿主端口参数化与门禁脚本,未动任何应用运行代码,\nruntime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。compose 的实际效果要到下次\ndocker compose up 才体现——改名时两个 project 下均无容器与卷,不存在需要迁移的运行态。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/85a263fb1667d12318daa5601f7e6e23284c5dfd","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-18T15:55:42-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"402f502bec6d503e2e6c8b1319b0862eb2b9ed03","message":"feat(governance): 落地框架 F14——compose 身份派生自包名,本仓退出 L9 的 project 共用\n\n框架判据 F14 由 missing 转 implemented。这是三条 missing 里唯一不阻塞于「内核退回 pin」\n立项本身的,故先做。\n\n**问题(工作区 L9 的本仓实证):** compose 在没有顶层 name / -p / COMPOSE_PROJECT_NAME 时\n按**文件所在目录名**推导 project。开发基座在每个派生仓里都住在 apps/api-nestjs/,于是所有仓\n推导出同一个 project `api-nestjs`,共用具名卷与容器名——后 up 者接管先起者。一致性门禁实测\n本机 8 个仓共用该 project,本仓是其中之一。这与 F3(测试库名前缀)、F12(RLS 组角色名)同族:\n**集群级资源的身份必须派生自 package.json name**。\n\n两处实体修复:\n apps/api-nestjs/docker-compose.yml 补 name: ${COMPOSE_PROJECT_NAME:-digital-employee-os}\n redis 宿主端口 \"6379:6379\" → \"${REDIS_PORT:-6379}:6379\"\n (postgres 那条原本就已参数化)\n deploy/production/compose.yml 默认值 deos-production → digital-employee-os-production\n (原值既非包名派生身份、也非其 digital-employee-os-* 子命名)\n\n**改名零中断**:动手前实测两个 project 下均无容器与卷(docker ps -a / volume ls 按\ncom.docker.compose.project 标签查,皆空)。我先前提过「要挑运维窗口」——实测之后这个顾虑\n不成立,如实更正。\n\n门禁实现与框架有一处口径差异,已登记在门禁注释与 framework-criteria.json:\n**本仓限定扫 git 跟踪的 compose**,框架按目录黑名单遍历全仓。理由是本仓有 gitignored 的\ntmp/ops-config/compose.local.yml(本机运维配置,随时重建),扫未跟踪的本地状态会让门禁在\n别人 clone 后得出不同结论——**不可复现的判据比没有判据更糟**。\n\n三条负向探针实活验证,非只读代码推断:去掉顶层 name、端口写死、身份写成别的仓(api-nestjs),\n各自如期转红,还原后复验绿。\n\n效果:工作区一致性门禁 L9 的共用仓数 **8 → 7,本仓出列**(其余 7 仓是各自 Owner 的事)。\n框架判据覆盖:implemented 10(+F14)、missing 2(F8 / F11,均阻塞于内核退回 pin 立项)、\nimplemented-elsewhere 1、not-applicable 1。\n\n静态整轮 28/28。本批未改运行代码,runtime 仍绑 df72512。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/402f502bec6d503e2e6c8b1319b0862eb2b9ed03","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-18T15:53:53-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-nestjs/docker-compose.yml","deploy/production/compose.yml","framework-criteria.json","scripts/check-fork-readiness.mjs"]}],"total_commits":0,"head_commit":{"id":"85a263fb1667d12318daa5601f7e6e23284c5dfd","message":"chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 402f502(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=402f502、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\nfork-readiness 报告的 frameworkCriteriaRegisteredMissing 由 3 降为 2(F14 转 implemented),\ndeclared 仍 14、交叉核对 verified。\n\n未跑运行态:本批只改 compose 顶层 name / 宿主端口参数化与门禁脚本,未动任何应用运行代码,\nruntime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。compose 的实际效果要到下次\ndocker compose up 才体现——改名时两个 project 下均无容器与卷,不存在需要迁移的运行态。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/85a263fb1667d12318daa5601f7e6e23284c5dfd","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-18T15:55:42-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88985,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-19T06:49:14+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"}}...
|
push
|
2
|
8
|
1789772238
|
1789772247
|
0
|
1789772145
|
1789772365
|
|
|
0
|
Edit
Delete
|
|
24152
|
docs(runbook): §7 补 image:smoke 的 --env-file 从哪来—— docs(runbook): §7 补 image:smoke 的 --env-file 从哪来——仓里没有这份文件,此前只写了占位...
|
116
|
5
|
platform.yml
|
129
|
5
|
0
|
refs/heads/main
|
73e36fd4d78f4fe2e6d2ee90381700b0da82d381
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"b60cc18d640a6561ccdd0fa798753d1f6476bad5","after":"73e36fd4d78f4fe2e6d2ee90381700b0da82d381","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/b60cc18d640a6561ccdd0fa798753d1f6476bad5...73e36fd4d78f4fe2e6d2ee90381700b0da82d381","commits":[{"id":"73e36fd4d78f4fe2e6d2ee90381700b0da82d381","message":"docs(runbook): §7 补 image:smoke 的 --env-file 从哪来——仓里没有这份文件,此前只写了占位\n\nrunbook 只写 `pnpm image:smoke -- --env-file \u003cenv\u003e`,而仓里既没有这份 env,也没说它从\n哪来。实跑一次才发现 .secrets/enterprise-platform-runtime-dev.env 用的是 compose 变量名,\n镜像读的是容器变量名,映射在 stack/compose.yaml 的 runtime environment 块。\n\n连带记下三处只有实跑才撞得上的坑:smoke 的 docker run 不挂 stack 网络(compose 内部主机名\n解析不了,要换 host.docker.internal + 已发布端口)、Redis 逻辑库别撞 dev 常驻运行时的 14、\nscope 这种 shape 档不需要 DATABASE_URL_\u003cMODULE\u003e。\n\n另加一条判读规则:冒烟报告的 sourceSha 是镜像来源提交、provenance.gitSha 是本次运行绑定,\n两者不同是正常的;check:evidence 判 image-smoke 过期时先比它与 image-digest.json 的\nsourceSha,相同就只需重跑补绑定,不必重建镜像。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/73e36fd4d78f4fe2e6d2ee90381700b0da82d381","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-18T15:55:22-07:00","added":[],"removed":[],"modified":["docs/runbook.md"]},{"id":"d3c6a3f5fee8d2d65b58e89bddd00f6e12c12930","message":"chore(reports): check:fixtures 回绑 @ 91216b5\n\n17 套件 307 例,0 失败 0 不可用;干净树本地跑(provenance worktreeDirty=false —— 判定按仓内口径\n排除 *.latest.json,同期并行会话另有三份门禁产物在树上未提交,本提交不含它们)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/d3c6a3f5fee8d2d65b58e89bddd00f6e12c12930","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-18T15:55:13-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.json"]},{"id":"91216b52fce5a1c677eab2d973a5cdbdac2a68f7","message":"test(contracts): 注册中心入参体检的门禁覆盖——24 个分支里 12 个没有任何用例走到\n\n同日注册中心那笔把 appId / version / blockedBy 的入参体检从抛 TypeError 改成了拒绝,夹具也从 8 例\n补到 21 例。但「不崩了」与「崩回去会被门禁抓到」是两回事。复核方式不是读用例名,而是算覆盖:对当年\n会抛的那 20 处变异逐一跑规则、取回原因码,再看夹具里有没有用例声明过该原因。\n\n结果:\n snapshot.version(4 种脏值) 已钉 VERSION_REQUIRED\n snapshot.blockedBy(4 种) 已钉 SNAPSHOT_BLOCKERS_INVALID\n next.version(4 种) 已钉 SEMANTIC_VERSION_REQUIRED\n snapshot.appId(4 种) ✗ APP_ID_REQUIRED\n next.appId(4 种) ✗ APP_ID_CHANGED\n next.blockedBy(4 种) ✗ NEXT_SNAPSHOT_NOT_CONSUMABLE\n\n21 个用例里没有任何一个往 appId 或 transition 侧的 blockedBy 喂脏值——那两处守卫改回去\ncheck:fixtures 不会红,它压根走不到那条路径。APP_ID_CHANGED 与 NEXT_SNAPSHOT_NOT_CONSUMABLE\n此前单测与夹具都是零覆盖,后者还是 transition 规则里最常出现的一条。\n\n补:夹具 21 → 25 例(N17 appId 非字符串 / N18 appId 整键缺失 / N19 transition 改写 Owner 应用 /\nN20 next 侧 blockers 非数组),单测 46 → 49 例。补后重算覆盖:24 / 24 全钉。\n\n负向实测:把 N19 的声明原因改成不会产生的串 → 门禁 exit 1 并点名该例,恢复后转绿。\n\n本条只补门禁覆盖,没有改任何判定——registry-snapshot.ts / snapshot-upgrade-review.ts 一行未动;\nupgrade 规则那半边(四条就绪闸门各一条真值用例)本来就完整,不在范围内。\n\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 49/49、contract-application-contract-registry 25/25。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/91216b52fce5a1c677eab2d973a5cdbdac2a68f7","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-18T15:54:24-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json"]},{"id":"7c2ac28f4020b30d3b1940a85169738c3f4f5039","message":"chore(reports): 镜像冒烟重跑回绑 @ 5a40e51\n\n在 5a40e51 的干净 detached worktree 里真起容器跑 governance/smoke-image.mjs,\n6 项全过:container-running / api-health-200(database、redis 均 up)/\nplatform-modules-view(fail-closed,scope(shape))/ module-health-200 /\ndecisions-unauthenticated-401 / docker-healthcheck-healthy。容器结束即删。\n\n冒的仍是 reports/image-digest.json 里那个镜像(sha256:c086993…,源码 05e3826e,\nlinux/arm64),未重建;报告里的 sourceSha 因此仍是 05e3826e——它记的是镜像的来源提交,\nprovenance.gitSha=5a40e51 才是本次冒烟的运行绑定。此前 check:evidence 判它过期是因为\nimage-digest.json 在 05e3826e 之后才被提交进来,结论本身没变,这次是用真跑把绑定补上。\n\nenv-file 由 .secrets/enterprise-platform-runtime-dev.env 按 stack/compose.yaml 的\n容器变量名映射而来,落在会话临时目录、未进仓;容器不挂 stack 网络,故主机名换成\nhost.docker.internal + 已发布端口(PG :55470 / Redis :56379),Redis 借未分配的\n逻辑库 15(dev 常驻运行时占 14,禁止共用)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/7c2ac28f4020b30d3b1940a85169738c3f4f5039","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-18T15:52:52-07:00","added":[],"removed":[],"modified":["reports/image-smoke.latest.json"]},{"id":"5a40e517a6f296e16d35481b22b4db15478eaa50","message":"chore(reports): check:fixtures 回绑 @ f2f1063\n\n17 套件 303 例,0 失败 0 不可用;干净树本地跑,provenance worktreeDirty=false。\n\n九个契约包夹具在本轮入参体检后的分布:\n public-file 29 / cost-capacity 32 / data-analytics 27 / application-contract-registry 21 /\n enterprise-experience 18 / configuration-feature-flags 17 / notification-webhook 17 /\n cross-domain-workflow 16 / collaboration-messaging 14\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/5a40e517a6f296e16d35481b22b4db15478eaa50","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-18T15:51:21-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.json"]}],"total_commits":0,"head_commit":{"id":"73e36fd4d78f4fe2e6d2ee90381700b0da82d381","message":"docs(runbook): §7 补 image:smoke 的 --env-file 从哪来——仓里没有这份文件,此前只写了占位\n\nrunbook 只写 `pnpm image:smoke -- --env-file \u003cenv\u003e`,而仓里既没有这份 env,也没说它从\n哪来。实跑一次才发现 .secrets/enterprise-platform-runtime-dev.env 用的是 compose 变量名,\n镜像读的是容器变量名,映射在 stack/compose.yaml 的 runtime environment 块。\n\n连带记下三处只有实跑才撞得上的坑:smoke 的 docker run 不挂 stack 网络(compose 内部主机名\n解析不了,要换 host.docker.internal + 已发布端口)、Redis 逻辑库别撞 dev 常驻运行时的 14、\nscope 这种 shape 档不需要 DATABASE_URL_\u003cMODULE\u003e。\n\n另加一条判读规则:冒烟报告的 sourceSha 是镜像来源提交、provenance.gitSha 是本次运行绑定,\n两者不同是正常的;check:evidence 判 image-smoke 过期时先比它与 image-digest.json 的\nsourceSha,相同就只需重跑补绑定,不必重建镜像。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/73e36fd4d78f4fe2e6d2ee90381700b0da82d381","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-18T15:55:22-07:00","added":[],"removed":[],"modified":["docs/runbook.md"]},"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":19620,"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":43,"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-19T06:48:33+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"}}...
|
push
|
3
|
22
|
1789772247
|
1789772334
|
0
|
1789772184
|
1789772335
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24153
|
test(contracts): 公共文件 refresh 规则的快照体检分支——夹具与单测都没钉
|
116
|
5
|
platform.yml
|
130
|
5
|
0
|
refs/heads/main
|
a8733b8670d68e423adf4595fb210d185c882afa
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"73e36fd4d78f4fe2e6d2ee90381700b0da82d381","after":"a8733b8670d68e423adf4595fb210d185c882afa","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/73e36fd4d78f4fe2e6d2ee90381700b0da82d381...a8733b8670d68e423adf4595fb210d185c882afa","commits":[{"id":"a8733b8670d68e423adf4595fb210d185c882afa","message":"test(contracts): 公共文件 refresh 规则的快照体检分支——夹具与单测都没钉\n\n按「算覆盖」的口径复查自己这一轮的三个域:变异每个夹具用例的每个叶子字段,收集规则实际产出的原因码,\n再查夹具有没有声明过、单测有没有兜住。data-analytics / cost-capacity 的「哪里都没有」为 0,\npublic-file 有 2 条:FILE_ACCESS_POLICY_REVISION_REQUIRED、FILE_TENANT_POLICIES_REQUIRED。\n\n成因是本轮自己留下的:给 public-file 新增 refresh 规则时,把 normalizeSnapshot 的错误码经\nrefresh().reason 接了出来,但只钉了「版本不前向」与「未批准」两条,快照体检的其余拒绝分支\n(revision 缺失、租户策略为空 / 非数组)没有任何用例走到——那两处守卫改回去门禁不会红。\n\n补:夹具 29 → 31 例(N26 / N27),单测 22 → 23 例,并断言挡下之后活动快照不动、仍按 version 1 出计划。\n补后重算:public-file 的「哪里都没有」归 0。\n\n本条只补覆盖,没有改任何判定。\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 23/23、contract-public-file 31/31。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a8733b8670d68e423adf4595fb210d185c882afa","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-18T15:57:22-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/fixtures/public-file.fixtures.json","contracts/test/public-file-domain.test.mjs"]},{"id":"033fe58013bb8911bcb2f63be44d9b4b003fca66","message":"chore(reports): 工作台两份快照回绑 @ 73e36fd\n\n在 73e36fd 的干净 detached worktree 里重跑 build-workbench-snapshots.mjs。两份都有\n实质内容变化,不只是 provenance:\n\n- Manifest 换代。两份快照上一次绑 a9abcbe,当时 reports/release-manifest.latest.json\n 的 sourceSha 还是 b202dde;772b253 把它回绑到 04d02d6 后,两份快照的发布维度就落在了\n 上一代 Manifest 上。现在 21 条 entries 的 release.source_sha 与 ops 的 release 区块\n 一并更新到 04d02d6,缺项文案也从「镜像绑定 d8f0920 ≠ 当前 b202dde」变成\n 「05e3826 ≠ 当前 04d02d6」。\n- runbook 进了 ops 快照的作用域。73e36fd 给 §7 补了 image:smoke 的 env-file 来源,\n docs/runbook.md 是 workbench-ops-snapshot 的登记输入之一,改了就要重绑。\n\n发布档位仍是 stale 7 / not-in-manifest 14,conflicts 0。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/033fe58013bb8911bcb2f63be44d9b4b003fca66","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-18T15:56:40-07:00","added":[],"removed":[],"modified":["reports/workbench-catalog-snapshot.latest.json","reports/workbench-ops-snapshot.latest.json"]}],"total_commits":0,"head_commit":{"id":"a8733b8670d68e423adf4595fb210d185c882afa","message":"test(contracts): 公共文件 refresh 规则的快照体检分支——夹具与单测都没钉\n\n按「算覆盖」的口径复查自己这一轮的三个域:变异每个夹具用例的每个叶子字段,收集规则实际产出的原因码,\n再查夹具有没有声明过、单测有没有兜住。data-analytics / cost-capacity 的「哪里都没有」为 0,\npublic-file 有 2 条:FILE_ACCESS_POLICY_REVISION_REQUIRED、FILE_TENANT_POLICIES_REQUIRED。\n\n成因是本轮自己留下的:给 public-file 新增 refresh 规则时,把 normalizeSnapshot 的错误码经\nrefresh().reason 接了出来,但只钉了「版本不前向」与「未批准」两条,快照体检的其余拒绝分支\n(revision 缺失、租户策略为空 / 非数组)没有任何用例走到——那两处守卫改回去门禁不会红。\n\n补:夹具 29 → 31 例(N26 / N27),单测 22 → 23 例,并断言挡下之后活动快照不动、仍按 version 1 出计划。\n补后重算:public-file 的「哪里都没有」归 0。\n\n本条只补覆盖,没有改任何判定。\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 23/23、contract-public-file 31/31。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a8733b8670d68e423adf4595fb210d185c882afa","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-18T15:57:22-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/fixtures/public-file.fixtures.json","contracts/test/public-file-domain.test.mjs"]},"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":19770,"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":43,"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-19T06:56:25+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"}}...
|
push
|
3
|
14
|
0
|
1789772335
|
0
|
1789772257
|
1789772335
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24154
|
docs(contracts): 注册中心取舍补双向交叉实测——放弃的那套有 4 个实缺陷,不是覆盖 docs(contracts): 注册中心取舍补双向交叉实测——放弃的那套有 4 个实缺陷,不是覆盖更全...
|
116
|
5
|
platform.yml
|
131
|
5
|
0
|
refs/heads/main
|
7523bd04ab6e3606adf9d17c0b19b74e951e9dd5
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"a8733b8670d68e423adf4595fb210d185c882afa","after":"7523bd04ab6e3606adf9d17c0b19b74e951e9dd5","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/a8733b8670d68e423adf4595fb210d185c882afa...7523bd04ab6e3606adf9d17c0b19b74e951e9dd5","commits":[{"id":"7523bd04ab6e3606adf9d17c0b19b74e951e9dd5","message":"docs(contracts): 注册中心取舍补双向交叉实测——放弃的那套有 4 个实缺陷,不是覆盖更全\n\n7f82399 的取舍此前只写了「按 Owner 裁断取远端」,没有实测支撑。补做交叉验证:两侧各自编译成 dist\n后互喂夹具与单测,不靠读代码比对。\n\n① 9ac9914 的 19 例夹具喂当前实现:13 通过 / 6 不通过。6 例里 5 例只是原因码改名、同一输入两侧都拒;\n 余 1 例是设计取向不同——大写摘要旧的拒,新的经 normalizeDigest 归一为小写,比较走 sameHexRef。\n 其 40 例单测喂当前实现:36 通过 / 4 不通过,失败集中在同样四个主题。\n② 反向,当前 25 例夹具喂 9ac9914:18 通过 / 7 不通过。3 例是改名的镜像,另外 4 例是被放弃那套的实缺陷:\n - N10-mutable-version-tag 返回 [] 即放行可变版本标签;\n - N11-leading-zero-version 拒了但拒错原因,其 \\d+\\.\\d+\\.\\d+ 收下了 1.02.0;\n - P03-same-digest-other-case 误拒——它自己的注释抱怨「同一摘要两种写法等于两个身份」,却只在入口拒大写,\n 升级比较那条路上仍把大小写变体当成两个摘要,它抱怨的 bug 它没修完;\n - P04-prerelease-precedes-its-release 误拒 1.0.0-rc.0,而平台自己正在发 1.0.0-rc.x。\n③ 根因是结构性的:被放弃那套三个文件各带一套版本文法,远端抽 registry-primitives.ts 正是为收敛这三套,\n 其抬头所述经比对属实。\n④ 覆盖面 19/40 → 25/49。旧的在 upgrade 规则上多 1 例,但 ① 已证明那 7 例在当前实现下无一失守。\n\n结论:放弃 9ac9914 未造成覆盖缺口,反而避开 4 个实缺陷;唯一差异是原因码命名,无需回捡。\n\n同条订正一处措辞:「报告另行回绑」已不成立,该报告已于 0ed7ee7 回绑 @ 7f82399,其后由后续会话在更新\nSHA 上重绑。本次只改 contracts/SOURCE.md,不在任何 evidence-scopes 作用域内,不影响报告新鲜度。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/7523bd04ab6e3606adf9d17c0b19b74e951e9dd5","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-18T15:58:50-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md"]},{"id":"3e1cc814eb2141710a42e4afdb865f937790436d","message":"docs(发布): 补记 rc.3 列车的本地旁路发布——证据取自产物内 provenance,并记下两处偏离\n\nrc.3 三包(contracts / governance / client-fact)2026-09-13 经旁路通道发出,当时没留记录。\n2026-09-18 做对抗验收、核对 CLAUDE.md 的 contracts 版本声明时,才从 Registry 实查发现\nrc.3 在架而仓内一字没有——provenance.json 随包分发、不入仓,漏写记录就等于这次发布\n在仓里不留任何痕迹。\n\n证据全部一手:Gitea Registry packument + 三个 rc.3 tarball 内的 provenance.json;\n下载产物的 sha512 与 Registry 登记的 integrity 三包逐一核对一致,确认读到的\nprovenance 出自架上那三个包。\n\n记下的事实:源 036a308(三包 package.json 在该提交上均已是 1.0.0-rc.3,符合「一组同版本包」),\n三份 provenance 均 worktreeDirty:false、runner:\"local\"、releaseChannel:\"local-bypass\",\nverificationRun* 与 candidateSha256 全 null、reports:[]。实际动因是 client-fact 的 U-29;\ncontracts 从 rc.2 到 rc.3 **零内容变更**,只有版本号跟车。边界逐条继承 rc.2 那节,一个字不放宽。\n\n补记时一并发现两处偏离,都写进文档:\n\n1. 两趟车都没打 tag。CL-5 的口径是「一次发布 = 一个 tag = 一组同版本包」,而 rc.2 / rc.3\n 六份 provenance 的 tag 全是 null,仓里 packages-v* 也只到 packages-v1.0.0-rc.1。\n2. 上一节表格写 rc.2「源 eb3cf2c」,而 rc.2 产物内 provenance 记的是 6d3900a。\n **未擅改上一节表格**,只记录这个不一致,留给该次发布的执行者确认。\n\nCLAUDE.md 同步去掉上一条提交里标的「rc.3 无发布记录」缺口,改为指向本记录。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/3e1cc814eb2141710a42e4afdb865f937790436d","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-18T15:58:47-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/G-12本地旁路发布记录-2026-09-13.md"]},{"id":"098263a175e453448d36f3f281522f7cd96040fe","message":"docs(部署): 记录补 §13——会话级临时目录里的密钥清干净\n\n§11.3 把 identity 的 env 从上一个会话的 /private/tmp scratchpad 搬进 .secrets/ 之后,\n那个 scratchpad 里还躺着三份带密文件。本节把它收口:一挪两删一剪,逐条记依据。\n\n要点不是「清理干净了」,是那个位置为什么放不得:会话级 scratchpad 随时会被清,\n而 launch.json 指着它(运行面下次起不来)、里面又有别处没有备份的凭证(东西就没了),\n两个隐患叠在一起。\n\n本轮新核实两件事,都写进记录:demo 租户管理员的明文口令**全工作区仅此一份**——\n连 .secrets/backups/ 里 09-17 那套交付备份的 platform_identity_dev.dump 也搜不到明文\n(库里存散列,账号能从备份恢复、明文不能),而同一租户只能 bootstrap 一次(runbook §2);\n以及 git grep -F over HEAD 确认该口令**未出现在任何被跟踪文件**里(邮箱出现在 4 份,非机密)。\n\n删除与保留都留了判据:删前查引用与进程命令行,保留的三行用 sha256 前后比对证明逐字节未改。\n§13.4 登记单点风险:是否给 idp-demo-admin.txt 做仓外备份,留 Owner 判断。\n\n作用域 = 本机 dev 的仓外文件治理,不含代码与门禁证据。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/098263a175e453448d36f3f281522f7cd96040fe","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-18T15:58:32-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},{"id":"d950aa2f4b6f6bdcc3ccb7e4b0ba4bc69d6f7822","message":"test(contracts): 通知与 Webhook 的请求体检与出站 allowlist 前置——七条原因码只有实现没有用例\n\n按同一口径算覆盖(变异每个夹具用例的每个叶子字段 → 收集规则实际产出的原因码 → 查夹具声明与单测),\nnotification-webhook 有 7 条「哪里都没有」:\n\n WEBHOOK_TENANT_ID_REQUIRED WEBHOOK_INTENT_ID_REQUIRED\n WEBHOOK_DESTINATION_ID_REQUIRED WEBHOOK_TEMPLATE_ID_REQUIRED\n WEBHOOK_REQUESTED_BY_REQUIRED WEBHOOK_CLASSIFICATION_INVALID\n WEBHOOK_ALLOWED_HOSTS_REQUIRED\n\n前六条在 plan() 开头那段 try/catch 里:归属三件套(tenant / intent / requestedBy)与投递目标\n(destination / template)缺一即拒、分级必须在册。整段体检删掉,夹具与单测都不会红——原来那 17 个\n用例里没有一个喂缺字段的请求。\n\n第七条是快照前置:allowedHosts 缺失 / 空 / 非数组时 normalizeSnapshot 拒收整份策略。放行一个\n「没有出站约束」的路由比没有路由更危险,投递目标不再受任何主机限制,而这条同样零覆盖。\n\n补:夹具 17 → 24 例(N15–N21),单测 24 → 27 例(六个字段 × 五种脏值、分级四种、allowlist 三种)。\n补后重算:notification-webhook 的「哪里都没有」归 0。\n\n负向实测:把 N20 的声明原因改成不会产生的串 → 门禁 exit 1 并点名该例,恢复后转绿。\n\n本条只补覆盖,没有改任何判定;webhook-delivery-planner.ts / notification-effect.ts 一行未动。\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 27/27、contract-notification-webhook 24/24。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/d950aa2f4b6f6bdcc3ccb7e4b0ba4bc69d6f7822","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-18T15:58:30-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/fixtures/notification-webhook.fixtures.json","contracts/test/notification-webhook-domain.test.mjs"]}],"total_commits":0,"head_commit":{"id":"7523bd04ab6e3606adf9d17c0b19b74e951e9dd5","message":"docs(contracts): 注册中心取舍补双向交叉实测——放弃的那套有 4 个实缺陷,不是覆盖更全\n\n7f82399 的取舍此前只写了「按 Owner 裁断取远端」,没有实测支撑。补做交叉验证:两侧各自编译成 dist\n后互喂夹具与单测,不靠读代码比对。\n\n① 9ac9914 的 19 例夹具喂当前实现:13 通过 / 6 不通过。6 例里 5 例只是原因码改名、同一输入两侧都拒;\n 余 1 例是设计取向不同——大写摘要旧的拒,新的经 normalizeDigest 归一为小写,比较走 sameHexRef。\n 其 40 例单测喂当前实现:36 通过 / 4 不通过,失败集中在同样四个主题。\n② 反向,当前 25 例夹具喂 9ac9914:18 通过 / 7 不通过。3 例是改名的镜像,另外 4 例是被放弃那套的实缺陷:\n - N10-mutable-version-tag 返回 [] 即放行可变版本标签;\n - N11-leading-zero-version 拒了但拒错原因,其 \\d+\\.\\d+\\.\\d+ 收下了 1.02.0;\n - P03-same-digest-other-case 误拒——它自己的注释抱怨「同一摘要两种写法等于两个身份」,却只在入口拒大写,\n 升级比较那条路上仍把大小写变体当成两个摘要,它抱怨的 bug 它没修完;\n - P04-prerelease-precedes-its-release 误拒 1.0.0-rc.0,而平台自己正在发 1.0.0-rc.x。\n③ 根因是结构性的:被放弃那套三个文件各带一套版本文法,远端抽 registry-primitives.ts 正是为收敛这三套,\n 其抬头所述经比对属实。\n④ 覆盖面 19/40 → 25/49。旧的在 upgrade 规则上多 1 例,但 ① 已证明那 7 例在当前实现下无一失守。\n\n结论:放弃 9ac9914 未造成覆盖缺口,反而避开 4 个实缺陷;唯一差异是原因码命名,无需回捡。\n\n同条订正一处措辞:「报告另行回绑」已不成立,该报告已于 0ed7ee7 回绑 @ 7f82399,其后由后续会话在更新\nSHA 上重绑。本次只改 contracts/SOURCE.md,不在任何 evidence-scopes 作用域内,不影响报告新鲜度。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/7523bd04ab6e3606adf9d17c0b19b74e951e9dd5","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-18T15:58:50-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md"]},"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":19827,"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":43,"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-19T06:57:38+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"}}...
|
push
|
3
|
22
|
1789772366
|
1789772427
|
0
|
1789772335
|
1789772427
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24155
|
chore(reports): check:fixtures 回绑 @ 7523bd0
|
116
|
5
|
platform.yml
|
132
|
5
|
0
|
refs/heads/main
|
352e61531916d12d6eb804674f5e49796104fd06
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"7523bd04ab6e3606adf9d17c0b19b74e951e9dd5","after":"352e61531916d12d6eb804674f5e49796104fd06","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/7523bd04ab6e3606adf9d17c0b19b74e951e9dd5...352e61531916d12d6eb804674f5e49796104fd06","commits":[{"id":"352e61531916d12d6eb804674f5e49796104fd06","message":"chore(reports): check:fixtures 回绑 @ 7523bd0\n\n上一份绑 91216b5,其后 notification-webhook 与 public-file 两份夹具有提交变更,报告随之过期\n(本次 SOURCE.md 的文档提交不在任何 evidence-scopes 作用域内,不是过期原因)。\n\n在 .worktrees/rebind-fixtures 的 detached 干净检出(HEAD=7523bd0)跑全 17 套件:\n316 例,失败 0,不可用 0,configurationError 0;provenance worktreeDirty=false、runner=local。\n\n先在主树跑过一次,跑到一半并行会话改了 contracts/test/fixtures/application-contract-registry.fixtures.json,\nprovenance 落成 worktreeDirty=true、例数 323(含那份未提交增量),该份作废未采用,主树报告已还原到已提交版\n后改走干净检出。两次差的 7 例即该未提交增量,待其提交后由对应会话重绑。\n\ncontracts/dist 由该检出自己 tsc 构建;runtime 九个模块经 turbo 全量缓存命中。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/352e61531916d12d6eb804674f5e49796104fd06","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-18T15:59:32-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.json"]}],"total_commits":0,"head_commit":{"id":"352e61531916d12d6eb804674f5e49796104fd06","message":"chore(reports): check:fixtures 回绑 @ 7523bd0\n\n上一份绑 91216b5,其后 notification-webhook 与 public-file 两份夹具有提交变更,报告随之过期\n(本次 SOURCE.md 的文档提交不在任何 evidence-scopes 作用域内,不是过期原因)。\n\n在 .worktrees/rebind-fixtures 的 detached 干净检出(HEAD=7523bd0)跑全 17 套件:\n316 例,失败 0,不可用 0,configurationError 0;provenance worktreeDirty=false、runner=local。\n\n先在主树跑过一次,跑到一半并行会话改了 contracts/test/fixtures/application-contract-registry.fixtures.json,\nprovenance 落成 worktreeDirty=true、例数 323(含那份未提交增量),该份作废未采用,主树报告已还原到已提交版\n后改走干净检出。两次差的 7 例即该未提交增量,待其提交后由对应会话重绑。\n\ncontracts/dist 由该检出自己 tsc 构建;runtime 九个模块经 turbo 全量缓存命中。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/352e61531916d12d6eb804674f5e49796104fd06","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-18T15:59:32-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.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":19956,"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":44,"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-19T06:59:00+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"}}...
|
push
|
3
|
14
|
0
|
1789772398
|
0
|
1789772377
|
1789772398
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24156
|
test(contracts): 注册中心 upgrade 的请求体检面——15 条原因码只有实现没 test(contracts): 注册中心 upgrade 的请求体检面——15 条原因码只有实现没有用例...
|
116
|
5
|
platform.yml
|
133
|
5
|
0
|
refs/heads/main
|
5f3f6084506e2a173759f07f882713ffdd4111ae
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"352e61531916d12d6eb804674f5e49796104fd06","after":"5f3f6084506e2a173759f07f882713ffdd4111ae","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/352e61531916d12d6eb804674f5e49796104fd06...5f3f6084506e2a173759f07f882713ffdd4111ae","commits":[{"id":"5f3f6084506e2a173759f07f882713ffdd4111ae","message":"test(contracts): 注册中心 upgrade 的请求体检面——15 条原因码只有实现没有用例\n\n同日「注册中心入参体检的门禁覆盖」补的是 snapshot / transition 两条规则;按同一口径把 upgrade 也算了\n一遍,15 条「哪里都没有」,全部在四条就绪闸门下面那层请求校验:\n\n 两个 pin 的锁定四要素(snapshotVersion / snapshotDigest / sourceCommit / lockMode=exact_digest)\n 与消费者归属 10 条\n 目标制品的 schemaApiVersion 与 linter 证据 2 条\n 影响面的受影响清单、已确认清单与消费者归属比对 3 条\n\n此前 6 个 upgrade 用例全部对着四条就绪闸门(independentGitSourceReady 等各一条真值用例,那部分做得\n完整)。闸门开了之后请求本身长什么样,门禁不看——这 15 条删掉不会红。我今天早些时候说「upgrade 那半边\n做得很扎实」是说窄了:说的是闸门,不是闸门下面的请求面。\n\n补:夹具 25 → 32 例(N21–N27),单测 49 → 53 例。成组声明是有意的——门禁要求声明的原因逐条出现,\n所以一条用例同时钉住四要素,比四条各钉一条更严。补后重算:本域「哪里都没有」归 0。\n\n负向实测:给 N21 加一条不会产生的声明原因 → 门禁 exit 1 并点名该例,恢复后转绿。\n\n本条只补覆盖,没有改任何判定;snapshot-upgrade-review.ts 一行未动。\n九个契约包至此「哪里都没有」全部归零。\n\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 53/53、contract-application-contract-registry 32/32。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/5f3f6084506e2a173759f07f882713ffdd4111ae","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-18T15:59:45-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"5f3f6084506e2a173759f07f882713ffdd4111ae","message":"test(contracts): 注册中心 upgrade 的请求体检面——15 条原因码只有实现没有用例\n\n同日「注册中心入参体检的门禁覆盖」补的是 snapshot / transition 两条规则;按同一口径把 upgrade 也算了\n一遍,15 条「哪里都没有」,全部在四条就绪闸门下面那层请求校验:\n\n 两个 pin 的锁定四要素(snapshotVersion / snapshotDigest / sourceCommit / lockMode=exact_digest)\n 与消费者归属 10 条\n 目标制品的 schemaApiVersion 与 linter 证据 2 条\n 影响面的受影响清单、已确认清单与消费者归属比对 3 条\n\n此前 6 个 upgrade 用例全部对着四条就绪闸门(independentGitSourceReady 等各一条真值用例,那部分做得\n完整)。闸门开了之后请求本身长什么样,门禁不看——这 15 条删掉不会红。我今天早些时候说「upgrade 那半边\n做得很扎实」是说窄了:说的是闸门,不是闸门下面的请求面。\n\n补:夹具 25 → 32 例(N21–N27),单测 49 → 53 例。成组声明是有意的——门禁要求声明的原因逐条出现,\n所以一条用例同时钉住四要素,比四条各钉一条更严。补后重算:本域「哪里都没有」归 0。\n\n负向实测:给 N21 加一条不会产生的声明原因 → 门禁 exit 1 并点名该例,恢复后转绿。\n\n本条只补覆盖,没有改任何判定;snapshot-upgrade-review.ts 一行未动。\n九个契约包至此「哪里都没有」全部归零。\n\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 53/53、contract-application-contract-registry 32/32。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/5f3f6084506e2a173759f07f882713ffdd4111ae","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-18T15:59:45-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.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":19968,"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":44,"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-19T06:59:38+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"}}...
|
push
|
3
|
14
|
0
|
1789772427
|
0
|
1789772398
|
1789772427
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24157
|
docs(发布): 按产物内 provenance 订正 rc.2 的源——eb3cf2c 是写记录 docs(发布): 按产物内 provenance 订正 rc.2 的源——eb3cf2c 是写记录时的 HEAD,发布实际在 6d3900a...
|
116
|
5
|
platform.yml
|
134
|
5
|
0
|
refs/heads/main
|
ffdd21a2ae238023f2bb48a632deaabade5e88f1
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"5f3f6084506e2a173759f07f882713ffdd4111ae","after":"ffdd21a2ae238023f2bb48a632deaabade5e88f1","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/5f3f6084506e2a173759f07f882713ffdd4111ae...ffdd21a2ae238023f2bb48a632deaabade5e88f1","commits":[{"id":"ffdd21a2ae238023f2bb48a632deaabade5e88f1","message":"docs(发布): 按产物内 provenance 订正 rc.2 的源——eb3cf2c 是写记录时的 HEAD,发布实际在 6d3900a\n\nG-12 表格原记「源 eb3cf2c」。rc.2 三个 tarball 内的 provenance.json 各自独立却一致记为\n6d3900a:该文件由 publish-rc.mjs 在发布那一刻写入,三包互证,是一手证据。\n三份产物的 sha512 与 Registry 登记的 integrity 也逐一核对一致,确认读的是架上那三个包。\n\neb3cf2c(21:26:55)与 6d3900a(21:42:24)相隔 15 分钟,其间只有一个纯文档提交\n(docs(ci),改 stack/ci/act-runner/README.md)——**未触及三个发布包**。\n所以两个源产出的包字节完全相同,provenance.sourceSha 是唯一能区分的证据;\n产物本身不受影响,受影响的只是「从哪个提交发的」这条事实记录。\n\n上一条提交里「不擅改、留给执行者确认」的处置随之改为已订正,三处同步:\nG-12 表格、G-12「补记时一并发现的两处偏离」第 2 条、CLAUDE.md 的 contracts 条目。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/ffdd21a2ae238023f2bb48a632deaabade5e88f1","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-18T16:00:24-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/G-12本地旁路发布记录-2026-09-13.md"]}],"total_commits":0,"head_commit":{"id":"ffdd21a2ae238023f2bb48a632deaabade5e88f1","message":"docs(发布): 按产物内 provenance 订正 rc.2 的源——eb3cf2c 是写记录时的 HEAD,发布实际在 6d3900a\n\nG-12 表格原记「源 eb3cf2c」。rc.2 三个 tarball 内的 provenance.json 各自独立却一致记为\n6d3900a:该文件由 publish-rc.mjs 在发布那一刻写入,三包互证,是一手证据。\n三份产物的 sha512 与 Registry 登记的 integrity 也逐一核对一致,确认读的是架上那三个包。\n\neb3cf2c(21:26:55)与 6d3900a(21:42:24)相隔 15 分钟,其间只有一个纯文档提交\n(docs(ci),改 stack/ci/act-runner/README.md)——**未触及三个发布包**。\n所以两个源产出的包字节完全相同,provenance.sourceSha 是唯一能区分的证据;\n产物本身不受影响,受影响的只是「从哪个提交发的」这条事实记录。\n\n上一条提交里「不擅改、留给执行者确认」的处置随之改为已订正,三处同步:\nG-12 表格、G-12「补记时一并发现的两处偏离」第 2 条、CLAUDE.md 的 contracts 条目。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/ffdd21a2ae238023f2bb48a632deaabade5e88f1","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-18T16:00:24-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/G-12本地旁路发布记录-2026-09-13.md"]},"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":20021,"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":44,"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-19T06:59:59+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"}}...
|
push
|
2
|
30
|
1789772429
|
1789772490
|
0
|
1789772428
|
1789772532
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24158
|
test(contracts): 会话准入 planner 的门禁覆盖——20 个可达出口只有 1 test(contracts): 会话准入 planner 的门禁覆盖——20 个可达出口只有 1 个走过,ADMIT 与 SKIP_DUPLICATE 还是同一个结果...
|
116
|
5
|
platform.yml
|
135
|
5
|
0
|
refs/heads/main
|
1a1b37e4669cfd80f87650050894fede8aee6b90
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ffdd21a2ae238023f2bb48a632deaabade5e88f1","after":"1a1b37e4669cfd80f87650050894fede8aee6b90","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/ffdd21a2ae238023f2bb48a632deaabade5e88f1...1a1b37e4669cfd80f87650050894fede8aee6b90","commits":[{"id":"1a1b37e4669cfd80f87650050894fede8aee6b90","message":"test(contracts): 会话准入 planner 的门禁覆盖——20 个可达出口只有 1 个走过,ADMIT 与 SKIP_DUPLICATE 还是同一个结果\n\n同日第一条(5720165)把判定收紧了,但门禁看不到其中绝大部分。对 dist 逐条实测:\nplan() 有 20 个可达出口,check:fixtures 上只走过 1 个(N06 无策略即拒),整张租户策略矩阵\n与 appendRejections 全部 8 行映射都只有单测看着,其中四个出口连单测也没有。\n\n本次判定逻辑一行未改——conversation-message.ts 与 conversation-admission-planner.ts 零改动,\n只动 fixture-evaluator.ts 的可见性,加用例。\n\n1. ADMIT 与 SKIP_DUPLICATE 在夹具里是同一个结果。评估器 plan 分支的判据是 `\"reasons\" in r`,\n 两者都没有 reasons,于是都返回空数组 = ACCEPT。把 ADMIT 全改写成 SKIP_DUPLICATE(或反过来)\n 门禁不会红,而这两者的区别正是「这条消息要不要真的落账」。同一文件里的 append 规则本来就写成\n 「只有 APPEND 算放行」,plan 现在与之同口径:非 ADMIT 即列出出口名。\n\n2. refresh() 在门禁上零覆盖(与公共文件 793d0a1 同形)。planner 三个公开方法里它是唯一没有夹具\n 规则的,版本回退拒绝与坏快照保留 last-known-good 此前只有单测。新增 refresh 规则:\n applied=true 为放行,否则返回 planner 自己给的 reason。\n\n3. 四个出口此前任何地方都没走过,均补单测:TENANT_NOT_ALLOWED(策略里根本没有这个租户,与\n 「请求跨租户」不是一回事)、CONVERSATION_TYPE_NOT_ALLOWED、SENDER_TYPE_NOT_ALLOWED(凭据与\n 发送者类型配套、策略仍不允许该类型,须与 ACTOR_CREDENTIAL_MISMATCH 分开证明)、\n CONVERSATION_TENANT_MISMATCH(映射表把 classify 的 TENANT_MISMATCH 换成 planner 自己的码)。\n\n覆盖:夹具 14 例(正 2 / 反 12)→ 39 例(正 4 / 反 35);定向测试 23 → 30 例,第一轮的断言一条未动。\n并给此前只断言「拒绝」的 N05 / N06 补上 reasons 声明。plan 与 refresh 各留一例放行(P03 / P04)——\n只有放行一侧也钉住,SKIP_DUPLICATE 与 applied 的区分才有意义。\n\n一处明写不覆盖:appendRejections 的 REJECT → MESSAGE_APPEND_INVALID 按当前控制流不可达——\nclassifyConversationAppend 只在 preflight 失败时返回 REJECT,而 plan() 更早就返回了 preflight 拒绝。\n保留该行作纵深防御,但不造用例假装覆盖,理由写进夹具 description 与蓝图。\n\n未做(越界):会话 / 成员 / 消息账本、长连接服务、Fact、独立运行服务一件未建,C16 按缺失模块完善清单\n仍卡在「裁决 · 实现」(Owner ADR、三消费者、G4);Catalog 登记一律未动。\n\n证据:真实工作树 pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas\n无漂移、node --test contracts/test/*.test.mjs 382/382、contract-collaboration-messaging 夹具 39/39。\n负向实测两次:把 N19 的声明原因改成 ACTOR_CREDENTIAL_MISMATCH → 门禁 exit 1 并点名该例\n(reasons=[\"SENDER_TYPE_NOT_ALLOWED\"]);把 N13 的 expect 翻成 ACCEPT → 被 id/expect 一致性规则\n先挡下(exit 1)。两次还原后 exit 0。本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/1a1b37e4669cfd80f87650050894fede8aee6b90","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-18T16:01:18-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/collaboration-messaging/fixture-evaluator.ts","contracts/test/collaboration-messaging-domain.test.mjs","contracts/test/fixtures/collaboration-messaging.fixtures.json","docs/domain/conversation-message-blueprint.md"]}],"total_commits":0,"head_commit":{"id":"1a1b37e4669cfd80f87650050894fede8aee6b90","message":"test(contracts): 会话准入 planner 的门禁覆盖——20 个可达出口只有 1 个走过,ADMIT 与 SKIP_DUPLICATE 还是同一个结果\n\n同日第一条(5720165)把判定收紧了,但门禁看不到其中绝大部分。对 dist 逐条实测:\nplan() 有 20 个可达出口,check:fixtures 上只走过 1 个(N06 无策略即拒),整张租户策略矩阵\n与 appendRejections 全部 8 行映射都只有单测看着,其中四个出口连单测也没有。\n\n本次判定逻辑一行未改——conversation-message.ts 与 conversation-admission-planner.ts 零改动,\n只动 fixture-evaluator.ts 的可见性,加用例。\n\n1. ADMIT 与 SKIP_DUPLICATE 在夹具里是同一个结果。评估器 plan 分支的判据是 `\"reasons\" in r`,\n 两者都没有 reasons,于是都返回空数组 = ACCEPT。把 ADMIT 全改写成 SKIP_DUPLICATE(或反过来)\n 门禁不会红,而这两者的区别正是「这条消息要不要真的落账」。同一文件里的 append 规则本来就写成\n 「只有 APPEND 算放行」,plan 现在与之同口径:非 ADMIT 即列出出口名。\n\n2. refresh() 在门禁上零覆盖(与公共文件 793d0a1 同形)。planner 三个公开方法里它是唯一没有夹具\n 规则的,版本回退拒绝与坏快照保留 last-known-good 此前只有单测。新增 refresh 规则:\n applied=true 为放行,否则返回 planner 自己给的 reason。\n\n3. 四个出口此前任何地方都没走过,均补单测:TENANT_NOT_ALLOWED(策略里根本没有这个租户,与\n 「请求跨租户」不是一回事)、CONVERSATION_TYPE_NOT_ALLOWED、SENDER_TYPE_NOT_ALLOWED(凭据与\n 发送者类型配套、策略仍不允许该类型,须与 ACTOR_CREDENTIAL_MISMATCH 分开证明)、\n CONVERSATION_TENANT_MISMATCH(映射表把 classify 的 TENANT_MISMATCH 换成 planner 自己的码)。\n\n覆盖:夹具 14 例(正 2 / 反 12)→ 39 例(正 4 / 反 35);定向测试 23 → 30 例,第一轮的断言一条未动。\n并给此前只断言「拒绝」的 N05 / N06 补上 reasons 声明。plan 与 refresh 各留一例放行(P03 / P04)——\n只有放行一侧也钉住,SKIP_DUPLICATE 与 applied 的区分才有意义。\n\n一处明写不覆盖:appendRejections 的 REJECT → MESSAGE_APPEND_INVALID 按当前控制流不可达——\nclassifyConversationAppend 只在 preflight 失败时返回 REJECT,而 plan() 更早就返回了 preflight 拒绝。\n保留该行作纵深防御,但不造用例假装覆盖,理由写进夹具 description 与蓝图。\n\n未做(越界):会话 / 成员 / 消息账本、长连接服务、Fact、独立运行服务一件未建,C16 按缺失模块完善清单\n仍卡在「裁决 · 实现」(Owner ADR、三消费者、G4);Catalog 登记一律未动。\n\n证据:真实工作树 pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas\n无漂移、node --test contracts/test/*.test.mjs 382/382、contract-collaboration-messaging 夹具 39/39。\n负向实测两次:把 N19 的声明原因改成 ACTOR_CREDENTIAL_MISMATCH → 门禁 exit 1 并点名该例\n(reasons=[\"SENDER_TYPE_NOT_ALLOWED\"]);把 N13 的 expect 翻成 ACCEPT → 被 id/expect 一致性规则\n先挡下(exit 1)。两次还原后 exit 0。本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/1a1b37e4669cfd80f87650050894fede8aee6b90","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-18T16:01:18-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/collaboration-messaging/fixture-evaluator.ts","contracts/test/collaboration-messaging-domain.test.mjs","contracts/test/fixtures/collaboration-messaging.fixtures.json","docs/domain/conversation-message-blueprint.md"]},"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":20041,"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":44,"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-19T07:00:28+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"}}...
|
push
|
2
|
34
|
1789772534
|
1789772573
|
0
|
1789772524
|
1789772648
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24159
|
docs(治理): 记录 2026-09-18 镜像同步被分支保护拒绝——顺带是 G14 缺的半份远 docs(治理): 记录 2026-09-18 镜像同步被分支保护拒绝——顺带是 G14 缺的半份远端拦截实证...
|
116
|
5
|
platform.yml
|
136
|
5
|
0
|
refs/heads/main
|
95b88d34fca66f4030640c2652d3171ecfb05b97
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"1a1b37e4669cfd80f87650050894fede8aee6b90","after":"95b88d34fca66f4030640c2652d3171ecfb05b97","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/1a1b37e4669cfd80f87650050894fede8aee6b90...95b88d34fca66f4030640c2652d3171ecfb05b97","commits":[{"id":"95b88d34fca66f4030640c2652d3171ecfb05b97","message":"docs(治理): 记录 2026-09-18 镜像同步被分支保护拒绝——顺带是 G14 缺的半份远端拦截实证\n\ngit push github HEAD:main 被 GH006 拒绝:required check\n\"Release candidate verification + manifest\" 缺失。推之前核过是纯快进(github/main\n是本地 HEAD 的祖先,落差 237 个提交,零分叉、无需 force),所以拒绝不是分叉造成的。\n\n记下三件事:① 分支保护配置快照(enforce_admins=true,对管理员生效;\nallow_force_pushes=false),这是本仓少数几处真正生效的远端拦截;② 该 check 产不出来的\n病因是 Actions 计费付款失败——最近三次 run 的失败 job 起止相差 2 秒且无日志,runner\n从未领取;③ 推之前用 merge-tree 试算的 8 条 base=main 的 PR 影响(6 条会翻成冲突),\n留档说明当前「20 条全 MERGEABLE」是镜像落后造成的假象。\n\n明写这份证据的边界:本次被拒的原因是 check 缺失,不是 check 判红,所以只能支撑\n「远端存在拦截」,不能支撑「远端拦截有效」——G14 的受控失败 PR 仍未做,不得标 GREEN。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/95b88d34fca66f4030640c2652d3171ecfb05b97","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-18T16:02:20-07:00","added":["docs/GitHub镜像同步被拒与远端拦截实证-2026-09-18.md"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"95b88d34fca66f4030640c2652d3171ecfb05b97","message":"docs(治理): 记录 2026-09-18 镜像同步被分支保护拒绝——顺带是 G14 缺的半份远端拦截实证\n\ngit push github HEAD:main 被 GH006 拒绝:required check\n\"Release candidate verification + manifest\" 缺失。推之前核过是纯快进(github/main\n是本地 HEAD 的祖先,落差 237 个提交,零分叉、无需 force),所以拒绝不是分叉造成的。\n\n记下三件事:① 分支保护配置快照(enforce_admins=true,对管理员生效;\nallow_force_pushes=false),这是本仓少数几处真正生效的远端拦截;② 该 check 产不出来的\n病因是 Actions 计费付款失败——最近三次 run 的失败 job 起止相差 2 秒且无日志,runner\n从未领取;③ 推之前用 merge-tree 试算的 8 条 base=main 的 PR 影响(6 条会翻成冲突),\n留档说明当前「20 条全 MERGEABLE」是镜像落后造成的假象。\n\n明写这份证据的边界:本次被拒的原因是 check 缺失,不是 check 判红,所以只能支撑\n「远端存在拦截」,不能支撑「远端拦截有效」——G14 的受控失败 PR 仍未做,不得标 GREEN。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/95b88d34fca66f4030640c2652d3171ecfb05b97","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-18T16:02:20-07:00","added":["docs/GitHub镜像同步被拒与远端拦截实证-2026-09-18.md"],"removed":[],"modified":[]},"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":20101,"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":44,"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-19T07:02:05+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"}}...
|
push
|
2
|
34
|
1789772573
|
1789772611
|
0
|
1789772550
|
1789772665
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24160
|
docs(部署): D-8 裁决落地——dev 面配上现签令牌,并记下它当场被实证的代价
|
116
|
5
|
platform.yml
|
137
|
5
|
0
|
refs/heads/main
|
52fe066412543b57b729791de298ac0b5898b52b
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"95b88d34fca66f4030640c2652d3171ecfb05b97","after":"52fe066412543b57b729791de298ac0b5898b52b","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/95b88d34fca66f4030640c2652d3171ecfb05b97...52fe066412543b57b729791de298ac0b5898b52b","commits":[{"id":"52fe066412543b57b729791de298ac0b5898b52b","message":"docs(部署): D-8 裁决落地——dev 面配上现签令牌,并记下它当场被实证的代价\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/52fe066412543b57b729791de298ac0b5898b52b","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-18T16:04:51-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},{"id":"bdb662d439cf7e24d8caef596c9ebf5d5e38b12d","message":"test(contracts): 指标契约的门禁覆盖——34 个原因码只有 21 个在夹具上走过,G3 前运维绑定那条一片空白\n\n同日 daa226b 把崩溃面、枚举零校验与真值旗标收了。本轮只问一件事:这些判定门禁看得见几条。\n做法是把 34 个原因码逐条与夹具的实际产出比对——跑每个用例、收集真实返回值,不读代码推断。\n\n判定逻辑一行未改:metric-contract.ts 本轮零改动,只动夹具与测试。\n\n1. 12 条从未在门禁上走过,只有单测看着:CDC_CAPTURE_CONTRACT_REQUIRED、DIMENSION_ID_DUPLICATED、\n OPERATIONAL_BINDING_FORBIDDEN_BEFORE_G3,演进的五条不可变断言(METRIC_ID_CHANGED /\n METRIC_NAME_CHANGED / METRIC_OWNER_CHANGED / METRIC_SOURCE_CHANGED / EPISTEMIC_STATUS_CHANGED)、\n REFRESH_SLA_REGRESSION,以及六条基线旗标里的三条(FACT_OR_CDC / IDENTITY_SCOPE /\n DATA_CLASSIFICATION_BASELINE_NOT_READY)。其中 OPERATIONAL_BINDING_FORBIDDEN_BEFORE_G3 是本域最\n 靠近红线的一条——G3 前不得把 sql / dburl / outputTable 之类写进契约——门禁上此前一片空白。\n\n2. 1 条走到过但没人钉住:METRIC_CLASSIFICATION_TOO_LOW 由别的用例顺带产出,没有任何用例声明它,\n 改坏了门禁不会红。\n\n3. 反方向一条:REFRESH_SLA_INVALID 门禁有、单测没有,补进单测,连同「演进时 SLA 只能收紧」的正反向。\n\n覆盖:夹具 27 → 40 例(正 3 / 反 37),新增 N25—N37 十三例且每例只产出一条原因(逐例核过实际返回值,\n不靠门禁的前缀包含蒙混);定向测试 25 → 27 例;原因码门禁覆盖 21/34 → 34/34。上一轮用例一条未改。\n\n另跑一遍夹具变异探针(40 例的真实 payload,逐个叶子字段换 14 种脏值,走 evaluateFixturePayload 入口):\n13552 个变异点、0 处抛异常——daa226b 的硬化结论在扩面后仍成立。\n\n未做(越界):采集、语义层、查询 API 一件未建,C17 按缺失模块完善清单仍是「裁决」;Catalog 登记未动。\n\n证据:pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas 无漂移、\nnode --test contracts/test/*.test.mjs 390/390、contract-data-analytics 夹具 40/40 失败 0。\n负向实测:把 N27 的声明原因改成 METRIC_LINEAGE_REQUIRED → 门禁 exit 1 并点名该例\n(reasons=[\"OPERATIONAL_BINDING_FORBIDDEN_BEFORE_G3\"]),还原后 exit 0。\n工作树另有并行会话在跑全链门禁,故本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/bdb662d439cf7e24d8caef596c9ebf5d5e38b12d","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-18T16:04:20-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/data-analytics-domain.test.mjs","contracts/test/fixtures/data-analytics.fixtures.json","docs/domain/metric-contract-blueprint.md"]},{"id":"d860eb62560ba66297681a63c1466cf47c40d12f","message":"test(contracts): 注册中心 upgrade 的证据链可信度——13 条原因码只有单测,门禁看不到\n\n前两轮补的是「请求缺字段」;这一轮是证据本身可不可信,它是九个契约包里唯一一处成规模的门禁空白。\n\n13 条分四组:\n 目标制品的身份四要素与来源工作树是否干净 5 条\n 兼容性证据是否通过 / 时间可解析 / 血缘对得上 3 条\n 影响面证据是否定稿 / 可计时 / 同源 3 条\n 复核时钟与候选状态 2 条\n\n其中 TARGET_SOURCE_MUST_BE_CLEAN 尤其要紧:目标制品自己声明是从脏工作树构建的,这类制品不该被\n采信——和本仓报告纪律是同一条(证据只能绑干净树),而门禁此前看不到这条路径。\nCOMPATIBILITY_EVIDENCE_LINEAGE_MISMATCH / IMPACT_EVIDENCE_LINEAGE_MISMATCH 同理:一份「通过了」\n但说的是别的版本、别的提交的证据,比没有证据更危险。\n\n补:夹具 32 → 41 例(N28–N36,九条用例覆盖 13 个原因,每条都是有语义的场景而不是单纯删字段),\n单测 53 → 59 例。本域「夹具无但单测有」由 23 降至 10,「哪里都没有」保持 0。\n\n负向实测:把 N29 的声明原因改成不会产生的串 → 门禁 exit 1 并点名该例,恢复后转绿。\n\n本条只补覆盖,没有改任何判定;snapshot-upgrade-review.ts 一行未动。\n全仓「夹具无但单测有」由 77 降至 64,其中约 15 条是各域基线闸门的登记位,按已知口径保留。\n\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 59/59、contract-application-contract-registry 41/41。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/d860eb62560ba66297681a63c1466cf47c40d12f","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-18T16:03:45-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"52fe066412543b57b729791de298ac0b5898b52b","message":"docs(部署): D-8 裁决落地——dev 面配上现签令牌,并记下它当场被实证的代价\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/52fe066412543b57b729791de298ac0b5898b52b","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-18T16:04:51-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},"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":20118,"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":44,"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-19T07:03:21+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"}}...
|
push
|
2
|
30
|
1789772731
|
1789772770
|
0
|
1789772730
|
1789772813
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24161
|
docs(回灌): 订正 U-40——「gitSha 为空」不成立,字段叫 sourceSha 且有 docs(回灌): 订正 U-40——「gitSha 为空」不成立,字段叫 sourceSha 且有值,落点随之改向...
|
117
|
5
|
governance.yml
|
70
|
5
|
0
|
refs/heads/main
|
9a8b716a056597786b9fcbc8fd57bff6c5b44722
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"a7075e40e9aed8fbe69edb7fb7f0ebc05e477214","after":"9a8b716a056597786b9fcbc8fd57bff6c5b44722","compare_url":"https://gitea.g-hi.com/luoanwu/platform-governance/compare/a7075e40e9aed8fbe69edb7fb7f0ebc05e477214...9a8b716a056597786b9fcbc8fd57bff6c5b44722","commits":[{"id":"9a8b716a056597786b9fcbc8fd57bff6c5b44722","message":"docs(回灌): 订正 U-40——「gitSha 为空」不成立,字段叫 sourceSha 且有值,落点随之改向\n\nU-40 原文称 registry 上的 @juhai/client-fact@1.0.0-rc.3 其 provenance.json 为 gitSha:\"\" 空字符串,\n据此把落点定为「平台侧必须带真实 gitSha,本地旁路发布也不得留空」。一手实测推翻该前提:\n\n在真源仓 npm 作用域下 npm pack 拉取架上 tarball 读其 provenance.json,client-fact 与 contracts 的\nrc.3 两份一字不差,且都带 \"sourceSha\": \"036a308f27acf35a46f068c96fea7723ef74d05e\"。\n字段名是 sourceSha 不是 gitSha,且有真实值——提交号一直在包里。照原落点做,平台会去补一个已经存在的字段。\n\n本条结论仍成立、病因换了:不是「平台没写」,是两侧键名对不上,且基座判据根本没读产物的\nprovenance.json——复核 数字员工OS/digital-employee-os/scripts/check-platform-dependency-provenance.mjs,\n其中 gitSha / sourceSha 的命中全部属于它自己报告的 provenance,没有一处读依赖产物。\n\n落点改为两条:① 平台侧把 sourceSha 这个字段名写进对外契约(发布物 schema / 接入套件文档),\n使消费者不必靠猜;旁路车另缺 tag(tag:null,与 CL-5「一次发布 = 一个 tag = 一组同版本包」不符),该项仍欠。\n② 基座侧把判据从「解析来源」扩到「内容出处」,只需读包内 sourceSha 与期望提交比对,不必等平台改任何东西。\n\n状态 🔴 → 🟡:不再与 U-39 同一阻塞,两侧都可立即动工,不受 G-12 计费阻塞;仅 tag:null 仍挂在旁路车上。\n原落点文字保留删除线,不抹掉审计痕迹。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/9a8b716a056597786b9fcbc8fd57bff6c5b44722","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-18T16:05:19-07:00","added":[],"removed":[],"modified":["平台治理/基础/上层对接经验回灌台账.md"]},{"id":"63850ac3b7b1a51d74aac689837fdf7ed58905bb","message":"docs(回灌): U-39 补 contracts 同版本不同内容的新实例——落差由一个提交扩大到一整轮硬化\n\n@juhai/contracts@1.0.0-rc.3 与 client-fact 同属 2026-09-13 那趟本地旁路车。实查架上包:其\nprovenance.json 自证 sourceSha=036a308,而仓内同版本源码已含 2026-09-18 九个契约包域\n(public-file / IM / 跨域流程 / 通知 / 数据分析 / 成本容量 / 统一体验 / 注册中心 / 配置与功能开关)\n的失败关闭硬化。消费者 exact pin 1.0.0-rc.3 拿到的是硬化前代码;./domain/* 是公开子路径导出,\n失败一侧行为已变。U-39 的「同版本不同内容」因此不是 client-fact 一例。\n\n不另开 U 号:本实例由基础设施自查发现、没有上层对接方,不符合本台账 §0「只有业务应用的开发轮次\n触发回灌」的驱动方口径,故并入 U-39 状态格,不新设真源。\n\n证据取自一手产物:在仓内 npm 作用域下 npm pack 拉取架上 tarball,读其 provenance.json。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/63850ac3b7b1a51d74aac689837fdf7ed58905bb","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-18T16:03:44-07:00","added":[],"removed":[],"modified":["平台治理/基础/上层对接经验回灌台账.md"]},{"id":"fad563310502477427181b6cbe2b48af4aebb668","message":"docs(计划): 登记四份过期证据回绑与一次撤回 @ 772b253\n\nrelease-manifest / sbom / naming / fork-readiness 四份在干净检出内重跑回绑,结论逐项\n对照无劣化;sbom 的 ref 更新后它描述的才是当前登记的镜像。check:evidence 由\n36 新鲜 / 5 过期 变为 40 新鲜 / 1 过期 / 0 error,仅剩 image-smoke(须 Secret 到位后\n由 CI 插一步冒烟,带复核期 2026-10-31)。\n\n另记一次撤回:module-imports 那次回绑是多余的——并行会话提交门禁改动时已连报告一起\n回绑,它早已新鲜。教训是判据应为「这份报告现在是否被判过期」,而不是「作用域是否干净」。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/fad563310502477427181b6cbe2b48af4aebb668","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-18T15:47:52-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]},{"id":"80eced637aa8796ffec9c266cde6d6567e4fdb49","message":"docs(计划): 登记注册中心就绪闸门补判与干净检出回绑 @ 94366bc / de532d4\n\n并更正上一行登记:注册中心 9ac9914 已被 7f82399 的合并整体放弃,上一行现在只对\n统一体验 caefbf6 成立。远端那版的摘要归一化比本地那版的「一律拒」更好,本轮采纳\n其口径;只补它仍缺的四条就绪闸门真值判定,并把零覆盖的 snapshot-upgrade-review.ts\n接进夹具门禁。\n\n回绑改走 #34-A 立的干净检出路径:主工作区 4 小时没出现干净树。附带记下一条坑——\n检出必须落在工作区内,否则 workspaceRelative 套件会以 unavailable 让门禁 exit 1。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/80eced637aa8796ffec9c266cde6d6567e4fdb49","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-18T12:26:45-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]},{"id":"1d2416ab6482cf2ad8f2e4c311c62545daebfd16","message":"docs(计划): 登记统一体验与注册中心两个契约包入参硬化 @ caefbf6 / 9ac9914\n\n两域各有一条同形缺陷(闸门用真值判断,\"false\" 一律放行——统一体验是 G3 本身与\n权限 / Scope 判定,注册中心是四条就绪闸门)与各自的崩溃面;注册中心另有 blockedBy\n传字符串时 .length 是字符数、摘要正则带 i 导致同一制品两个身份两处。修的都是同一\n文件里正确写法本来就在的那种。顺带补两块零门禁覆盖:统一体验持闸的两个公开函数、\n注册中心整份 393 行的升级复核。九个契约包域至此全部补强,套件合计 188 例 0 失败。\n\n另回写一条技术教训:独立索引提交后必须 git reset -- \u003c路径\u003e 把共享索引刷回 HEAD,\n否则并行会话下一次从索引提交会把已提交的改动带回去(2026-09-18 已实际发生一次)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/1d2416ab6482cf2ad8f2e4c311c62545daebfd16","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-18T07:53:53-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]}],"total_commits":0,"head_commit":{"id":"9a8b716a056597786b9fcbc8fd57bff6c5b44722","message":"docs(回灌): 订正 U-40——「gitSha 为空」不成立,字段叫 sourceSha 且有值,落点随之改向\n\nU-40 原文称 registry 上的 @juhai/client-fact@1.0.0-rc.3 其 provenance.json 为 gitSha:\"\" 空字符串,\n据此把落点定为「平台侧必须带真实 gitSha,本地旁路发布也不得留空」。一手实测推翻该前提:\n\n在真源仓 npm 作用域下 npm pack 拉取架上 tarball 读其 provenance.json,client-fact 与 contracts 的\nrc.3 两份一字不差,且都带 \"sourceSha\": \"036a308f27acf35a46f068c96fea7723ef74d05e\"。\n字段名是 sourceSha 不是 gitSha,且有真实值——提交号一直在包里。照原落点做,平台会去补一个已经存在的字段。\n\n本条结论仍成立、病因换了:不是「平台没写」,是两侧键名对不上,且基座判据根本没读产物的\nprovenance.json——复核 数字员工OS/digital-employee-os/scripts/check-platform-dependency-provenance.mjs,\n其中 gitSha / sourceSha 的命中全部属于它自己报告的 provenance,没有一处读依赖产物。\n\n落点改为两条:① 平台侧把 sourceSha 这个字段名写进对外契约(发布物 schema / 接入套件文档),\n使消费者不必靠猜;旁路车另缺 tag(tag:null,与 CL-5「一次发布 = 一个 tag = 一组同版本包」不符),该项仍欠。\n② 基座侧把判据从「解析来源」扩到「内容出处」,只需读包内 sourceSha 与期望提交比对,不必等平台改任何东西。\n\n状态 🔴 → 🟡:不再与 U-39 同一阻塞,两侧都可立即动工,不受 G-12 计费阻塞;仅 tag:null 仍挂在旁路车上。\n原落点文字保留删除线,不抹掉审计痕迹。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/9a8b716a056597786b9fcbc8fd57bff6c5b44722","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-18T16:05:19-07:00","added":[],"removed":[],"modified":["平台治理/基础/上层对接经验回灌台账.md"]},"repository":{"id":117,"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":"platform-governance","full_name":"luoanwu/platform-governance","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":10140,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/platform-governance/languages","html_url":"https://gitea.g-hi.com/luoanwu/platform-governance","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/platform-governance","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/platform-governance.git","clone_url":"https://gitea.g-hi.com/luoanwu/platform-governance.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-09-15T11:53:24+08:00","updated_at":"2026-09-18T22:15:32+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"}}...
|
push
|
1
|
4
|
1789772770
|
1789772785
|
0
|
1789772759
|
1789772785
|
|
|
0
|
Edit
Delete
|
|
24162
|
test(contracts): 四个域共享的快照版本号分支,外加会话准入的两条同组兄弟
|
116
|
5
|
platform.yml
|
138
|
5
|
0
|
refs/heads/main
|
54e6324c8b404aba56e1fa681cbcbe67019128c0
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"52fe066412543b57b729791de298ac0b5898b52b","after":"54e6324c8b404aba56e1fa681cbcbe67019128c0","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/52fe066412543b57b729791de298ac0b5898b52b...54e6324c8b404aba56e1fa681cbcbe67019128c0","commits":[{"id":"54e6324c8b404aba56e1fa681cbcbe67019128c0","message":"test(contracts): 四个域共享的快照版本号分支,外加会话准入的两条同组兄弟\n\nnormalizeSnapshot(或其等价物)在四个域里是同一个形状,而「version 必须是正整数」这一条四个域都\n没钉:FILE_ACCESS_POLICY_VERSION_INVALID、WEBHOOK_POLICY_VERSION_INVALID、\nCONVERSATION_POLICY_VERSION_INVALID、NO_USABLE_LAST_KNOWN_GOOD(配置开关)。版本号是「最后良好\n快照」向前比较的唯一依据,比不出来就不能换。\n\n四个域各补一条夹具用例(version: 0;缺失 / 负数 / 字符串 / 小数走同一路,由单测覆盖全部五种)与\n一条单测。配置开关的后果与其余三个不同——它不是「整份拒收」而是保留最后良好快照,所以那条单测断的是\n「活动版本不得被无效候选改动」,这才是该分支的真正断言。\n\n顺带把 collaboration-messaging 的两条同组兄弟一并补上(CONVERSATION_POLICY_REVISION_REQUIRED、\nCONVERSATION_TENANT_POLICIES_REQUIRED)——它与 public-file 的 N26 / N27 是同一形状,三条一起钉住\n才算完整。补后该域「哪里都没有」由 2 归 0。\n\n夹具:public-file 31 → 32、notification-webhook 24 → 25、collaboration-messaging 40 → 42、\nconfiguration-feature-flags 17 → 18。\n\n负向实测:public-file 与 notification-webhook 各把新用例的声明原因改成不会产生的串 → 门禁 exit 1,\n恢复后转绿。\n\n本条只补覆盖,没有改任何判定。至此九个域「哪里都没有」全部为 0。\n\n证据:在仅含本提交改动的导出树上 tsc 绿、四域定向 104/104、四个套件 117/117。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/54e6324c8b404aba56e1fa681cbcbe67019128c0","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-18T16:06:26-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/collaboration-messaging-domain.test.mjs","contracts/test/configuration-feature-flags-domain.test.mjs","contracts/test/fixtures/collaboration-messaging.fixtures.json","contracts/test/fixtures/configuration-feature-flags.fixtures.json","contracts/test/fixtures/notification-webhook.fixtures.json","contracts/test/fixtures/public-file.fixtures.json","contracts/test/notification-webhook-domain.test.mjs","contracts/test/public-file-domain.test.mjs"]}],"total_commits":0,"head_commit":{"id":"54e6324c8b404aba56e1fa681cbcbe67019128c0","message":"test(contracts): 四个域共享的快照版本号分支,外加会话准入的两条同组兄弟\n\nnormalizeSnapshot(或其等价物)在四个域里是同一个形状,而「version 必须是正整数」这一条四个域都\n没钉:FILE_ACCESS_POLICY_VERSION_INVALID、WEBHOOK_POLICY_VERSION_INVALID、\nCONVERSATION_POLICY_VERSION_INVALID、NO_USABLE_LAST_KNOWN_GOOD(配置开关)。版本号是「最后良好\n快照」向前比较的唯一依据,比不出来就不能换。\n\n四个域各补一条夹具用例(version: 0;缺失 / 负数 / 字符串 / 小数走同一路,由单测覆盖全部五种)与\n一条单测。配置开关的后果与其余三个不同——它不是「整份拒收」而是保留最后良好快照,所以那条单测断的是\n「活动版本不得被无效候选改动」,这才是该分支的真正断言。\n\n顺带把 collaboration-messaging 的两条同组兄弟一并补上(CONVERSATION_POLICY_REVISION_REQUIRED、\nCONVERSATION_TENANT_POLICIES_REQUIRED)——它与 public-file 的 N26 / N27 是同一形状,三条一起钉住\n才算完整。补后该域「哪里都没有」由 2 归 0。\n\n夹具:public-file 31 → 32、notification-webhook 24 → 25、collaboration-messaging 40 → 42、\nconfiguration-feature-flags 17 → 18。\n\n负向实测:public-file 与 notification-webhook 各把新用例的声明原因改成不会产生的串 → 门禁 exit 1,\n恢复后转绿。\n\n本条只补覆盖,没有改任何判定。至此九个域「哪里都没有」全部为 0。\n\n证据:在仅含本提交改动的导出树上 tsc 绿、四域定向 104/104、四个套件 117/117。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/54e6324c8b404aba56e1fa681cbcbe67019128c0","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-18T16:06:26-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/collaboration-messaging-domain.test.mjs","contracts/test/configuration-feature-flags-domain.test.mjs","contracts/test/fixtures/collaboration-messaging.fixtures.json","contracts/test/fixtures/configuration-feature-flags.fixtures.json","contracts/test/fixtures/notification-webhook.fixtures.json","contracts/test/fixtures/public-file.fixtures.json","contracts/test/notification-webhook-domain.test.mjs","contracts/test/public-file-domain.test.mjs"]},"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":20253,"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":44,"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-19T07:05:30+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"}}...
|
push
|
3
|
22
|
1789772829
|
1789772867
|
0
|
1789772828
|
1789773007
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24163
|
docs(计划): 注册中心取舍行补交叉实测证据——「大部分好或相当」可以收紧成「放弃那套实有 4 docs(计划): 注册中心取舍行补交叉实测证据——「大部分好或相当」可以收紧成「放弃那套实有 4 个缺陷」...
|
117
|
5
|
governance.yml
|
71
|
5
|
0
|
refs/heads/main
|
2395fff75b12126982536526d4ae47676954a0b2
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"9a8b716a056597786b9fcbc8fd57bff6c5b44722","after":"2395fff75b12126982536526d4ae47676954a0b2","compare_url":"https://gitea.g-hi.com/luoanwu/platform-governance/compare/9a8b716a056597786b9fcbc8fd57bff6c5b44722...2395fff75b12126982536526d4ae47676954a0b2","commits":[{"id":"2395fff75b12126982536526d4ae47676954a0b2","message":"docs(计划): 注册中心取舍行补交叉实测证据——「大部分好或相当」可以收紧成「放弃那套实有 4 个缺陷」\n\n第 196 行原写「远端那版大部分比本地那版做得好或相当」,是对现行实现单向复测得出的。另一会话随后做了\n双向交叉实测(两套实现各自编译成 dist 后互喂夹具与单测),结论更明确:被放弃的 9ac9914 实有 4 个缺陷——\nN10 放行可变版本标签、N11 拒错原因(其 \\d+\\.\\d+\\.\\d+ 收下 1.02.0)、P03 与 P04 两处误拒(后者会拒掉\n平台自己在发的 1.0.0-rc.x);根因是它三个文件各带一套版本文法,远端抽 registry-primitives.ts 正为收敛这三套。\n\n反向也测了:9ac9914 的 19 例夹具喂当前实现 13 通过,6 例不通过里 5 例只是原因码改名(同一输入两侧都拒)、\n1 例是摘要大小写的设计取向差异,无任何输入类别失守;其 40 例单测喂当前实现 36 通过。\n\n只补证据与出处(真源仓 7523bd0 的 contracts/SOURCE.md),不改该行原有的复测结论与实现取舍。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/2395fff75b12126982536526d4ae47676954a0b2","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-18T16:07:14-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]}],"total_commits":0,"head_commit":{"id":"2395fff75b12126982536526d4ae47676954a0b2","message":"docs(计划): 注册中心取舍行补交叉实测证据——「大部分好或相当」可以收紧成「放弃那套实有 4 个缺陷」\n\n第 196 行原写「远端那版大部分比本地那版做得好或相当」,是对现行实现单向复测得出的。另一会话随后做了\n双向交叉实测(两套实现各自编译成 dist 后互喂夹具与单测),结论更明确:被放弃的 9ac9914 实有 4 个缺陷——\nN10 放行可变版本标签、N11 拒错原因(其 \\d+\\.\\d+\\.\\d+ 收下 1.02.0)、P03 与 P04 两处误拒(后者会拒掉\n平台自己在发的 1.0.0-rc.x);根因是它三个文件各带一套版本文法,远端抽 registry-primitives.ts 正为收敛这三套。\n\n反向也测了:9ac9914 的 19 例夹具喂当前实现 13 通过,6 例不通过里 5 例只是原因码改名(同一输入两侧都拒)、\n1 例是摘要大小写的设计取向差异,无任何输入类别失守;其 40 例单测喂当前实现 36 通过。\n\n只补证据与出处(真源仓 7523bd0 的 contracts/SOURCE.md),不改该行原有的复测结论与实现取舍。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/2395fff75b12126982536526d4ae47676954a0b2","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-18T16:07:14-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]},"repository":{"id":117,"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":"platform-governance","full_name":"luoanwu/platform-governance","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":10416,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/platform-governance/languages","html_url":"https://gitea.g-hi.com/luoanwu/platform-governance","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/platform-governance","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/platform-governance.git","clone_url":"https://gitea.g-hi.com/luoanwu/platform-governance.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-09-15T11:53:24+08:00","updated_at":"2026-09-19T07:05:59+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"}}...
|
push
|
1
|
4
|
1789772868
|
1789772883
|
0
|
1789772837
|
1789772883
|
|
|
0
|
Edit
Delete
|
|
24164
|
fix(ticket): 通知投递补认领凭据与显式重试上限
|
82
|
5
|
governance.yml
|
5
|
5
|
0
|
refs/heads/main
|
601955837eb8caa25a91a2c2da96d9a06f8ea455
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"7c4b197f018b02f5ed675758af3f5be5dbd1de02","after":"601955837eb8caa25a91a2c2da96d9a06f8ea455","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/compare/7c4b197f018b02f5ed675758af3f5be5dbd1de02...601955837eb8caa25a91a2c2da96d9a06f8ea455","commits":[{"id":"601955837eb8caa25a91a2c2da96d9a06f8ea455","message":"fix(ticket): 通知投递补认领凭据与显式重试上限\n\n领取此前只看 PENDING/FAILED,且完成回写只按 status=\"SENDING\" 匹配:进程崩在 deliver() 里的那行\n会永远停在 SENDING,没有任何路径能把它捡回来。另有一处重试上限双份常数——领取查询没有上限,\n死信判定走的是 @repo/notification-delivery 的包默认 3,两边靠巧合对齐,改任一边即静默不一致。\n\n- notifications 表加 claim_owner / claim_expires_at(两后端各一份 schema 与迁移),领取写认领、\n 完成按 claimOwner 回写并清空,与其余两个消费仓的 claim 列同形。\n- 领取前先把预算烧完的行(含认领过期仍卡在 SENDING 的)扫成死信;领取查询新增「SENDING 且\n 认领已过期」一支,并显式限定 attempts \u003c NOTIFICATION_MAX_ATTEMPTS。\n- 重试上限收敛为一个常数,同时进领取查询、死信清扫和 decideNotificationFailure。\n- 迁移不建索引:本仓迁移红线把非 CONCURRENTLY 的 CREATE INDEX 判为高危 DDL(首版实测被 exit 1\n 拦下),过期 SENDING 那一支由既有 notifications_tenant_status_next_attempt_idx 的\n (tenant_id, status) 前缀服务;要加 (tenant_id, status, claim_expires_at) 须按\n expand→migrate→contract 单独提,不混在这条加列迁移里。\n- packages/notification-delivery:未知异常不再默认可重试(模板体检失败这类确定性错误重发多少次\n 都是同一个结果),并补 NotificationTemplateError 的消息分支——缺它时 lastError 会把模板错误\n 写成「供应商不可用」。与报价仓的同名包语义就此一致。\n\n验证:pnpm check 全绿(15 道静态门禁 + lint + typecheck,含 write-guard / dual-backend /\nmigrations / write-chain);包单测 9/9。领取与清扫 SQL 在本机 Postgres 建临时库实跑:清扫只命中\n「预算烧完 + 认领过期」那一行,领取只取到「到期 PENDING」与「认领过期 SENDING」,正确跳过活认领、\n他租户与 next_attempt_at 未到的行,临时库跑完已删。\n\n未跑:两后端新增的认领回收验收用例(NestJS/Fastify 逐条镜像)属 check:runtime 级别,需 pgvector\n的真实库 + Redis + 附件基础设施,本机 PG 无 pgvector,未硬凑环境,故本次不声称该级证据。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/601955837eb8caa25a91a2c2da96d9a06f8ea455","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-18T16:06:27-07:00","added":["apps/api-fastify/prisma/migrations/20260918090000_notification_delivery_claim/migration.sql","apps/api-nestjs/prisma/migrations/20260918090000_notification_delivery_claim/migration.sql"],"removed":[],"modified":["apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/modules/ticket-operations/ticket-operations.service.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/ticket-operations/ticket-operations.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","packages/notification-delivery/src/index.test.ts","packages/notification-delivery/src/index.ts"]}],"total_commits":0,"head_commit":{"id":"601955837eb8caa25a91a2c2da96d9a06f8ea455","message":"fix(ticket): 通知投递补认领凭据与显式重试上限\n\n领取此前只看 PENDING/FAILED,且完成回写只按 status=\"SENDING\" 匹配:进程崩在 deliver() 里的那行\n会永远停在 SENDING,没有任何路径能把它捡回来。另有一处重试上限双份常数——领取查询没有上限,\n死信判定走的是 @repo/notification-delivery 的包默认 3,两边靠巧合对齐,改任一边即静默不一致。\n\n- notifications 表加 claim_owner / claim_expires_at(两后端各一份 schema 与迁移),领取写认领、\n 完成按 claimOwner 回写并清空,与其余两个消费仓的 claim 列同形。\n- 领取前先把预算烧完的行(含认领过期仍卡在 SENDING 的)扫成死信;领取查询新增「SENDING 且\n 认领已过期」一支,并显式限定 attempts \u003c NOTIFICATION_MAX_ATTEMPTS。\n- 重试上限收敛为一个常数,同时进领取查询、死信清扫和 decideNotificationFailure。\n- 迁移不建索引:本仓迁移红线把非 CONCURRENTLY 的 CREATE INDEX 判为高危 DDL(首版实测被 exit 1\n 拦下),过期 SENDING 那一支由既有 notifications_tenant_status_next_attempt_idx 的\n (tenant_id, status) 前缀服务;要加 (tenant_id, status, claim_expires_at) 须按\n expand→migrate→contract 单独提,不混在这条加列迁移里。\n- packages/notification-delivery:未知异常不再默认可重试(模板体检失败这类确定性错误重发多少次\n 都是同一个结果),并补 NotificationTemplateError 的消息分支——缺它时 lastError 会把模板错误\n 写成「供应商不可用」。与报价仓的同名包语义就此一致。\n\n验证:pnpm check 全绿(15 道静态门禁 + lint + typecheck,含 write-guard / dual-backend /\nmigrations / write-chain);包单测 9/9。领取与清扫 SQL 在本机 Postgres 建临时库实跑:清扫只命中\n「预算烧完 + 认领过期」那一行,领取只取到「到期 PENDING」与「认领过期 SENDING」,正确跳过活认领、\n他租户与 next_attempt_at 未到的行,临时库跑完已删。\n\n未跑:两后端新增的认领回收验收用例(NestJS/Fastify 逐条镜像)属 check:runtime 级别,需 pgvector\n的真实库 + Redis + 附件基础设施,本机 PG 无 pgvector,未硬凑环境,故本次不声称该级证据。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system/commit/601955837eb8caa25a91a2c2da96d9a06f8ea455","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-18T16:06:27-07:00","added":["apps/api-fastify/prisma/migrations/20260918090000_notification_delivery_claim/migration.sql","apps/api-nestjs/prisma/migrations/20260918090000_notification_delivery_claim/migration.sql"],"removed":[],"modified":["apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/modules/ticket-operations/ticket-operations.service.ts","apps/api-fastify/test/http.acceptance.test.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/ticket-operations/ticket-operations.service.ts","apps/api-nestjs/test/http.acceptance.test.ts","packages/notification-delivery/src/index.test.ts","packages/notification-delivery/src/index.ts"]},"repository":{"id":82,"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":"juhai-ai-work-order-system","full_name":"luoanwu/juhai-ai-work-order-system","description":"巨嗨 AI 工单系统:治理型工单核心与 Digital Employee OS 产品适配层","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":1867,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-work-order-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-ai-work-order-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-ai-work-order-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-ai-work-order-system.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-08-26T09:08:57+08:00","updated_at":"2026-09-15T15:55:21+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"}}...
|
push
|
2
|
6
|
1789772883
|
1789772913
|
0
|
1789772841
|
1789772914
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24165
|
fix(service): 通知投递未知异常不再默认重试,并显式传重试上限
|
81
|
5
|
governance.yml
|
9
|
5
|
0
|
refs/heads/main
|
cc4e7d4da3cd396ee608a41307d2b9a496b8d3dd
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"2085f1a31a52687344dd74911761be941a185b3c","after":"cc4e7d4da3cd396ee608a41307d2b9a496b8d3dd","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/compare/2085f1a31a52687344dd74911761be941a185b3c...cc4e7d4da3cd396ee608a41307d2b9a496b8d3dd","commits":[{"id":"cc4e7d4da3cd396ee608a41307d2b9a496b8d3dd","message":"fix(service): 通知投递未知异常不再默认重试,并显式传重试上限\n\n两处与同名包在其余消费仓的语义漂移:\n\n- packages/notification-delivery:decideNotificationFailure 对非 NotificationDeliveryError 的\n 异常默认 retryable=true。模板体检失败(assertRegisteredNotificationTemplate 在 try 内)这类\n 确定性错误因此会白烧三次重试预算才进死信。改为只有投递层明确标了可重试才重试。\n- 同批补 NotificationTemplateError 的消息分支:缺它时 lastError 会把模板错误写成\n 「NOTIFICATION_PROVIDER_UNAVAILABLE」,运维照着这条记录去查供应商,查不到任何东西。\n- 两后端 decideNotificationFailure 显式传 maxAttempts: MAX_ATTEMPTS。此前领取查询用本地常数 3、\n 死信判定用包默认 3,靠巧合对齐,改任一边即静默不一致。\n\n验证:typecheck 绿;包单测 5/5(新增未知异常与模板错误两条断言);dual-backend /\nconcurrency-guard / migrations / governance-docs / docs-truth / mobile / provenance 逐道绿。\ncheck:os-product 红,与本次无关:它按 ../Digital Employee OS 找 OS 仓(该路径已不存在),指到真实\n路径后卡在锁定的 OS 基线 SHA,本次改动前即如此。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/cc4e7d4da3cd396ee608a41307d2b9a496b8d3dd","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-18T16:06:35-07:00","added":[],"removed":[],"modified":["apps/api-fastify/src/modules/service-operations/notification-delivery.service.ts","apps/api-nestjs/src/service-operations/notification-delivery.service.ts","packages/notification-delivery/src/index.test.ts","packages/notification-delivery/src/index.ts"]}],"total_commits":0,"head_commit":{"id":"cc4e7d4da3cd396ee608a41307d2b9a496b8d3dd","message":"fix(service): 通知投递未知异常不再默认重试,并显式传重试上限\n\n两处与同名包在其余消费仓的语义漂移:\n\n- packages/notification-delivery:decideNotificationFailure 对非 NotificationDeliveryError 的\n 异常默认 retryable=true。模板体检失败(assertRegisteredNotificationTemplate 在 try 内)这类\n 确定性错误因此会白烧三次重试预算才进死信。改为只有投递层明确标了可重试才重试。\n- 同批补 NotificationTemplateError 的消息分支:缺它时 lastError 会把模板错误写成\n 「NOTIFICATION_PROVIDER_UNAVAILABLE」,运维照着这条记录去查供应商,查不到任何东西。\n- 两后端 decideNotificationFailure 显式传 maxAttempts: MAX_ATTEMPTS。此前领取查询用本地常数 3、\n 死信判定用包默认 3,靠巧合对齐,改任一边即静默不一致。\n\n验证:typecheck 绿;包单测 5/5(新增未知异常与模板错误两条断言);dual-backend /\nconcurrency-guard / migrations / governance-docs / docs-truth / mobile / provenance 逐道绿。\ncheck:os-product 红,与本次无关:它按 ../Digital Employee OS 找 OS 仓(该路径已不存在),指到真实\n路径后卡在锁定的 OS 基线 SHA,本次改动前即如此。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system/commit/cc4e7d4da3cd396ee608a41307d2b9a496b8d3dd","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-18T16:06:35-07:00","added":[],"removed":[],"modified":["apps/api-fastify/src/modules/service-operations/notification-delivery.service.ts","apps/api-nestjs/src/service-operations/notification-delivery.service.ts","packages/notification-delivery/src/index.test.ts","packages/notification-delivery/src/index.ts"]},"repository":{"id":81,"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":"juhai-after-sales-service-system","full_name":"luoanwu/juhai-after-sales-service-system","description":"巨嗨智服:受治理的 AI 售后服务系统","empty":false,"private":true,"fork":false,"template":false,"mirror":false,"size":3362,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-after-sales-service-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-after-sales-service-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-after-sales-service-system.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-08-26T08:47:15+08:00","updated_at":"2026-09-15T10:54:19+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"}}...
|
push
|
2
|
6
|
1789772913
|
1789772921
|
0
|
1789772844
|
1789772921
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24166
|
fix(quotation): 通知投递显式传重试上限——领取与死信判定不再各用一份常数
|
72
|
5
|
governance.yml
|
12
|
5
|
0
|
refs/heads/main
|
6908c19f9faf3b006d73054657b97c6cb8f945d9
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ec9e07de44a5619a8a6b5648f00f5ea7f7dcafcf","after":"6908c19f9faf3b006d73054657b97c6cb8f945d9","compare_url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/compare/ec9e07de44a5619a8a6b5648f00f5ea7f7dcafcf...6908c19f9faf3b006d73054657b97c6cb8f945d9","commits":[{"id":"6908c19f9faf3b006d73054657b97c6cb8f945d9","message":"fix(quotation): 通知投递显式传重试上限——领取与死信判定不再各用一份常数\n\n服务里的 MAX_ATTEMPTS = 3 只进领取查询与死信清扫,decideNotificationFailure 没传 maxAttempts、\n走的是 @repo/notification-delivery 的包默认 3。今天两个 3 相等所以看不出来,改任一边即静默不一致:\n领取按新上限继续捡,死信判定仍按旧上限提前把行判死。同仓 event-delivery.service.ts 一直是显式传的。\n\n两后端各一行,语义不变。验证:typecheck 绿;pnpm check 22 道全绿;包单测 4/4 未受影响。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/6908c19f9faf3b006d73054657b97c6cb8f945d9","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-18T16:06:42-07:00","added":[],"removed":[],"modified":["apps/api-fastify/src/modules/notification-delivery/notification-delivery.service.ts","apps/api-nestjs/src/events/notification-delivery.service.ts"]}],"total_commits":0,"head_commit":{"id":"6908c19f9faf3b006d73054657b97c6cb8f945d9","message":"fix(quotation): 通知投递显式传重试上限——领取与死信判定不再各用一份常数\n\n服务里的 MAX_ATTEMPTS = 3 只进领取查询与死信清扫,decideNotificationFailure 没传 maxAttempts、\n走的是 @repo/notification-delivery 的包默认 3。今天两个 3 相等所以看不出来,改任一边即静默不一致:\n领取按新上限继续捡,死信判定仍按旧上限提前把行判死。同仓 event-delivery.service.ts 一直是显式传的。\n\n两后端各一行,语义不变。验证:typecheck 绿;pnpm check 22 道全绿;包单测 4/4 未受影响。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system/commit/6908c19f9faf3b006d73054657b97c6cb8f945d9","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-18T16:06:42-07:00","added":[],"removed":[],"modified":["apps/api-fastify/src/modules/notification-delivery/notification-delivery.service.ts","apps/api-nestjs/src/events/notification-delivery.service.ts"]},"repository":{"id":72,"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":"juhai-quotation-system","full_name":"luoanwu/juhai-quotation-system","description":"巨嗨报价系统:Next.js + NestJS/Fastify 双后端治理型报价业务底座","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":35851,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-quotation-system/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhai-quotation-system","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhai-quotation-system.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhai-quotation-system.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":11,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-07-31T03:51:09+08:00","updated_at":"2026-09-15T10:54:16+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"}}...
|
push
|
2
|
6
|
1789772921
|
1789773989
|
0
|
1789772844
|
1789773991
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24167
|
test(contracts): 成本容量的门禁覆盖——29 个原因码只有 20 个在夹具上走过,M test(contracts): 成本容量的门禁覆盖——29 个原因码只有 20 个在夹具上走过,M0 后计费字段禁入那条一片空白...
|
116
|
5
|
platform.yml
|
139
|
5
|
0
|
refs/heads/main
|
7a4b69367b18f4e284218704981b54c0ee10d2b6
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"54e6324c8b404aba56e1fa681cbcbe67019128c0","after":"7a4b69367b18f4e284218704981b54c0ee10d2b6","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/54e6324c8b404aba56e1fa681cbcbe67019128c0...7a4b69367b18f4e284218704981b54c0ee10d2b6","commits":[{"id":"7a4b69367b18f4e284218704981b54c0ee10d2b6","message":"test(contracts): 成本容量的门禁覆盖——29 个原因码只有 20 个在夹具上走过,M0 后计费字段禁入那条一片空白\n\n与同日 bdb662d(数据分析)同一套做法:把 29 个原因码逐条与夹具的实际产出比对——跑每个用例、\n收集真实返回值,不读代码推断。判定逻辑一行未改,resource-tags.ts 本轮零改动。\n\n1. 9 条从未在门禁上走过:\n - POST_M0_BINDING_FORBIDDEN:M0 阶段禁止把 invoice / price / budget / quota / chargeback 这类\n 计费与容量动作字段写进用量记录(23 个禁入词),是本域最靠近红线的一条,门禁上一片空白。\n - TAG_VALUE_INVALID:标签取值字符集。此前只有「缺标签」有夹具,「标签值乱写」没有。\n - CORRECTION_REFERENCE_INVALID:更正引用必须成对(id 与 reasonCode 同在或同不在)且不得自指。\n - SOURCE_CLASSIFICATION_DOWNGRADE:记录分级不得低于来源登记分级。\n - 六条基线旗标里除 G3_NOT_REACHED 外的全部五条:G5 产品窗口、应用登记、服务身份、审计、资源标签目录。\n\n2. 反方向 4 条门禁有、单测没有:RESOURCE_TAGS_INVALID / CONTENT_DIGEST_INVALID /\n METER_VERSION_INVALID / USAGE_LINEAGE_REQUIRED,补进单测。\n\n覆盖:夹具 32 → 41 例(正 3 / 反 38),新增 N30—N38 九例且每例只产出一条原因(逐例核过实际返回值);\n定向测试 28 → 32 例;原因码门禁覆盖 20/29 → 29/29,单测覆盖 25/29 → 29/29。上一轮用例一条未改。\n\n写单测时两处预期被实测推翻,按实现订正而不是反过来改实现——夹具与用例的作用正在于此:\n① RESOURCE_TAGS_INVALID 不是标签面自己报的码。assessResourceTags 对非对象入参报的是\n REQUIRED_TAG_MISSING 并把八个必填键全列进 missing;RESOURCE_TAGS_INVALID 是 assessUsageRecord\n 把「内嵌标签没过体检」收敛成的一条。\n② meterVersion 的 semver 模式接受预发布后缀,1.0.0-rc.1 合法。\n两条都写成用例固定住,免得下次被当成缺陷「修」掉。\n\n夹具变异探针(41 例真实 payload × 14 种脏值,走 evaluateFixturePayload 入口):\n22792 个变异点、0 处抛异常——daa226b 的硬化结论在扩面后仍成立。\n\n未做(越界):全资源计量账本、AI 成本明细(依赖 M7)一件未建,C19 按缺失模块完善清单仍是「裁决」;\nCatalog 登记未动。\n\n证据:pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas 无漂移、\nnode --test contracts/test/*.test.mjs 398/398、contract-cost-capacity 夹具 41/41 失败 0。\n负向实测:把 N32 的声明原因改成 USAGE_LINEAGE_REQUIRED → 门禁 exit 1 并点名该例\n(reasons=[\"POST_M0_BINDING_FORBIDDEN\"]),还原后 exit 0。本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/7a4b69367b18f4e284218704981b54c0ee10d2b6","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-18T16:09:29-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/cost-capacity-domain.test.mjs","contracts/test/fixtures/cost-capacity.fixtures.json","docs/domain/resource-tags-blueprint.md"]},{"id":"557a95c4422518cf3d9fdff04d261114ab389169","message":"chore(release): 三包推到 1.0.0-rc.4——clients 扫描面与这轮 contracts 硬化一起上车\n\n发 rc.4 的直接动因:e61bfcf 给 check:module-imports 补的 clients 扫描面与两条规则\n(CLIENT_FORBIDDEN_IMPORT / ESCAPES_CLIENT)不在任何已发布版本里,而 @juhai/governance\n的 rc.0—rc.3 已全部被占用,按 G-12 的边界只能往前发下一个 RC。\n\n随车发出的远不止这些。自 rc.3 的源 036a308 起:\n contracts 147 个文件 / 51 条提交(九域规则的入参体检与门禁覆盖那一大轮)\n governance 61 个文件 / 48 条提交\n runtime/clients/fact 5 个文件 / 5 条提交\n三包版本一致,符合 CL-5「一次发布 = 一个 tag = 一组同版本包」;包目录单源仍是\ngovernance/release-packages.json。\n\n通道:本地旁路(G-12 第三次使用)。CI 正道 2026-09-18 实测双重不可用——GitHub Actions\n最近三次 run 全部 failure(账户计费,最新 35215270797 即 CLAUDE.md 记的那条注解),\n且 GitHub 镜像落后 237 条提交、因分支保护的 required check 跑不起来而推不动,\ne61bfcf 的代码根本不在 GitHub 上。按 G-12 边界,rc.4 同样不得宣称经过发布门禁验证。\n\n本次按 CL-5 补打 tag packages-v1.0.0-rc.4——rc.2 / rc.3 两趟都漏了这一步。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/557a95c4422518cf3d9fdff04d261114ab389169","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-18T16:08:15-07:00","added":[],"removed":[],"modified":["contracts/package.json","governance/package.json","runtime/clients/fact/package.json"]},{"id":"2c3928d388603168f2510c6f1450b41804c429cf","message":"test(contracts): 统一体验的 21 条原因码只有单测——门禁一条没有\n\n这是九个契约包里最后一块成规模的门禁空白,也是唯一一个判定与单测都齐全、只差夹具的域——所以本条\n一条单测都没加,补的全是夹具。\n\n21 条分四组:\n 贡献自身的体检(归属、类型、分级、双时间、投影修订与新鲜度、Owner Command 声明) 9 条\n 与来源登记的四项比对 4 条\n 派发前动作复核的会话 / 租户 / 源版本 / 幂等键 4 条\n 四条基线闸门真正未就绪时的阻断 4 条\n\n用例按语义写而不是删字段:类型 / 分级填不在册的值、生效时间不可解析、投影修订超过源修订、\nmaxAgeSeconds=1 触发过期、maxRevisionLag=0 触发落后、动作声明 reauthorize=false、会话 expired、\n源修订漂移 5。其中「登记前缀是壳根 /」是规则注释自己点名的红线——根前缀会让「登记应用前缀下」的约束\n失效,等于授权该应用深链到任意其他应用的路由,而门禁此前看不到这条。\n\n补:夹具 18 → 36 例(正 3 / 反 33)。本域「夹具无但单测有」由 21 归 0,「哪里都没有」保持 0。\n\n负向实测:把壳根那条的声明原因改成不会产生的串 → 门禁 exit 1 并点名该例,恢复后转绿。\n\n本条只补覆盖,没有改任何判定,也没有改单测;experience-contribution.ts 一行未动。\n九个域的门禁覆盖至此收口:「哪里都没有」全为 0,「夹具无但单测有」由 77 降至 29。\n\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 35/35、contract-enterprise-experience 36/36。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/2c3928d388603168f2510c6f1450b41804c429cf","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-18T16:07:54-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/fixtures/enterprise-experience.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"7a4b69367b18f4e284218704981b54c0ee10d2b6","message":"test(contracts): 成本容量的门禁覆盖——29 个原因码只有 20 个在夹具上走过,M0 后计费字段禁入那条一片空白\n\n与同日 bdb662d(数据分析)同一套做法:把 29 个原因码逐条与夹具的实际产出比对——跑每个用例、\n收集真实返回值,不读代码推断。判定逻辑一行未改,resource-tags.ts 本轮零改动。\n\n1. 9 条从未在门禁上走过:\n - POST_M0_BINDING_FORBIDDEN:M0 阶段禁止把 invoice / price / budget / quota / chargeback 这类\n 计费与容量动作字段写进用量记录(23 个禁入词),是本域最靠近红线的一条,门禁上一片空白。\n - TAG_VALUE_INVALID:标签取值字符集。此前只有「缺标签」有夹具,「标签值乱写」没有。\n - CORRECTION_REFERENCE_INVALID:更正引用必须成对(id 与 reasonCode 同在或同不在)且不得自指。\n - SOURCE_CLASSIFICATION_DOWNGRADE:记录分级不得低于来源登记分级。\n - 六条基线旗标里除 G3_NOT_REACHED 外的全部五条:G5 产品窗口、应用登记、服务身份、审计、资源标签目录。\n\n2. 反方向 4 条门禁有、单测没有:RESOURCE_TAGS_INVALID / CONTENT_DIGEST_INVALID /\n METER_VERSION_INVALID / USAGE_LINEAGE_REQUIRED,补进单测。\n\n覆盖:夹具 32 → 41 例(正 3 / 反 38),新增 N30—N38 九例且每例只产出一条原因(逐例核过实际返回值);\n定向测试 28 → 32 例;原因码门禁覆盖 20/29 → 29/29,单测覆盖 25/29 → 29/29。上一轮用例一条未改。\n\n写单测时两处预期被实测推翻,按实现订正而不是反过来改实现——夹具与用例的作用正在于此:\n① RESOURCE_TAGS_INVALID 不是标签面自己报的码。assessResourceTags 对非对象入参报的是\n REQUIRED_TAG_MISSING 并把八个必填键全列进 missing;RESOURCE_TAGS_INVALID 是 assessUsageRecord\n 把「内嵌标签没过体检」收敛成的一条。\n② meterVersion 的 semver 模式接受预发布后缀,1.0.0-rc.1 合法。\n两条都写成用例固定住,免得下次被当成缺陷「修」掉。\n\n夹具变异探针(41 例真实 payload × 14 种脏值,走 evaluateFixturePayload 入口):\n22792 个变异点、0 处抛异常——daa226b 的硬化结论在扩面后仍成立。\n\n未做(越界):全资源计量账本、AI 成本明细(依赖 M7)一件未建,C19 按缺失模块完善清单仍是「裁决」;\nCatalog 登记未动。\n\n证据:pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas 无漂移、\nnode --test contracts/test/*.test.mjs 398/398、contract-cost-capacity 夹具 41/41 失败 0。\n负向实测:把 N32 的声明原因改成 USAGE_LINEAGE_REQUIRED → 门禁 exit 1 并点名该例\n(reasons=[\"POST_M0_BINDING_FORBIDDEN\"]),还原后 exit 0。本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/7a4b69367b18f4e284218704981b54c0ee10d2b6","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-18T16:09:29-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/cost-capacity-domain.test.mjs","contracts/test/fixtures/cost-capacity.fixtures.json","docs/domain/resource-tags-blueprint.md"]},"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":20341,"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":44,"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-19T07:08:35+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"}}...
|
push
|
3
|
10
|
0
|
1789773116
|
0
|
1789773007
|
1789773116
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24168
|
docs(计划): 登记本轮五件事,并订正 image-smoke「本机解决不了」与镜像落差 116
|
117
|
5
|
governance.yml
|
72
|
5
|
0
|
refs/heads/main
|
8e5cc87f027dab462c6f3f5bf8f0e42894778016
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"2395fff75b12126982536526d4ae47676954a0b2","after":"8e5cc87f027dab462c6f3f5bf8f0e42894778016","compare_url":"https://gitea.g-hi.com/luoanwu/platform-governance/compare/2395fff75b12126982536526d4ae47676954a0b2...8e5cc87f027dab462c6f3f5bf8f0e42894778016","commits":[{"id":"8e5cc87f027dab462c6f3f5bf8f0e42894778016","message":"docs(计划): 登记本轮五件事,并订正 image-smoke「本机解决不了」与镜像落差 116\n\n§8 加一行:① 目录快照发布维度补 not-in-manifest——「Manifest 落后 HEAD」是一个全局\n事实,此前被复制成 21 条目各自的 release.status=stale,其中 14 条没有运行时模块、\nManifest 从未收录过;② runtime 动态区回灌两级验收 SHA(报告已绑 08c3788 / 1b23285,\n动态区还写 765300b);③ 完整 pnpm --dir runtime check 让 18 份静态子报告同绑一次运行,\nreportProvenanceViolations 归零——单跑一道门禁做不到这条;④ 镜像冒烟本机真跑 6/6 后\n补绑定,check:evidence 在 95b88d3 上到 passed / 41 新鲜 / 0 过期;⑤ runbook §7 补\n--env-file 来源,连带回绑两份工作台快照;⑥ 镜像同步被 GH006 拒绝并留证。\n\n订正上一条登记:image-smoke 被记成「不是本机静态能解决的」,实测不是——它的 sourceSha\n与 image-digest.json 一致,说明冒的是当前镜像、结论有效,过期只是绑定落后,本机真跑一次\n即清。但 §5 那条「CI 在 build 与 sbom 之间插一步冒烟」的登记不因此关闭。\n\n另记一条机制发现:直推镜像 main 在机制上走不通(workflow 只在 pull_request /\npush:[main] / workflow_dispatch 触发,而保护要求 check 挂在被推的 commit 上,该 commit\n没到过 GitHub 就没有 check,要跑就得先推上 main)。可行路线只剩合 PR #45 或侧分支\ndispatch 后推同一 SHA,都要计费先恢复。\n\n三处「落后 116 个提交」按实测改为 245,并写明实测日期与「引用前重测」——这个数每天在涨,\n写死一个数就是下一次误判的来源。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/8e5cc87f027dab462c6f3f5bf8f0e42894778016","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-18T16:09:33-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]}],"total_commits":0,"head_commit":{"id":"8e5cc87f027dab462c6f3f5bf8f0e42894778016","message":"docs(计划): 登记本轮五件事,并订正 image-smoke「本机解决不了」与镜像落差 116\n\n§8 加一行:① 目录快照发布维度补 not-in-manifest——「Manifest 落后 HEAD」是一个全局\n事实,此前被复制成 21 条目各自的 release.status=stale,其中 14 条没有运行时模块、\nManifest 从未收录过;② runtime 动态区回灌两级验收 SHA(报告已绑 08c3788 / 1b23285,\n动态区还写 765300b);③ 完整 pnpm --dir runtime check 让 18 份静态子报告同绑一次运行,\nreportProvenanceViolations 归零——单跑一道门禁做不到这条;④ 镜像冒烟本机真跑 6/6 后\n补绑定,check:evidence 在 95b88d3 上到 passed / 41 新鲜 / 0 过期;⑤ runbook §7 补\n--env-file 来源,连带回绑两份工作台快照;⑥ 镜像同步被 GH006 拒绝并留证。\n\n订正上一条登记:image-smoke 被记成「不是本机静态能解决的」,实测不是——它的 sourceSha\n与 image-digest.json 一致,说明冒的是当前镜像、结论有效,过期只是绑定落后,本机真跑一次\n即清。但 §5 那条「CI 在 build 与 sbom 之间插一步冒烟」的登记不因此关闭。\n\n另记一条机制发现:直推镜像 main 在机制上走不通(workflow 只在 pull_request /\npush:[main] / workflow_dispatch 触发,而保护要求 check 挂在被推的 commit 上,该 commit\n没到过 GitHub 就没有 check,要跑就得先推上 main)。可行路线只剩合 PR #45 或侧分支\ndispatch 后推同一 SHA,都要计费先恢复。\n\n三处「落后 116 个提交」按实测改为 245,并写明实测日期与「引用前重测」——这个数每天在涨,\n写死一个数就是下一次误判的来源。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/8e5cc87f027dab462c6f3f5bf8f0e42894778016","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-18T16:09:33-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]},"repository":{"id":117,"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":"platform-governance","full_name":"luoanwu/platform-governance","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":10469,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/platform-governance/languages","html_url":"https://gitea.g-hi.com/luoanwu/platform-governance","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/platform-governance","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/platform-governance.git","clone_url":"https://gitea.g-hi.com/luoanwu/platform-governance.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-09-15T11:53:24+08:00","updated_at":"2026-09-19T07:07:18+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"}}...
|
push
|
1
|
4
|
1789773989
|
1789774004
|
0
|
1789773007
|
1789774004
|
|
|
0
|
Edit
Delete
|
|
24169
|
docs(部署): 记录补 §14——工作台登录第一次真正走通,以及 200 分支为什么在浏览器里测 docs(部署): 记录补 §14——工作台登录第一次真正走通,以及 200 分支为什么在浏览器里测不了...
|
116
|
5
|
platform.yml
|
140
|
5
|
0
|
refs/heads/main
|
ec0f1c04d60b56c0fa19a2c06fc89e7a64b69c4d
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"7a4b69367b18f4e284218704981b54c0ee10d2b6","after":"ec0f1c04d60b56c0fa19a2c06fc89e7a64b69c4d","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/7a4b69367b18f4e284218704981b54c0ee10d2b6...ec0f1c04d60b56c0fa19a2c06fc89e7a64b69c4d","commits":[{"id":"ec0f1c04d60b56c0fa19a2c06fc89e7a64b69c4d","message":"docs(部署): 记录补 §14——工作台登录第一次真正走通,以及 200 分支为什么在浏览器里测不了\n\n同源托管记录 §6 那一行挂着「工作台 OIDC 公开客户端仍未在身份模块登记」,以及由此导致的\n「forward_auth 的 200 分支未实测」。本节走通前者,后者只关掉一半。\n\n卡住的不是配置。登录页显示「缺配置」容易读成填个环境变量就行,实际是 demo 租户里\n根本没有回调为 http://localhost:3010/callback/ 的客户端;而登记它要过 IdpManagementGuard\n(idp:manage ∧ 管理客户端 ∧ 活跃管理员授权),也就是必须先有人以管理员身份走完托管登录——\n那一步要人工提交口令,这正是它一直没做的原因。\n\n登记出来的客户端只给 openid profile,不给 idp:manage:登记用的是 demo-console 的管理权,\n不是把管理权发给一个跑在浏览器里的公开客户端。\n\n实测走通全链(作用域 = 本机 dev,证据等级 = 运行态链路 + 真实浏览器):SSO 未再要口令、\n同意屏、换令牌、令牌只落 sessionStorage 两键(无 localStorage 无 cookie)、登录页显示出\n与库中 admin@demo.test 一致的 subject(即没踩同源托管记录的 D-10)、userinfo 200、\n带令牌读 modules 200。userinfo 正是 forward_auth 的校验端点,服务端语义上 200 分支成立。\n\n但浏览器跨源那一半关不掉,且是设计使然:带 Authorization 的跨源请求先发 OPTIONS 预检,\n预检按规范不带该头,forward_auth 收到无令牌的 OPTIONS 就 401,真请求发不出去。终态是\n同源托管故无影响,但 :3010 这个 dev 形态永远走不通网关。这与 §11「两个键、两个进程」\n是同一族问题的两面:跨源这件事,代理和网关都不替你解决。\n\n新登记 D-11(服务端直连验 200 分支未做——本轮令牌只在浏览器里,不把有效 bearer 打进\n命令行与日志)与 D-12(登录后顶栏的 hydration 告警)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/ec0f1c04d60b56c0fa19a2c06fc89e7a64b69c4d","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-18T16:11:45-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"ec0f1c04d60b56c0fa19a2c06fc89e7a64b69c4d","message":"docs(部署): 记录补 §14——工作台登录第一次真正走通,以及 200 分支为什么在浏览器里测不了\n\n同源托管记录 §6 那一行挂着「工作台 OIDC 公开客户端仍未在身份模块登记」,以及由此导致的\n「forward_auth 的 200 分支未实测」。本节走通前者,后者只关掉一半。\n\n卡住的不是配置。登录页显示「缺配置」容易读成填个环境变量就行,实际是 demo 租户里\n根本没有回调为 http://localhost:3010/callback/ 的客户端;而登记它要过 IdpManagementGuard\n(idp:manage ∧ 管理客户端 ∧ 活跃管理员授权),也就是必须先有人以管理员身份走完托管登录——\n那一步要人工提交口令,这正是它一直没做的原因。\n\n登记出来的客户端只给 openid profile,不给 idp:manage:登记用的是 demo-console 的管理权,\n不是把管理权发给一个跑在浏览器里的公开客户端。\n\n实测走通全链(作用域 = 本机 dev,证据等级 = 运行态链路 + 真实浏览器):SSO 未再要口令、\n同意屏、换令牌、令牌只落 sessionStorage 两键(无 localStorage 无 cookie)、登录页显示出\n与库中 admin@demo.test 一致的 subject(即没踩同源托管记录的 D-10)、userinfo 200、\n带令牌读 modules 200。userinfo 正是 forward_auth 的校验端点,服务端语义上 200 分支成立。\n\n但浏览器跨源那一半关不掉,且是设计使然:带 Authorization 的跨源请求先发 OPTIONS 预检,\n预检按规范不带该头,forward_auth 收到无令牌的 OPTIONS 就 401,真请求发不出去。终态是\n同源托管故无影响,但 :3010 这个 dev 形态永远走不通网关。这与 §11「两个键、两个进程」\n是同一族问题的两面:跨源这件事,代理和网关都不替你解决。\n\n新登记 D-11(服务端直连验 200 分支未做——本轮令牌只在浏览器里,不把有效 bearer 打进\n命令行与日志)与 D-12(登录后顶栏的 hydration 告警)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/ec0f1c04d60b56c0fa19a2c06fc89e7a64b69c4d","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-18T16:11:45-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},"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":20460,"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":44,"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-19T07:10:07+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"}}...
|
push
|
3
|
10
|
0
|
1789773436
|
0
|
1789773117
|
1789773436
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24170
|
docs(发布): 当场记录 rc.4 列车——三包已发,tag 这趟补上,并写清验证的真实范围
|
116
|
5
|
platform.yml
|
141
|
5
|
0
|
refs/heads/main
|
45a6bd523973c97e88f31faa12604773150cec87
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ec0f1c04d60b56c0fa19a2c06fc89e7a64b69c4d","after":"45a6bd523973c97e88f31faa12604773150cec87","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/ec0f1c04d60b56c0fa19a2c06fc89e7a64b69c4d...45a6bd523973c97e88f31faa12604773150cec87","commits":[{"id":"45a6bd523973c97e88f31faa12604773150cec87","message":"docs(发布): 当场记录 rc.4 列车——三包已发,tag 这趟补上,并写清验证的真实范围\n\nrc.4 三包(contracts / governance / client-fact)2026-09-18 经本地旁路发出,源 557a95c,\nRegistry 实查确认在架、三包均 registry integrity verified。与前两趟不同,本次是当场记录。\n\n这趟补上了 CL-5 要求的 tag packages-v1.0.0-rc.4——rc.2 / rc.3 都漏了这一步,\nprovenance.tag 因此第一次不是 null。构建与发布在 .worktrees/rc4-release 的 detached\n干净检出里做,所以 worktreeDirty:false 是真的(主检出当时有并行会话在改 contracts)。\n\n记录里写清了两件容易被夸大的事:\n\n1. rc.4 远不止触发它的那两条 clients 规则。自 rc.3 源 036a308 起,contracts 147 文件 /\n 51 提交、governance 61 文件 / 48 提交随车发出,包含九域规则入参体检那一整轮。\n2. 发布前只跑了 check:fixtures(17 套件 394 例)与 check:module-imports(396 文件),\n 退出码均 0;**完整 pnpm check 是发布后补跑的**(真实退出码 0,check:evidence partial:\n 36 新鲜 / 5 过期,过期项均属其他任务 WIP)。按 G-12 边界,这些都不构成阶段门证据。\n\nCLAUDE.md 的 contracts 条目同步推到 rc.4,并顺手修掉一处自相矛盾:该条前半句还写着\nrc.2 源 eb3cf2c,而后半句已说明按 provenance 订正为 6d3900a。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/45a6bd523973c97e88f31faa12604773150cec87","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-18T16:17:05-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/G-12本地旁路发布记录-2026-09-13.md"]},{"id":"df90a19192218b2b65c7cde7326968ac81d03de0","message":"chore(reports): check:module-imports 回绑 @ 557a95c\n\n在 .worktrees/rc4-release 的干净检出(detached 557a95c = packages-v1.0.0-rc.4)里重跑,\n绑 557a95c / worktreeDirty=false,扫描 396 个源文件、0 处违规。\n\n同批在该检出里跑的 check:fixtures 也是 0 失败(17 套件 394 例),但那份报告**没有提交**:\nfixtures 的证据作用域含 contracts,而并行会话正在高频改 contracts,绑 557a95c 的快照\n落地即过期,回绑节奏交还给正在改那片的人。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/df90a19192218b2b65c7cde7326968ac81d03de0","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-18T16:14:43-07:00","added":[],"removed":[],"modified":["reports/module-imports.latest.json"]},{"id":"0b3dab61a1072d682d5a921e00025f46431c95d3","message":"test(contracts): decideProviderOutcome 在门禁上零覆盖——退避被供应商压短这条修过的规则,没人盯着它别被改回去\n\n前两轮收了入参硬化(c190a6a)与请求体检/出站 allowlist 的用例(d950aa2)。本轮按「公开方法 × 出口」\n重新盘了一遍,两类空白。两个规则文件零改动,只动夹具评估器、夹具与测试。\n\n1. decideProviderOutcome 在门禁上零覆盖。planner 四个公开方法(status / plan /\n decideProviderOutcome / refresh)里,夹具只有 plan 与 refresh 两条规则。既有的 provider 规则走的是\n 独立函数 classifyProviderOutcome——它只看状态码与次数,不认路由策略:退避基数 baseBackoffSeconds、\n 上界 maximumBackoffSeconds、Retry-After 的钳制全在 planner 方法里,夹具一条都看不到。\n 而那里恰好有一条修过的规则:Retry-After 可以把退避拉长到策略上界,但不能把批准过的退避拉短\n (原实现 min(maximumBackoff, retryAfter),供应商回一个 Retry-After: 0 即可令退避清零)。\n 规则改对了,门禁却看不见它有没有被改回去。\n\n 新增 route-outcome 规则,并把 RETRY 连同算出来的秒数一并返回(RETRY:\u003c秒\u003e)——否则夹具只能看见\n 「重试了」,看不见「退避是不是被压短了」。负向实测:把 N33 的声明由 RETRY:20 改成 RETRY:10,\n 门禁 exit 1 并点名该例,秒数确实被钉住。\n\n2. plan() 八条出口此前门禁上没走过:请求非对象、目的地不在册、effectId 非请求派生、尝试次数越界、\n 未授权重放、模板版本未批准、变量越出模板 allowlist、敏感载荷落在未批准敏感数据的模板上。\n 构造用例时注意 effectId = tenant:sourceEvent:destination:template:v\u003c版本\u003e 是派生值,改 templateVersion\n 必须同步改 effectId,否则先撞 WEBHOOK_EFFECT_ID_MISMATCH,测不到目标那条。\n\n一处预期被实测推翻,按实现订正:retryAfterSeconds 超出 [0, 3600] 不是「钳到上界」,而是整条回执判\nPROVIDER_OUTCOME_INVALID。两条边界各钉一例(3600 → RETRY:60;9999 → 拒)。\n\n覆盖:夹具 25 → 39 例(正 4 / 反 35);定向测试 28 → 30 例,补上唯一一条「门禁有、单测没有」的\nWEBHOOK_TEMPLATE_NOT_APPROVED 以及 Retry-After 取值域。前两轮断言一条未改。\n变异探针(39 例真实 payload × 14 种脏值)14560 个变异点、0 处抛异常。\n\n未做(越界):模板审批流、多渠道 Provider、签名防重放、渠道切换仍不在本仓,C12 按缺失模块完善清单\n仍是「裁决」;Catalog 登记未动(notification-webhook 仍 module_e2、code_truth 指向工单仓)。\n\n证据:pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas 无漂移、\nnode --test contracts/test/*.test.mjs 400/400、contract-notification-webhook 夹具 39/39 失败 0。\n本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/0b3dab61a1072d682d5a921e00025f46431c95d3","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-18T16:13:04-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/notification-webhook/fixture-evaluator.ts","contracts/test/fixtures/notification-webhook.fixtures.json","contracts/test/notification-webhook-domain.test.mjs","docs/domain/notification-effect-blueprint.md"]},{"id":"0b30631d9c45ceff29558ddf821e6cb5a5c7cd00","message":"docs(治理): 夹具覆盖度的算法写进 CLAUDE.md,并把探针从 /tmp 落进仓里\n\n今天九个契约包的门禁空白有一半是靠一个临时脚本找出来的,光看用例名一个也发现不了。方法写进文档\n而脚本留在 /tmp,下次没人跑得起来——所以一并落仓。\n\ngovernance/fixture-coverage.mjs(诊断,不是门禁:不写报告、不进 pnpm check):\n由 governance/fixtures/*.suite.json 驱动,新增套件自动纳入,不写死域名单。拿每个夹具用例的真实\npayload 逐个叶子字段换脏值,走门禁自己的 evaluateFixturePayload 入口,收集规则实际吐出的原因码,\n分三档——已钉(被某条用例的 reasons 声明过,守卫回退必红)/ 仅单测 / 都没有(守卫删掉任何一道都\n不会红)。--list 连「仅单测」一并列出,--json 出机器格式。\n\n三条读法都写进了脚本抬头与 CLAUDE.md:散文式校验消息不是稳定码,单列「非码」不计缺口;插值原因码\n词汇表无界,按前缀过滤;「仅单测」不等于缺陷——§5 迁入时的设计就是夹具只固定失败关闭一侧。\n\n落仓后第一次全量扫描立刻有新发现:九个契约包「都没有」全为 0(今天收口的结果),但运行时模块侧\n还有 4 条——module-permission 的 ACTION_REQUIRED / RESOURCE_REQUIRED / RESOURCE_ID_REQUIRED、\nmodule-audit 的 AUDIT_COMMIT_MODE_INVALID。已在 CLAUDE.md 记为尚未处理;那是 runtime/ 的纪律范围,\n本次不动。\n\n证据:在仅含本提交改动的导出树上跑通(模块未构建时按 unavailable 跳过,与 check:fixtures 同因)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/0b30631d9c45ceff29558ddf821e6cb5a5c7cd00","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-18T16:12:09-07:00","added":["governance/fixture-coverage.mjs"],"removed":[],"modified":["CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"45a6bd523973c97e88f31faa12604773150cec87","message":"docs(发布): 当场记录 rc.4 列车——三包已发,tag 这趟补上,并写清验证的真实范围\n\nrc.4 三包(contracts / governance / client-fact)2026-09-18 经本地旁路发出,源 557a95c,\nRegistry 实查确认在架、三包均 registry integrity verified。与前两趟不同,本次是当场记录。\n\n这趟补上了 CL-5 要求的 tag packages-v1.0.0-rc.4——rc.2 / rc.3 都漏了这一步,\nprovenance.tag 因此第一次不是 null。构建与发布在 .worktrees/rc4-release 的 detached\n干净检出里做,所以 worktreeDirty:false 是真的(主检出当时有并行会话在改 contracts)。\n\n记录里写清了两件容易被夸大的事:\n\n1. rc.4 远不止触发它的那两条 clients 规则。自 rc.3 源 036a308 起,contracts 147 文件 /\n 51 提交、governance 61 文件 / 48 提交随车发出,包含九域规则入参体检那一整轮。\n2. 发布前只跑了 check:fixtures(17 套件 394 例)与 check:module-imports(396 文件),\n 退出码均 0;**完整 pnpm check 是发布后补跑的**(真实退出码 0,check:evidence partial:\n 36 新鲜 / 5 过期,过期项均属其他任务 WIP)。按 G-12 边界,这些都不构成阶段门证据。\n\nCLAUDE.md 的 contracts 条目同步推到 rc.4,并顺手修掉一处自相矛盾:该条前半句还写着\nrc.2 源 eb3cf2c,而后半句已说明按 provenance 订正为 6d3900a。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/45a6bd523973c97e88f31faa12604773150cec87","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-18T16:17:05-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/G-12本地旁路发布记录-2026-09-13.md"]},"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":20483,"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":44,"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-19T07:11:57+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"}}...
|
push
|
3
|
10
|
0
|
1789773540
|
0
|
1789773436
|
1789773540
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24171
|
docs(runbook): 补 §2.1——demo 租户重建的完整应对,含「哪一列」这个会咬人的 docs(runbook): 补 §2.1——demo 租户重建的完整应对,含「哪一列」这个会咬人的细节...
|
116
|
5
|
platform.yml
|
142
|
5
|
0
|
refs/heads/main
|
73d03c062f82dc9e8b9a0e66e6e973ca9aca54cd
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"45a6bd523973c97e88f31faa12604773150cec87","after":"73d03c062f82dc9e8b9a0e66e6e973ca9aca54cd","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/45a6bd523973c97e88f31faa12604773150cec87...73d03c062f82dc9e8b9a0e66e6e973ca9aca54cd","commits":[{"id":"73d03c062f82dc9e8b9a0e66e6e973ca9aca54cd","message":"docs(runbook): 补 §2.1——demo 租户重建的完整应对,含「哪一列」这个会咬人的细节\n\nidentity 库被清掉(db.sh --fresh / 手工重建 / 从早于 09-16 的 dump 恢复)之后,租户、\n管理员、应用与两个 OIDC 客户端会一起没——它们只在库里,不在任何配置文件里;而管理员\n明文口令全机只有 .secrets/idp-demo-admin.txt 一份(库存散列,备份 dump 里也搜不到明文)。\n\n本节写清四件此前只能靠翻代码才知道的事:两个 bootstrap 各自的一次性约束\n(TENANT_SLUG_CONFLICT / ADMINISTRATION_ALREADY_BOOTSTRAPPED)与「库还在时只能走管理 API」;\n两条 bootstrap 的确切载荷(按 zod schema 核对,password ≥ 12、redirectUri 只收 https 或\nloopback);工作台客户端为什么必须先有人工登录才能登记,且不得给它 idp:manage;以及\n四个 UUID 换新后要同步的四处配置,每处配上漏掉时的具体症状。\n\n其中 PLATFORM_OPS_ADMIN_SUBJECTS 填 users.subject 而不是 users.id——现存 dev 值就是错的,\n见 dev 部署记录 D-13。改 PLATFORM_OPS_* 必须重建容器,只 restart 不带新环境。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/73d03c062f82dc9e8b9a0e66e6e973ca9aca54cd","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-18T16:18:51-07:00","added":[],"removed":[],"modified":["docs/runbook.md"]},{"id":"3ed10d6c9473aca115f12b9f32aac435aa79e3ee","message":"docs(部署): 登记 D-13——PLATFORM_OPS_ADMIN_SUBJECTS 的 dev 值填的是 users.id,不是令牌里的 sub\n\n判定链是 token-verifier.ts:136(subject = payload.sub)→ AuthContext.subject →\nplatform-ops.adapter.ts:22(admins.has(auth.subject)),而 IdP 访问令牌的 sub 取自\nusers.subject。当前 dev 配的是该管理员的 users.id(4782bc0d-…),实际 sub 是\ne6783482-…,两者不同——**IdP 签发的管理员令牌打受控执行面会 403 OPS_FORBIDDEN**。\n\nsub 是从 §14 那次真实登录拿到的令牌里解出来的,不是推断。之所以此前没暴露:§5\n「三重守卫齐全 200」的取证用的是手工签发的合成令牌,值自然与白名单对得上;真实 IdP\n令牌这条路是 §14 才第一次走通的。\n\n本轮只登记不改:订正它要动仓外 .secrets 并重建容器,且正向验证需要再走一次人工登录。\n重建 demo 租户时该填哪一列,写在 runbook §2.1。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/3ed10d6c9473aca115f12b9f32aac435aa79e3ee","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-18T16:18:43-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},{"id":"91ae21671f2d958ef5e228e525cc931a8e586d40","message":"test(runtime): 补掉覆盖度探针在两个模块查出的 4 条——夹具与单测都没走到\n\ngovernance/fixture-coverage.mjs 落仓后第一次全量扫描(15 个套件)查出的 4 条,全在运行时模块侧:\n\n module-permission ACTION_REQUIRED / RESOURCE_REQUIRED / RESOURCE_ID_REQUIRED\n module-audit AUDIT_COMMIT_MODE_INVALID\n\npermission 的 preflight 已经钉了 tenant / request / trace / actor / scopeVersion 五项(N01–N03),\n唯独「资源三件套」一条用例都没有——那三条守卫删掉,check:fixtures 与模块单测都不会红。\naudit 的 commit 模式同理:mode 不在册时拒绝这条判定此前无人走到。\n\n补:permission 夹具 9 → 10 例(N08,三条原因一条用例同时钉住,门禁要求逐条出现)、\naudit 26 → 27 例(N18,mode=\"best-effort\" 这种看着合理但不在册的取值)。\n模块夹具与 test/negative/*.fixtures.test.ts 同源——单测 it.each 直接遍历夹具文件,所以加夹具用例\n即同时加单测,本次没有另写测试代码。\n\npermission 的夹具是 prettier 按宽度折行的混合风格,JSON round-trip 会把整份重排成 180 行噪音;\n改用文本插入,diff 保持 +8/-1。\n\n负向实测:把 N08 的声明原因改成不会产生的串 → 门禁 exit 1 并点名该例,恢复后转绿。\n\n补后 15 个套件的「夹具与单测都没有」全为 0,CLAUDE.md 同步改口。\n\n证据:module-permission 50/50、module-audit 81/81(vitest 无库单测);\ncheck:fixtures 两套件 37/37;fixture-coverage 全量 0。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/91ae21671f2d958ef5e228e525cc931a8e586d40","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-18T16:18:36-07:00","added":[],"removed":[],"modified":["CLAUDE.md","runtime/modules/audit/test/fixtures/audit.fixtures.json","runtime/modules/permission/test/fixtures/permission.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"73d03c062f82dc9e8b9a0e66e6e973ca9aca54cd","message":"docs(runbook): 补 §2.1——demo 租户重建的完整应对,含「哪一列」这个会咬人的细节\n\nidentity 库被清掉(db.sh --fresh / 手工重建 / 从早于 09-16 的 dump 恢复)之后,租户、\n管理员、应用与两个 OIDC 客户端会一起没——它们只在库里,不在任何配置文件里;而管理员\n明文口令全机只有 .secrets/idp-demo-admin.txt 一份(库存散列,备份 dump 里也搜不到明文)。\n\n本节写清四件此前只能靠翻代码才知道的事:两个 bootstrap 各自的一次性约束\n(TENANT_SLUG_CONFLICT / ADMINISTRATION_ALREADY_BOOTSTRAPPED)与「库还在时只能走管理 API」;\n两条 bootstrap 的确切载荷(按 zod schema 核对,password ≥ 12、redirectUri 只收 https 或\nloopback);工作台客户端为什么必须先有人工登录才能登记,且不得给它 idp:manage;以及\n四个 UUID 换新后要同步的四处配置,每处配上漏掉时的具体症状。\n\n其中 PLATFORM_OPS_ADMIN_SUBJECTS 填 users.subject 而不是 users.id——现存 dev 值就是错的,\n见 dev 部署记录 D-13。改 PLATFORM_OPS_* 必须重建容器,只 restart 不带新环境。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/73d03c062f82dc9e8b9a0e66e6e973ca9aca54cd","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-18T16:18:51-07:00","added":[],"removed":[],"modified":["docs/runbook.md"]},"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":20594,"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":44,"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-19T07:17:37+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"}}...
|
push
|
3
|
10
|
0
|
1789773705
|
0
|
1789773540
|
1789773705
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24172
|
test(contracts): 注册中心 plan 把 BLOCKED 判成了放行——裁决没批、候 test(contracts): 注册中心 plan 把 BLOCKED 判成了放行——裁决没批、候选自带 blocker,夹具都说通过...
|
116
|
5
|
platform.yml
|
143
|
5
|
0
|
refs/heads/main
|
4f36e22448f8fdf4611af3f5fa34305ae58769ef
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"73d03c062f82dc9e8b9a0e66e6e973ca9aca54cd","after":"4f36e22448f8fdf4611af3f5fa34305ae58769ef","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/73d03c062f82dc9e8b9a0e66e6e973ca9aca54cd...4f36e22448f8fdf4611af3f5fa34305ae58769ef","commits":[{"id":"4f36e22448f8fdf4611af3f5fa34305ae58769ef","message":"test(contracts): 注册中心 plan 把 BLOCKED 判成了放行——裁决没批、候选自带 blocker,夹具都说通过\n\n前一轮(91216b5)补了入参体检的门禁覆盖。本轮按「公开方法 × 出口」再盘,查出的是\ngovernance/fixture-coverage.mjs 按设计查不到的一类:它只变异夹具已有用例的字段,\n夹具从没构造过的入口不会被发现。三个规则文件零改动,只动夹具评估器的可见性。\n\n1. plan 把 BLOCKED 判成放行。评估器原判据是 `\"reasons\" in r`;ManifestAdmissionResult 三个出口里\n BLOCKED 携带的是 blockers 不是 reasons,于是返回空数组 = ACCEPT。实测两种 BLOCKED 都被夹具判为通过:\n 候选自带 blockedBy([\"CHG-001\"])、所需裁决仍 pending([\"DECISION_PENDING:DEC-011\"])——\n 而它们明写着 activationAllowed: false / registryWriteAllowed: false。\n 同一文件下面的 upgrade 规则本来就写对了(... : [...d.blockers]),plan 与自己的兄弟规则不一致。\n\n2. 没有任何一条 plan 用例带合法快照。整条「有策略」分支(清单字段校验、裁决闸门、READY_FOR_REVIEW)\n 在门禁上根本不存在,唯一那条 N05 是「无策略即拒」。\n\n3. refresh 没有夹具规则:planner 第三个公开方法零门禁覆盖。\n\n修完之后覆盖度一度变差,这是对的。补上带快照的 plan 用例后,此前够不着的清单校验分支第一次被变异探针\n走到,fixture-coverage 随即报出 12 条「夹具与单测都没有」(SERVICES_REQUIRED / PERMISSIONS_REQUIRED /\nPRODUCED_FACTS_REQUIRED / CONSUMED_FACTS_REQUIRED / DEPENDENCIES_REQUIRED / MANIFEST_BLOCKERS_REQUIRED /\nMANIFEST_KIND_INVALID / OWNER_DOMAIN_REQUIRED 与 refresh 侧四条)——它们一直都在,只是之前没人能看见。\n连同 4 条「仅单测」一并钉住后回到 0 / 0。\n\n另修一处本轮自己的松懈:N42 的 reasons 写成了前缀 MANIFEST,任何 MANIFEST* 都能匹配,已改为确切原因码。\n\n一处明写不覆盖:plan() 的 DECISION_MISSING:\u003cid\u003e 按当前控制流不可达——缺一条必需裁决在 normalizePolicy\n装载时就抛 MANIFEST_DECISION_STATUS_INVALID:\u003cid\u003e,运行时工厂退回 deny-all。N39 钉这条真实路径,\nN49 钉装载侧原因码,不为不可达分支造用例。\n\n覆盖:夹具 41 → 70 例(正 7 / 反 63),定向测试 59 → 63 例,前一轮断言一条未改。\n变异探针(70 例 × 14 种脏值)38374 个变异点、0 处抛异常。\n\n未做(越界):C01.04 五个关键应用的固定版本消费(今 2 个 pin)与 C01.06 只读目录查询入口属接线,\n不在本轮;Catalog 登记未动。\n\n证据:pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas 无漂移、\nnode --test contracts/test/*.test.mjs 404/404、该套件夹具 70/70 失败 0、fixture-coverage 该套件 0 / 0。\n负向实测:把 N37 的 blocker 声明改成 CHG-999 → 门禁 exit 1 并点名该例,还原后 exit 0。\n本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/4f36e22448f8fdf4611af3f5fa34305ae58769ef","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-18T16:21:01-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/application-contract-registry/fixture-evaluator.ts","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json","docs/domain/registry-snapshot-blueprint.md"]}],"total_commits":0,"head_commit":{"id":"4f36e22448f8fdf4611af3f5fa34305ae58769ef","message":"test(contracts): 注册中心 plan 把 BLOCKED 判成了放行——裁决没批、候选自带 blocker,夹具都说通过\n\n前一轮(91216b5)补了入参体检的门禁覆盖。本轮按「公开方法 × 出口」再盘,查出的是\ngovernance/fixture-coverage.mjs 按设计查不到的一类:它只变异夹具已有用例的字段,\n夹具从没构造过的入口不会被发现。三个规则文件零改动,只动夹具评估器的可见性。\n\n1. plan 把 BLOCKED 判成放行。评估器原判据是 `\"reasons\" in r`;ManifestAdmissionResult 三个出口里\n BLOCKED 携带的是 blockers 不是 reasons,于是返回空数组 = ACCEPT。实测两种 BLOCKED 都被夹具判为通过:\n 候选自带 blockedBy([\"CHG-001\"])、所需裁决仍 pending([\"DECISION_PENDING:DEC-011\"])——\n 而它们明写着 activationAllowed: false / registryWriteAllowed: false。\n 同一文件下面的 upgrade 规则本来就写对了(... : [...d.blockers]),plan 与自己的兄弟规则不一致。\n\n2. 没有任何一条 plan 用例带合法快照。整条「有策略」分支(清单字段校验、裁决闸门、READY_FOR_REVIEW)\n 在门禁上根本不存在,唯一那条 N05 是「无策略即拒」。\n\n3. refresh 没有夹具规则:planner 第三个公开方法零门禁覆盖。\n\n修完之后覆盖度一度变差,这是对的。补上带快照的 plan 用例后,此前够不着的清单校验分支第一次被变异探针\n走到,fixture-coverage 随即报出 12 条「夹具与单测都没有」(SERVICES_REQUIRED / PERMISSIONS_REQUIRED /\nPRODUCED_FACTS_REQUIRED / CONSUMED_FACTS_REQUIRED / DEPENDENCIES_REQUIRED / MANIFEST_BLOCKERS_REQUIRED /\nMANIFEST_KIND_INVALID / OWNER_DOMAIN_REQUIRED 与 refresh 侧四条)——它们一直都在,只是之前没人能看见。\n连同 4 条「仅单测」一并钉住后回到 0 / 0。\n\n另修一处本轮自己的松懈:N42 的 reasons 写成了前缀 MANIFEST,任何 MANIFEST* 都能匹配,已改为确切原因码。\n\n一处明写不覆盖:plan() 的 DECISION_MISSING:\u003cid\u003e 按当前控制流不可达——缺一条必需裁决在 normalizePolicy\n装载时就抛 MANIFEST_DECISION_STATUS_INVALID:\u003cid\u003e,运行时工厂退回 deny-all。N39 钉这条真实路径,\nN49 钉装载侧原因码,不为不可达分支造用例。\n\n覆盖:夹具 41 → 70 例(正 7 / 反 63),定向测试 59 → 63 例,前一轮断言一条未改。\n变异探针(70 例 × 14 种脏值)38374 个变异点、0 处抛异常。\n\n未做(越界):C01.04 五个关键应用的固定版本消费(今 2 个 pin)与 C01.06 只读目录查询入口属接线,\n不在本轮;Catalog 登记未动。\n\n证据:pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas 无漂移、\nnode --test contracts/test/*.test.mjs 404/404、该套件夹具 70/70 失败 0、fixture-coverage 该套件 0 / 0。\n负向实测:把 N37 的 blocker 声明改成 CHG-999 → 门禁 exit 1 并点名该例,还原后 exit 0。\n本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/4f36e22448f8fdf4611af3f5fa34305ae58769ef","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-18T16:21:01-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/application-contract-registry/fixture-evaluator.ts","contracts/test/application-contract-registry-domain.test.mjs","contracts/test/fixtures/application-contract-registry.fixtures.json","docs/domain/registry-snapshot-blueprint.md"]},"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":20661,"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":44,"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-19T07:19:01+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"}}...
|
push
|
3
|
10
|
0
|
1789773742
|
0
|
1789773705
|
1789773742
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24173
|
docs(部署): D-13 归属改为与 D-4 一并验,并写明为什么不先单独改
|
116
|
5
|
platform.yml
|
144
|
5
|
0
|
refs/heads/main
|
2156538deab81264dd796a4ed668509522dbff45
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"4f36e22448f8fdf4611af3f5fa34305ae58769ef","after":"2156538deab81264dd796a4ed668509522dbff45","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/4f36e22448f8fdf4611af3f5fa34305ae58769ef...2156538deab81264dd796a4ed668509522dbff45","commits":[{"id":"2156538deab81264dd796a4ed668509522dbff45","message":"docs(部署): D-13 归属改为与 D-4 一并验,并写明为什么不先单独改\n\nOwner 2026-09-18 定:等 feat/identity-canonical-tenants 合并后连 D-4 一起验。\n\n归属列同时写下理由,而不只写「等」。D-13 看上去是两行就能改完的配置错误\n(.secrets 里换一个 UUID + 重建容器),容易被顺手改掉再顺手记一句「已修复」——\n但单独改它最多验到「守卫这关过了」:M3 写路径仍会挂在 D-4 的 CANONICAL_TENANT_REQUIRED,\n证不出「受控执行面对 IdP 令牌可用」。把这句话留在表里,是为了让下一个人别拿\n半条证据当整条用。\n\n依赖关系现在三处一致:§6 D-4、§14.5 D-13、未合并分支登记-2026-09-15.md 的\nfeat/identity-canonical-tenants 行。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/2156538deab81264dd796a4ed668509522dbff45","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-18T16:22:14-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"2156538deab81264dd796a4ed668509522dbff45","message":"docs(部署): D-13 归属改为与 D-4 一并验,并写明为什么不先单独改\n\nOwner 2026-09-18 定:等 feat/identity-canonical-tenants 合并后连 D-4 一起验。\n\n归属列同时写下理由,而不只写「等」。D-13 看上去是两行就能改完的配置错误\n(.secrets 里换一个 UUID + 重建容器),容易被顺手改掉再顺手记一句「已修复」——\n但单独改它最多验到「守卫这关过了」:M3 写路径仍会挂在 D-4 的 CANONICAL_TENANT_REQUIRED,\n证不出「受控执行面对 IdP 令牌可用」。把这句话留在表里,是为了让下一个人别拿\n半条证据当整条用。\n\n依赖关系现在三处一致:§6 D-4、§14.5 D-13、未合并分支登记-2026-09-15.md 的\nfeat/identity-canonical-tenants 行。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/2156538deab81264dd796a4ed668509522dbff45","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-18T16:22:14-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},"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":20740,"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":44,"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-19T07:21:46+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"}}...
|
push
|
3
|
10
|
0
|
1789773970
|
0
|
1789773743
|
1789773970
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24174
|
docs(部署): 记录补 §14.6——D-11 闭环,forward_auth 的 200 分支 docs(部署): 记录补 §14.6——D-11 闭环,forward_auth 的 200 分支第一次在服务端实测到...
|
116
|
5
|
platform.yml
|
145
|
5
|
0
|
refs/heads/main
|
832a54f24c1bf763ba06cf5513f7f7bd53b28e45
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"2156538deab81264dd796a4ed668509522dbff45","after":"832a54f24c1bf763ba06cf5513f7f7bd53b28e45","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/2156538deab81264dd796a4ed668509522dbff45...832a54f24c1bf763ba06cf5513f7f7bd53b28e45","commits":[{"id":"832a54f24c1bf763ba06cf5513f7f7bd53b28e45","message":"docs(部署): 记录补 §14.6——D-11 闭环,forward_auth 的 200 分支第一次在服务端实测到\n\n三个分支实测(网关 :58080):无令牌 401 / 伪造令牌 401 / **真实 IdP 令牌 200**;\n对照同一令牌直连容器 :53001 也是 200。返回体的 mode=fail-closed 与四个 ledger 端口\n确认打到的是容器而不是 dev 进程(:3101 那条链回的是 mode=local)。\n\nD-11 此前卡在一个操作顾虑而不是技术障碍:令牌只在浏览器里,搬进 shell 就会经过对话记录。\n这次用一次性本地接收端绕开——只听 127.0.0.1:45999、收到第一个 POST 就落盘(600)并自毁,\n页面把令牌 POST 过去(Content-Type: text/plain 在 CORS 安全列表内,不触发预检),shell 从\n文件读,用完 shred。方法一并写进记录,免得下次重新想。\n\n同轮把 D-11 从「未闭环」表摘掉(闭环项留在未闭环表里是自相矛盾),并把 §14 开头\n「后者只关掉一半」收窄为:服务端语义与服务端直连都已验证,唯一仍测不到的是浏览器跨源\n带令牌那条路,而它测不到的原因是预检带不了令牌(§14.4),属设计使然、不是缺证据。\n\n也写明这个令牌验不了 D-13:工作台客户端 scope 只有 openid profile,没有 platform:ops,\nevaluateOpsAccess 第一关就以 OPS_SCOPE_REQUIRED 挡下,到不了 admins.has(auth.subject)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/832a54f24c1bf763ba06cf5513f7f7bd53b28e45","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-18T16:26:00-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},{"id":"4df190ddfc1fdc7d3fe7ac71f4094a1641484eca","message":"test(contracts,runtime): 把最后 9 条「仅单测」钉进夹具——两档归零,17 套件 458 例\n\n覆盖度探针的「都没有」在同日已全部归零(契约包九个域 + 运行时模块侧 4 条由 91ae216 补齐),\n但「仅单测」还剩 9 条。逐条看过,它们都不属于该工具自述里 ③ 说的两类豁免(基线闸门登记位\n*_BASELINE_NOT_READY / G3 / G5、演进对比类),而是普通字段守卫——守卫删掉只有 contracts:test\n或模块单测会红,门禁不会:\n\n module-permission APP_ID_REQUIRED(preflight 缺 appId)\n cross-domain-workflow WORKFLOW_IDENTITY_INVALID(定义缺 id)\n WORKFLOW_SCOPE_VERSION_INVALID(计划请求缺 scopeVersion)\n collaboration-messaging MESSAGE_CONTEXT_REQUIRED(消息缺 tenantId)\n OWNER_COMMAND_REQUIRED(动作卡缺 ownerDomain)\n notification-webhook WEBHOOK_SOURCE_EVENT_ID_REQUIRED\n WEBHOOK_TEMPLATE_VERSION_INVALID\n WEBHOOK_VARIABLES_INVALID\n\n跨域流程那两条是本会话同日第一条补强(13c7eb7)自己新增/收紧的判定,当时只补了单测没进夹具,\n本轮补齐——自己留的口子自己收。\n\n构造用例时踩到的坑:自动「从同规则里挑最完整的一条用例作底」会挑到已经带别的缺陷的负例,\n产出里混进无关原因码(实测跨域流程那条挑到了「两步共用幂等键」、IM 那条挑到了「senderType 大小写错」)。\n改为一律从该规则的正例派生、只做一处改动,每例产出单一原因码;reasons 按规则真实返回值逐字回填,\n不用前缀蒙混。\n\n覆盖:module-permission 10 → 11、cross-domain-workflow 16 → 18、collaboration-messaging 42 → 46、\nnotification-webhook 39 → 42;根链 check:fixtures 17 套件 458 例 0 失败 0 不可用。\n模块夹具与 test/negative/*.fixtures.test.ts 同源(it.each 直接遍历夹具文件),module-permission 的\n用例数随夹具自动同步,pnpm --dir runtime --filter @juhai/module-permission test 51/51。\n\n结果:15 个套件的「都没有」与「仅单测」两档现均为 0。口径与数字同步写进仓根 CLAUDE.md 那一段,\n并留了一句「后续新增规则请照此维持,或在本行注明保留理由」。\n\n证据:node --test contracts/test/*.test.mjs 404/404、typecheck 绿、check:fixtures 17 套件 458 例 0 失败。\n负向实测:把 IM 新增那条的声明改成 SENDER_TYPE_INVALID → 门禁 exit 1 并点名该例\n(reasons=[\"OWNER_COMMAND_REQUIRED\"]),还原后 exit 0。\n工作树另有并行会话的 check-fact-pii WIP,故本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/4df190ddfc1fdc7d3fe7ac71f4094a1641484eca","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-18T16:23:53-07:00","added":[],"removed":[],"modified":["CLAUDE.md","contracts/SOURCE.md","contracts/test/fixtures/collaboration-messaging.fixtures.json","contracts/test/fixtures/cross-domain-workflow.fixtures.json","contracts/test/fixtures/notification-webhook.fixtures.json","runtime/modules/permission/test/fixtures/permission.fixtures.json"]},{"id":"2f9175b43d249cdf68a65071a9cba4a5c214c0f1","message":"test(contracts): 会话追加的 STALE 与 REJECT 两个出口没钉——订正我把它判成探针误报的结论\n\nfixture-coverage 把 collaboration-messaging 的 REJECT 与 STALE 报成「仅单测」,我一度判为探针把\n「决策 kind」误当原因码统计、准备去改探针。判错了。\n\n这套 kind-as-reason 是评估器有意的约定:同一份夹具里 DUPLICATE / GAP / NOT_MEMBER /\nTENANT_MISMATCH / CONVERSATION_BINDING_REQUIRED / CONVERSATION_MISMATCH / STATE_INVALID 七个出口\n都是这么声明的,notification-webhook 的 DUPLICATE / DLQ 同理。探针的分类是对的,该补的是夹具。\n\nclassifyConversationAppend 有 10 个出口,夹具此前钉了 7 个,缺的两个:\n STALE incomingSequence 不前移——乱序或重放(conversation-message.ts:76)\n REJECT 消息自身 preflight 就没过(:67)\n前者是「重放的消息不能覆盖已处理序列」这条纪律在门禁上的唯一出口。\n\n补:夹具 42 → 44 例(N39 / N40)。该域「仅单测」由 4 降至 2。\n\n负向实测:把 N39 的声明原因改成不会产生的串 → 门禁 exit 1 并点名该例,恢复后转绿。\n\n教训写进 SOURCE.md:探针报出来的要逐条回源码核,不能因为「看着像 kind 不像 code」就判成误报——\n这套契约包里 kind 就是 code。\n\n证据:在仅含本提交改动的导出树上 tsc 绿、定向 32/32、contract-collaboration-messaging 44/44。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/2f9175b43d249cdf68a65071a9cba4a5c214c0f1","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-18T16:22:38-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/test/fixtures/collaboration-messaging.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"832a54f24c1bf763ba06cf5513f7f7bd53b28e45","message":"docs(部署): 记录补 §14.6——D-11 闭环,forward_auth 的 200 分支第一次在服务端实测到\n\n三个分支实测(网关 :58080):无令牌 401 / 伪造令牌 401 / **真实 IdP 令牌 200**;\n对照同一令牌直连容器 :53001 也是 200。返回体的 mode=fail-closed 与四个 ledger 端口\n确认打到的是容器而不是 dev 进程(:3101 那条链回的是 mode=local)。\n\nD-11 此前卡在一个操作顾虑而不是技术障碍:令牌只在浏览器里,搬进 shell 就会经过对话记录。\n这次用一次性本地接收端绕开——只听 127.0.0.1:45999、收到第一个 POST 就落盘(600)并自毁,\n页面把令牌 POST 过去(Content-Type: text/plain 在 CORS 安全列表内,不触发预检),shell 从\n文件读,用完 shred。方法一并写进记录,免得下次重新想。\n\n同轮把 D-11 从「未闭环」表摘掉(闭环项留在未闭环表里是自相矛盾),并把 §14 开头\n「后者只关掉一半」收窄为:服务端语义与服务端直连都已验证,唯一仍测不到的是浏览器跨源\n带令牌那条路,而它测不到的原因是预检带不了令牌(§14.4),属设计使然、不是缺证据。\n\n也写明这个令牌验不了 D-13:工作台客户端 scope 只有 openid profile,没有 platform:ops,\nevaluateOpsAccess 第一关就以 OPS_SCOPE_REQUIRED 挡下,到不了 admins.has(auth.subject)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/832a54f24c1bf763ba06cf5513f7f7bd53b28e45","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-18T16:26:00-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},"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":20763,"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":44,"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-19T07:22:23+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"}}...
|
push
|
2
|
30
|
1789774004
|
1789774043
|
0
|
1789773970
|
1789774072
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24175
|
chore(reports): fact-pii / gate-flow / ci-mirror 三 chore(reports): fact-pii / gate-flow / ci-mirror 三份回绑 @ bb26784...
|
116
|
5
|
platform.yml
|
146
|
5
|
0
|
refs/heads/main
|
748492c2a1013dbf03b6234f2a85dea73af7e9e6
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"832a54f24c1bf763ba06cf5513f7f7bd53b28e45","after":"748492c2a1013dbf03b6234f2a85dea73af7e9e6","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/832a54f24c1bf763ba06cf5513f7f7bd53b28e45...748492c2a1013dbf03b6234f2a85dea73af7e9e6","commits":[{"id":"748492c2a1013dbf03b6234f2a85dea73af7e9e6","message":"chore(reports): fact-pii / gate-flow / ci-mirror 三份回绑 @ bb26784\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,三份均绑 bb26784 /\nworktreeDirty=false:\n\n fact-pii 21 个 Fact / 116 个字段,0 处 PII 形状与开放结构,25 个自由文本登账待裁\n gate-flow 47 个脚本、35 个有消费入口(新门禁已被推导为在链上),12 个流外且已具名\n ci-mirror 规范化 462 行逐行相同(两份工作流同步加了 check:fact-pii)\n\n后两份的作用域含本轮改动的 package.json 与两份 workflow,故一并回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/748492c2a1013dbf03b6234f2a85dea73af7e9e6","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-18T16:28:00-07:00","added":["reports/fact-pii.latest.json"],"removed":[],"modified":["reports/ci-mirror.latest.json","reports/gate-flow.latest.json"]},{"id":"bb26784b4f44517b57389d78fbfacac5915a0317","message":"feat(治理): 补上 check:fact-pii——仓纪律 4 的三件事里,Fact payload 禁 PII 此前无人守\n\n纪律 4 把三件事并列:禁 ^/~(check:pins 守)、禁跨模块 import(check:module-imports 守)、\nFact payload 禁止复制 PII(**没有任何机器在守**)。check:facts 只校验「声明的 Fact 类型是否\n登记」,从不看 payload 里装什么——往某个 Fact schema 加一个 user_email 字段,全链门禁一片绿。\nFact 是跨域流转的事件:个人信息应当留在权威域里按权限查,不随事件复制到每个消费者的\nInbox 与审计链上。\n\n两条判红:\n\n PII_SHAPED_KEY 字段名命中 PII 模式且未显式豁免。按 (^|_)pattern($|_) 的词边界匹配——\n 裸子串会让 principal_id(princ-ip-al)、storage_kind(stor-age)误报,\n 门禁第一天就会被当成坏了而绕过。测试钉住了这一条。\n UNBOUNDED_PAYLOAD 对象缺 properties 或未禁 additionalProperties。这条不是锦上添花:\n 开放结构能装任意键,键名规则对它完全无效,不堵住它前一条只是君子协定。\n\n一条**不判红**:unconstrainedText——无 enum/pattern/format 约束的字符串字段(现有 25 个,\nbuyer_snapshot 这种名字含糊、maxLength 200 的自由文本最典型)。它们确实是 PII 的入口,\n但「这个字段实际装什么」是业务语义。这 25 个字段**全部没有 description**,我写不出可靠的\n豁免理由,编造 25 条登记只会污染治理真源。如实登账进报告,留给人裁定。\n\n判据单源是 governance/fact-pii-rules.json(63 条模式 + 豁免登记),不写死在脚本里——\nPII 形状会随业务扩张,写死就意味着每次扩张都要改门禁代码并重跑它的测试。与 otel-attributes.json\n同思路。豁免按 \u003cFact\u003e:\u003c字段路径\u003e 登记,不是裸键名:同名字段在不同 Fact 里性质可以不同。\n\n扫描面含 contracts/candidates/facts——候选必须一起扫,否则 PII 字段可以先进候选、\n再随批准转正,绕开本门禁。不扫 compatibility/baselines:历史兼容基线按定义不可改,报红也无从修。\n\n接入:根 check 链(check:facts 之后)、两份 CI 工作流(check:ci-mirror 守逐行一致,462 行通过)、\nevidence-scopes 作用域登记。本机实测:21 个 Fact / 116 字段 0 违规;篡改必红两种形态\n(加 PII 字段、改开放结构)均 exit 1,还原后 exit 0;门禁测试 8 例全过。\n\n顺带把纪律 4 里 check:pins 的判据范围写明为 @juhai/* —— 原措辞未限定,读起来像全仓禁 ^/~。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/bb26784b4f44517b57389d78fbfacac5915a0317","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-18T16:26:28-07:00","added":["governance/check-fact-pii.mjs","governance/fact-pii-rules.json","governance/test/check-fact-pii.test.mjs"],"removed":[],"modified":[".gitea/workflows/platform.yml",".github/workflows/platform.yml","CLAUDE.md","governance/evidence-scopes.json","governance/rebind-reports.mjs","package.json"]}],"total_commits":0,"head_commit":{"id":"748492c2a1013dbf03b6234f2a85dea73af7e9e6","message":"chore(reports): fact-pii / gate-flow / ci-mirror 三份回绑 @ bb26784\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,三份均绑 bb26784 /\nworktreeDirty=false:\n\n fact-pii 21 个 Fact / 116 个字段,0 处 PII 形状与开放结构,25 个自由文本登账待裁\n gate-flow 47 个脚本、35 个有消费入口(新门禁已被推导为在链上),12 个流外且已具名\n ci-mirror 规范化 462 行逐行相同(两份工作流同步加了 check:fact-pii)\n\n后两份的作用域含本轮改动的 package.json 与两份 workflow,故一并回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/748492c2a1013dbf03b6234f2a85dea73af7e9e6","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-18T16:28:00-07:00","added":["reports/fact-pii.latest.json"],"removed":[],"modified":["reports/ci-mirror.latest.json","reports/gate-flow.latest.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":20917,"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":44,"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-19T07:26:10+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"}}...
|
push
|
2
|
30
|
1789774132
|
1789774173
|
0
|
1789774131
|
1789774256
|
group: platform-${{ github.workflow }}-${{ github. group: platform-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
...
|
platform-platform.yml-refs/heads/main
|
0
|
Edit
Delete
|
|
24176
|
chore(reports): health 采纳的四十一份三级证据 回绑 @ fc147d3,刷新 chore(reports): health 采纳的四十一份三级证据 回绑 @ fc147d3,刷新快照锚点...
|
76
|
5
|
governance.yml
|
86
|
5
|
0
|
refs/heads/main
|
001e16da960e9c44fcb2f943d149bb374c710e33
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"85a263fb1667d12318daa5601f7e6e23284c5dfd","after":"001e16da960e9c44fcb2f943d149bb374c710e33","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/85a263fb1667d12318daa5601f7e6e23284c5dfd...001e16da960e9c44fcb2f943d149bb374c710e33","commits":[{"id":"001e16da960e9c44fcb2f943d149bb374c710e33","message":"chore(reports): health 采纳的四十一份三级证据 回绑 @ fc147d3,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 fc147d3(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=fc147d3、worktreeDirty:false):\n静态 28 + 运行态 13。静态整轮 28/28(退出码 0);运行态 735 tests / 行为矩阵 204/204 /\n87 项指标零违规。\n\nhealth 换成内核 buildHealthResponse 后**行为中性**:四处调用点、两个 dispatcher 的\n200/503 映射、NestJS 的 ServiceUnavailableException、依赖弹性用例(14 故障 + 14 恢复 +\n半开 4 + 延迟 4)全过。开工时列的三个风险点(响应形状、503 映射、超时语义)一个都未兑现。\n\n用例数 733 → 735(health 3 例改写为 5 例,覆盖面上升);地板 683 未动——地板只在全绿后用\n--update-baseline 收紧,不随一次上浮改。\n\n本批跑了两轮 runtime,第一轮红在末尾的 docs-truth 复核(动态数字仍写 733)。\n**这是结构性自指,不是缺陷**:任何改变用例数的批次,第一轮 runtime 必然在自己最后一步的\n数字校验上失败——数字只有跑完才知道,而跑的最后一步要校验数字。已把「改动影响用例数时\n预期两轮 runtime」记进 fc147d3 的提交信息,与「先提交再跑」是同一类流程教训\n(后者本批已用上,第一轮即 clean 绑定)。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/001e16da960e9c44fcb2f943d149bb374c710e33","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-18T16:31:29-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},{"id":"fc147d377061ea86c37cdd24e1afb0c441a6e2fe","message":"docs(治理): 动态数字随 health 用例增补对齐——733 → 735 tests\n\nhealth 由 3 例改写为 5 例后 runtime 用例数 733 → 735,CLAUDE.md 动态区两处随之更新:\n证据新鲜度行的「(733 tests / 0 failures)」与动态表的 tests-passing 行。地板 683 不动\n(地板只在全绿后用 --update-baseline 收紧,不随一次上浮改)。\n\n**这一轮红是结构性自指,不是缺陷:** 任何改变用例数的批次,第一轮 runtime 必然在自己\n最后一步的 docs-truth 复核上失败——数字只有跑完才知道,而跑的最后一步要校验数字。\n本轮测试本身全过(735 tests / 0 failures、行为矩阵 204/204、87 项指标零违规),\n红的只有 governance-number-evidence-consistency 的两处漂移字段。修正后重跑即闭合。\n\n顺带记一条可复用的顺序:**改动会影响用例数时,预期两轮 runtime**——第一轮取真实数字,\n更新文档后第二轮取 clean 绑定的 passed 证据。与「先提交再跑」是同一类流程教训。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/fc147d377061ea86c37cdd24e1afb0c441a6e2fe","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-18T16:19:20-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]},{"id":"bfc3ef5a82a201c649688dd76b3ed22704560888","message":"feat(health): B3 余采纳内核可扩展健康检查;同批订正 B4 的分类误判\n\n两件事,都是「实测推翻先前判断」的后续。\n\n一、B4 调查结论写回立项(不改代码)\n\n先前把 `rls` 归为「同名不相干、二选一」——0% 导出重合被读成互斥,实际是**解决不同问题**:\n框架 tenant-rls 管**姿态与探测**(resolveTenantRlsMode 生产拒绝 off、assertRlsCapableRole\n启动拒绝 superuser/BYPASSRLS、tenantRlsRoleNames 派生角色名),本仓 rls 管**清单与纪律**\n(67 张表/模型登记、角色名常量、SET LOCAL ROLE 的租户 id 校验)。两者互补。\n\n调查顺带查出一个真缺口并登记进 §6:**应用不在启动时探测连接角色**。现有保护全在门禁时——\ncheck:db-credential-separation 供给角色、查 pg_roles、断言不特权(8 负例含 runtime-superuser\n探针),验的是「供给对不对」而非「应用会不会拒绝启动」。若部署时 DB URL 指向超级用户,应用\n照常启动,所有不走 tenantTx 的查询都没有 RLS。补它的前提是先采纳双 URL 模型——\nDATABASE_RUNTIME_URL 在本仓只被 scripts/with-platform-dev.mjs 用到,**两个应用根本不读它**。\n故 B4 重定义为「采纳双 URL RLS 模型 + 启动探测」,属部署面变更,独立批次。\n**没有顺手先迁 tenant-rls 契约**——那会再造一块零消费面,同一个错误不在一次会话里犯第二遍。\n\n二、health 采纳内核可扩展形态(框架 0.19.0,受理基础设施仓 FR-1)\n\n本仓原实现是固定两键 checks + evaluateHealthDependencies,属 0.19.0 之前的形态。框架把\nchecks 改为 { database; redis } \u0026 Record\u003cstring, HealthCheckState\u003e——**纯增键,既有消费者逐字\n不受影响**——并给出附加子检查登记点与名字 fail-closed(占用核心名 / 重复登记在登记这一刻抛错)。\n\n为什么现在采纳:本仓已知有拿不出来的健康维度(缺失梳理 §3 记着「消费组滞后无指标」)。\n固定两键下这类维度无处安放;换成可扩展形状后,Kafka 消费者滞后、平台端口状态才有登记位。\n\n替换而非合并:框架 buildHealthResponse + probeHealthCheck 覆盖本仓 evaluateHealthDependencies\n的全部语义,并把 service / uptime / timestamp 一并产出——四处适配器此前各自手拼这三个字段,\n正是 G17 行为漂移的老来源(两侧曾一个回浮点进程 uptime、一个回整数应用 uptime)。\n输出逐字兼容:无 extras 时 every(up) 等价于原先 database \u0026\u0026 redis,timestamp 同为 toISOString()。\n\n四处调用点全改:两个 dispatcher + Fastify 路由 + NestJS 控制器。\n\n**测试覆盖上升而非下降**:health.test.ts 由 3 例改写为 5 例——原三条语义(ok / 逐项判责 /\n超时 fail-closed)逐条在新 API 上重验,另加两条覆盖新能力(附加子检查参与 degraded 判定、\n名字 fail-closed)。contracts 312 → 314,own-test-cases 736 → 738。\n\n三处门禁断言随符号改名同步(C45 双后端 health、C58 两个 dispatcher、O11 运维平面)。\n**断言意图未变**,改的只是符号名。三条都做了实活验证:把符号换成不含原串的名字后 C45/C58/O11\n如期转红,还原复验绿。(第一次探针用 buildHealthResponseX,正则仍匹配前缀而未触发——\n探针本身的设计错误,已重做。)\n\n@repo/contracts 1.21.0 → 1.22.0;三把锁重签(exports 42 模块 / 751 导出);接入手册锁行同步;\nCLAUDE.md 动态表 own-test-cases 随报告更新。静态整轮 28/28。\n运行态在本提交后重跑回绑——health 端点实现已换,必须验。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/bfc3ef5a82a201c649688dd76b3ed22704560888","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-18T16:08:02-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/dispatcher.ts","apps/api-fastify/src/routes/health.ts","apps/api-nestjs/src/dispatcher.ts","apps/api-nestjs/src/health/health.controller.ts","docs/planning/内核退回pin立项-2026-09-18.md","docs/product-extension-guide.md","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/health.test.ts","packages/contracts/src/health.ts","scripts/check-dual-backend-parity.mjs","scripts/check-operations.mjs"]}],"total_commits":0,"head_commit":{"id":"001e16da960e9c44fcb2f943d149bb374c710e33","message":"chore(reports): health 采纳的四十一份三级证据 回绑 @ fc147d3,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 fc147d3(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=fc147d3、worktreeDirty:false):\n静态 28 + 运行态 13。静态整轮 28/28(退出码 0);运行态 735 tests / 行为矩阵 204/204 /\n87 项指标零违规。\n\nhealth 换成内核 buildHealthResponse 后**行为中性**:四处调用点、两个 dispatcher 的\n200/503 映射、NestJS 的 ServiceUnavailableException、依赖弹性用例(14 故障 + 14 恢复 +\n半开 4 + 延迟 4)全过。开工时列的三个风险点(响应形状、503 映射、超时语义)一个都未兑现。\n\n用例数 733 → 735(health 3 例改写为 5 例,覆盖面上升);地板 683 未动——地板只在全绿后用\n--update-baseline 收紧,不随一次上浮改。\n\n本批跑了两轮 runtime,第一轮红在末尾的 docs-truth 复核(动态数字仍写 733)。\n**这是结构性自指,不是缺陷**:任何改变用例数的批次,第一轮 runtime 必然在自己最后一步的\n数字校验上失败——数字只有跑完才知道,而跑的最后一步要校验数字。已把「改动影响用例数时\n预期两轮 runtime」记进 fc147d3 的提交信息,与「先提交再跑」是同一类流程教训\n(后者本批已用上,第一轮即 clean 绑定)。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/001e16da960e9c44fcb2f943d149bb374c710e33","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-18T16:31:29-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89257,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-19T06:55:46+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"}}...
|
push
|
2
|
36
|
1789774294
|
1789774384
|
0
|
1789774292
|
1789774420
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24177
|
chore(reports): health 采纳的四十一份三级证据 回绑 @ fc147d3,刷新 chore(reports): health 采纳的四十一份三级证据 回绑 @ fc147d3,刷新快照锚点...
|
76
|
5
|
platform-governance.yml
|
87
|
5
|
0
|
refs/heads/main
|
001e16da960e9c44fcb2f943d149bb374c710e33
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"85a263fb1667d12318daa5601f7e6e23284c5dfd","after":"001e16da960e9c44fcb2f943d149bb374c710e33","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/85a263fb1667d12318daa5601f7e6e23284c5dfd...001e16da960e9c44fcb2f943d149bb374c710e33","commits":[{"id":"001e16da960e9c44fcb2f943d149bb374c710e33","message":"chore(reports): health 采纳的四十一份三级证据 回绑 @ fc147d3,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 fc147d3(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=fc147d3、worktreeDirty:false):\n静态 28 + 运行态 13。静态整轮 28/28(退出码 0);运行态 735 tests / 行为矩阵 204/204 /\n87 项指标零违规。\n\nhealth 换成内核 buildHealthResponse 后**行为中性**:四处调用点、两个 dispatcher 的\n200/503 映射、NestJS 的 ServiceUnavailableException、依赖弹性用例(14 故障 + 14 恢复 +\n半开 4 + 延迟 4)全过。开工时列的三个风险点(响应形状、503 映射、超时语义)一个都未兑现。\n\n用例数 733 → 735(health 3 例改写为 5 例,覆盖面上升);地板 683 未动——地板只在全绿后用\n--update-baseline 收紧,不随一次上浮改。\n\n本批跑了两轮 runtime,第一轮红在末尾的 docs-truth 复核(动态数字仍写 733)。\n**这是结构性自指,不是缺陷**:任何改变用例数的批次,第一轮 runtime 必然在自己最后一步的\n数字校验上失败——数字只有跑完才知道,而跑的最后一步要校验数字。已把「改动影响用例数时\n预期两轮 runtime」记进 fc147d3 的提交信息,与「先提交再跑」是同一类流程教训\n(后者本批已用上,第一轮即 clean 绑定)。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/001e16da960e9c44fcb2f943d149bb374c710e33","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-18T16:31:29-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},{"id":"fc147d377061ea86c37cdd24e1afb0c441a6e2fe","message":"docs(治理): 动态数字随 health 用例增补对齐——733 → 735 tests\n\nhealth 由 3 例改写为 5 例后 runtime 用例数 733 → 735,CLAUDE.md 动态区两处随之更新:\n证据新鲜度行的「(733 tests / 0 failures)」与动态表的 tests-passing 行。地板 683 不动\n(地板只在全绿后用 --update-baseline 收紧,不随一次上浮改)。\n\n**这一轮红是结构性自指,不是缺陷:** 任何改变用例数的批次,第一轮 runtime 必然在自己\n最后一步的 docs-truth 复核上失败——数字只有跑完才知道,而跑的最后一步要校验数字。\n本轮测试本身全过(735 tests / 0 failures、行为矩阵 204/204、87 项指标零违规),\n红的只有 governance-number-evidence-consistency 的两处漂移字段。修正后重跑即闭合。\n\n顺带记一条可复用的顺序:**改动会影响用例数时,预期两轮 runtime**——第一轮取真实数字,\n更新文档后第二轮取 clean 绑定的 passed 证据。与「先提交再跑」是同一类流程教训。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/fc147d377061ea86c37cdd24e1afb0c441a6e2fe","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-18T16:19:20-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]},{"id":"bfc3ef5a82a201c649688dd76b3ed22704560888","message":"feat(health): B3 余采纳内核可扩展健康检查;同批订正 B4 的分类误判\n\n两件事,都是「实测推翻先前判断」的后续。\n\n一、B4 调查结论写回立项(不改代码)\n\n先前把 `rls` 归为「同名不相干、二选一」——0% 导出重合被读成互斥,实际是**解决不同问题**:\n框架 tenant-rls 管**姿态与探测**(resolveTenantRlsMode 生产拒绝 off、assertRlsCapableRole\n启动拒绝 superuser/BYPASSRLS、tenantRlsRoleNames 派生角色名),本仓 rls 管**清单与纪律**\n(67 张表/模型登记、角色名常量、SET LOCAL ROLE 的租户 id 校验)。两者互补。\n\n调查顺带查出一个真缺口并登记进 §6:**应用不在启动时探测连接角色**。现有保护全在门禁时——\ncheck:db-credential-separation 供给角色、查 pg_roles、断言不特权(8 负例含 runtime-superuser\n探针),验的是「供给对不对」而非「应用会不会拒绝启动」。若部署时 DB URL 指向超级用户,应用\n照常启动,所有不走 tenantTx 的查询都没有 RLS。补它的前提是先采纳双 URL 模型——\nDATABASE_RUNTIME_URL 在本仓只被 scripts/with-platform-dev.mjs 用到,**两个应用根本不读它**。\n故 B4 重定义为「采纳双 URL RLS 模型 + 启动探测」,属部署面变更,独立批次。\n**没有顺手先迁 tenant-rls 契约**——那会再造一块零消费面,同一个错误不在一次会话里犯第二遍。\n\n二、health 采纳内核可扩展形态(框架 0.19.0,受理基础设施仓 FR-1)\n\n本仓原实现是固定两键 checks + evaluateHealthDependencies,属 0.19.0 之前的形态。框架把\nchecks 改为 { database; redis } \u0026 Record\u003cstring, HealthCheckState\u003e——**纯增键,既有消费者逐字\n不受影响**——并给出附加子检查登记点与名字 fail-closed(占用核心名 / 重复登记在登记这一刻抛错)。\n\n为什么现在采纳:本仓已知有拿不出来的健康维度(缺失梳理 §3 记着「消费组滞后无指标」)。\n固定两键下这类维度无处安放;换成可扩展形状后,Kafka 消费者滞后、平台端口状态才有登记位。\n\n替换而非合并:框架 buildHealthResponse + probeHealthCheck 覆盖本仓 evaluateHealthDependencies\n的全部语义,并把 service / uptime / timestamp 一并产出——四处适配器此前各自手拼这三个字段,\n正是 G17 行为漂移的老来源(两侧曾一个回浮点进程 uptime、一个回整数应用 uptime)。\n输出逐字兼容:无 extras 时 every(up) 等价于原先 database \u0026\u0026 redis,timestamp 同为 toISOString()。\n\n四处调用点全改:两个 dispatcher + Fastify 路由 + NestJS 控制器。\n\n**测试覆盖上升而非下降**:health.test.ts 由 3 例改写为 5 例——原三条语义(ok / 逐项判责 /\n超时 fail-closed)逐条在新 API 上重验,另加两条覆盖新能力(附加子检查参与 degraded 判定、\n名字 fail-closed)。contracts 312 → 314,own-test-cases 736 → 738。\n\n三处门禁断言随符号改名同步(C45 双后端 health、C58 两个 dispatcher、O11 运维平面)。\n**断言意图未变**,改的只是符号名。三条都做了实活验证:把符号换成不含原串的名字后 C45/C58/O11\n如期转红,还原复验绿。(第一次探针用 buildHealthResponseX,正则仍匹配前缀而未触发——\n探针本身的设计错误,已重做。)\n\n@repo/contracts 1.21.0 → 1.22.0;三把锁重签(exports 42 模块 / 751 导出);接入手册锁行同步;\nCLAUDE.md 动态表 own-test-cases 随报告更新。静态整轮 28/28。\n运行态在本提交后重跑回绑——health 端点实现已换,必须验。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/bfc3ef5a82a201c649688dd76b3ed22704560888","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-18T16:08:02-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/dispatcher.ts","apps/api-fastify/src/routes/health.ts","apps/api-nestjs/src/dispatcher.ts","apps/api-nestjs/src/health/health.controller.ts","docs/planning/内核退回pin立项-2026-09-18.md","docs/product-extension-guide.md","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/health.test.ts","packages/contracts/src/health.ts","scripts/check-dual-backend-parity.mjs","scripts/check-operations.mjs"]}],"total_commits":0,"head_commit":{"id":"001e16da960e9c44fcb2f943d149bb374c710e33","message":"chore(reports): health 采纳的四十一份三级证据 回绑 @ fc147d3,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 fc147d3(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n四十一份 reports/*.latest.json 全部 clean 绑定(gitSha=fc147d3、worktreeDirty:false):\n静态 28 + 运行态 13。静态整轮 28/28(退出码 0);运行态 735 tests / 行为矩阵 204/204 /\n87 项指标零违规。\n\nhealth 换成内核 buildHealthResponse 后**行为中性**:四处调用点、两个 dispatcher 的\n200/503 映射、NestJS 的 ServiceUnavailableException、依赖弹性用例(14 故障 + 14 恢复 +\n半开 4 + 延迟 4)全过。开工时列的三个风险点(响应形状、503 映射、超时语义)一个都未兑现。\n\n用例数 733 → 735(health 3 例改写为 5 例,覆盖面上升);地板 683 未动——地板只在全绿后用\n--update-baseline 收紧,不随一次上浮改。\n\n本批跑了两轮 runtime,第一轮红在末尾的 docs-truth 复核(动态数字仍写 733)。\n**这是结构性自指,不是缺陷**:任何改变用例数的批次,第一轮 runtime 必然在自己最后一步的\n数字校验上失败——数字只有跑完才知道,而跑的最后一步要校验数字。已把「改动影响用例数时\n预期两轮 runtime」记进 fc147d3 的提交信息,与「先提交再跑」是同一类流程教训\n(后者本批已用上,第一轮即 clean 绑定)。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/001e16da960e9c44fcb2f943d149bb374c710e33","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-18T16:31:29-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/auth-startup.latest.json","reports/capacity-envelope.latest.json","reports/contract-consumers.latest.json","reports/db-credential-separation.latest.json","reports/dependency-resilience.latest.json","reports/docs-truth.latest.json","reports/dual-backend-behavior.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/multi-instance.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance-runtime.latest.json","reports/product-acceptance.latest.json","reports/product-extension-runtime.latest.json","reports/product-migrations-runtime.latest.json","reports/product-migrations.latest.json","reports/product-sql-runtime.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89257,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-19T06:55:46+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"}}...
|
push
|
2
|
8
|
1789774384
|
1789774415
|
0
|
1789774292
|
1789774421
|
|
|
0
|
Edit
Delete
|
|
24178
|
chore(reports): realtime 依赖登记的二十八份静态证据 回绑 @ 5f3807 chore(reports): realtime 依赖登记的二十八份静态证据 回绑 @ 5f38077,刷新快照锚点...
|
76
|
5
|
governance.yml
|
88
|
5
|
0
|
refs/heads/main
|
2ef8d2fea20dcc03a7397ed3fc71312b675a70d9
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"001e16da960e9c44fcb2f943d149bb374c710e33","after":"2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/001e16da960e9c44fcb2f943d149bb374c710e33...2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","commits":[{"id":"2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","message":"chore(reports): realtime 依赖登记的二十八份静态证据 回绑 @ 5f38077,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 5f38077(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=5f38077、worktreeDirty:false)。\n静态整轮 28/28(退出码 0)。\n\n未跑运行态:本批只动立项文档,未改任何运行代码,runtime 证据仍绑 fc147d3\n(735 / 204-204 / 零违规)且未失效。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","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-18T16:35:01-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"5f38077645e9e39fc5b2b1a44387d3aeb72b1b5f","message":"docs(planning): 登记 realtime 双向分歧与 RequestContext 贯通这个共同前置\n\n接 realtime 时发现它不该现在做,原因值得单独记:\n\n**realtime 是双向分歧,不是本仓落后。** makeEnvelope 两边各自演进过——\n 本仓:resourceRefs 支持(resourceRefsFromData + 去重),与 subscription 同一条扩展协议\n 框架:options.context → envelope.context { requestId, traceId }(0.6.0 上下文贯通)\n另有 realtimeChannelForDatabase(按 Redis 逻辑库分区频道,13 个消费者,正是此前 runtime\n长期假红的根因所在)是本仓独有。整份转发会丢掉本仓那半,故按迁移手册 §6 走分歧账本。\n\n**更要紧的是它暴露了一个共同前置。** 框架那一半依赖 RequestContext 从 HTTP 层贯通,\n而这正是 B2c-1 明确推迟的 ALS 工作。两个挂起批次因此指向同一件没做的事:\n\n B2c-2 平台端口接线 —— decide() 入参是 RequestContext。服务层拿不到 HTTP 头,\n 只能合成 requestId:对权限判定无妨(端口只用 tenantId + actorId + action),\n 但**审计关联失效**。这就是 B2c-2 只接权限端口、不接审计端口的原因。\n B3″ realtime —— envelope.context 取自 propagatedContextOf(RequestContext)。\n 没有真实上下文,这个字段要么缺席、要么填合成值——**后者比缺席更糟**,\n 它让「信封可追溯」成为假象。\n\n本仓**已有 AsyncLocalStorage**(两后端各一份 rls-context.ts 用于 RLS 租户绑定),\n不是从零起;缺的是把 buildRequestContext 的产物在请求入口塞进 ALS 并让下游取用。\n框架 0.4.0 / 0.6.0 的两后端接线可直接对照。\n\n登记它而不是顺手做:贯通请求上下文会改变两后端的请求入口与队列载荷(0.6.0 的\noutboxContext 把 context 带进 outbox 行),属跨切面改动,应当独立批次并配完整 runtime\n验证,不该作为别的批次的副产品。\n\n本批只动文档,静态 28/28,未改运行代码。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/5f38077645e9e39fc5b2b1a44387d3aeb72b1b5f","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-18T16:33:37-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/planning/内核退回pin立项-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","message":"chore(reports): realtime 依赖登记的二十八份静态证据 回绑 @ 5f38077,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 5f38077(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=5f38077、worktreeDirty:false)。\n静态整轮 28/28(退出码 0)。\n\n未跑运行态:本批只动立项文档,未改任何运行代码,runtime 证据仍绑 fc147d3\n(735 / 204-204 / 零违规)且未失效。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","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-18T16:35:01-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89809,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-19T07:31:33+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"}}...
|
push
|
2
|
36
|
1789774506
|
1789774515
|
0
|
1789774505
|
1789774529
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24179
|
chore(reports): realtime 依赖登记的二十八份静态证据 回绑 @ 5f3807 chore(reports): realtime 依赖登记的二十八份静态证据 回绑 @ 5f38077,刷新快照锚点...
|
76
|
5
|
platform-governance.yml
|
89
|
5
|
0
|
refs/heads/main
|
2ef8d2fea20dcc03a7397ed3fc71312b675a70d9
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"001e16da960e9c44fcb2f943d149bb374c710e33","after":"2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/001e16da960e9c44fcb2f943d149bb374c710e33...2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","commits":[{"id":"2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","message":"chore(reports): realtime 依赖登记的二十八份静态证据 回绑 @ 5f38077,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 5f38077(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=5f38077、worktreeDirty:false)。\n静态整轮 28/28(退出码 0)。\n\n未跑运行态:本批只动立项文档,未改任何运行代码,runtime 证据仍绑 fc147d3\n(735 / 204-204 / 零违规)且未失效。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","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-18T16:35:01-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"5f38077645e9e39fc5b2b1a44387d3aeb72b1b5f","message":"docs(planning): 登记 realtime 双向分歧与 RequestContext 贯通这个共同前置\n\n接 realtime 时发现它不该现在做,原因值得单独记:\n\n**realtime 是双向分歧,不是本仓落后。** makeEnvelope 两边各自演进过——\n 本仓:resourceRefs 支持(resourceRefsFromData + 去重),与 subscription 同一条扩展协议\n 框架:options.context → envelope.context { requestId, traceId }(0.6.0 上下文贯通)\n另有 realtimeChannelForDatabase(按 Redis 逻辑库分区频道,13 个消费者,正是此前 runtime\n长期假红的根因所在)是本仓独有。整份转发会丢掉本仓那半,故按迁移手册 §6 走分歧账本。\n\n**更要紧的是它暴露了一个共同前置。** 框架那一半依赖 RequestContext 从 HTTP 层贯通,\n而这正是 B2c-1 明确推迟的 ALS 工作。两个挂起批次因此指向同一件没做的事:\n\n B2c-2 平台端口接线 —— decide() 入参是 RequestContext。服务层拿不到 HTTP 头,\n 只能合成 requestId:对权限判定无妨(端口只用 tenantId + actorId + action),\n 但**审计关联失效**。这就是 B2c-2 只接权限端口、不接审计端口的原因。\n B3″ realtime —— envelope.context 取自 propagatedContextOf(RequestContext)。\n 没有真实上下文,这个字段要么缺席、要么填合成值——**后者比缺席更糟**,\n 它让「信封可追溯」成为假象。\n\n本仓**已有 AsyncLocalStorage**(两后端各一份 rls-context.ts 用于 RLS 租户绑定),\n不是从零起;缺的是把 buildRequestContext 的产物在请求入口塞进 ALS 并让下游取用。\n框架 0.4.0 / 0.6.0 的两后端接线可直接对照。\n\n登记它而不是顺手做:贯通请求上下文会改变两后端的请求入口与队列载荷(0.6.0 的\noutboxContext 把 context 带进 outbox 行),属跨切面改动,应当独立批次并配完整 runtime\n验证,不该作为别的批次的副产品。\n\n本批只动文档,静态 28/28,未改运行代码。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/5f38077645e9e39fc5b2b1a44387d3aeb72b1b5f","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-18T16:33:37-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/planning/内核退回pin立项-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","message":"chore(reports): realtime 依赖登记的二十八份静态证据 回绑 @ 5f38077,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 5f38077(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=5f38077、worktreeDirty:false)。\n静态整轮 28/28(退出码 0)。\n\n未跑运行态:本批只动立项文档,未改任何运行代码,runtime 证据仍绑 fc147d3\n(735 / 204-204 / 零违规)且未失效。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","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-18T16:35:01-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"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":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":89809,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-19T07:31:33+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"}}...
|
push
|
2
|
8
|
1789774515
|
1789774524
|
0
|
1789774506
|
1789774530
|
|
|
0
|
Edit
Delete
|