|
24180
|
feat(治理): check:pins 扩到第三方依赖——发布包严格,应用侧走存量基线
|
116
|
5
|
platform.yml
|
147
|
5
|
0
|
refs/heads/main
|
63ff31f256e45886e0a52d5e819ef7b3730eba9b
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"748492c2a1013dbf03b6234f2a85dea73af7e9e6","after":"63ff31f256e45886e0a52d5e819ef7b3730eba9b","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/748492c2a1013dbf03b6234f2a85dea73af7e9e6...63ff31f256e45886e0a52d5e819ef7b3730eba9b","commits":[{"id":"63ff31f256e45886e0a52d5e819ef7b3730eba9b","message":"feat(治理): check:pins 扩到第三方依赖——发布包严格,应用侧走存量基线\n\n此前 check:pins 只管 @juhai/*,第三方 pin 完全不看。量了一下:256 个第三方依赖声明里\n218 个(85%)是 range。直接全判红等于让门禁第一天就红 218 处;全量 pin 则要改 218 处并\n重建 runtime / identity 两个 lockfile、触碰整棵依赖树——而 lockfile + --frozen-lockfile\n已经保证了日常构建可复现,range 的真实风险只是有人跑 pnpm update 时意外升级。\n目录负责人裁决:分层。\n\n三层判据:\n\n 1. @juhai/* 一律 exact / workspace:*(原有)\n 2. 对外发布包 第三方依赖也一律 exact。判定依据是 publishConfig 的存在——它是「这个包会被\n 发出去」的机器特征,比硬编码包目录好:新增发布包自动纳入,不必记得回来改门禁。\n 消费者装到的是发布时解析的那棵树,range 在他们那边会解析成别的版本。\n 3. 其余(应用) 存量 209 处登记在 governance/pins-baseline.json,登记外的新增必须 exact。\n 基线**只减不增**:登记项对应的依赖删了条目也要删,否则 BASELINE_STALE 判红。\n\n配套把 clients 三包的 9 处 devDeps pin 掉(@types/node 22.19.20 / typescript 5.9.3 /\nvitest 2.1.9,取自 lockfile 已解析的版本)。lockfile 只动了 9 行 specifier,\n**resolution 变更 0 行**,依赖树没变;pnpm install --frozen-lockfile 复验通过。\n\n**一处会炸下游的设计,改掉了:** 初版把「无基线」当空基线 fail closed。但 @juhai/governance\n是发布给消费者仓(HR / OS)的 CLI,他们跑 juhai-governance check:pins --require @juhai/contracts\n时仓里没有本仓基线,按空基线判会把他们全部第三方 range 判红——一次判据扩展直接炸掉所有下游。\n改为:无基线则第三方层不启用,且**在输出里明说**(不静默关闭)。测试钉住了这条契约。\n\n本机实测:本仓 37 处 @juhai/* + 第三方 256 处(47 exact,含发布包 17 处严格;209 处在基线内)\nexit 0;模拟消费者仓(无基线)exit 0 且第三方层未启用;四种违规场景(发布包 range、\n基线外新增、基线腐烂、无基线)行为逐一验过,退出码直取、不经管道。测试 10 → 17 例。\n\ngovernance/README.md 同步(它随包发布,判据表必须与实现一致);CLAUDE.md 纪律 4 同步。\npins-baseline.json 不进 governance 包的 files——它是本仓的存量账,对消费者无意义。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/63ff31f256e45886e0a52d5e819ef7b3730eba9b","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:37:14-07:00","added":["governance/pins-baseline.json"],"removed":[],"modified":["CLAUDE.md","governance/README.md","governance/check-pins.mjs","governance/test/check-pins.test.mjs","runtime/clients/fact/package.json","runtime/clients/identity/package.json","runtime/clients/permission/package.json","runtime/pnpm-lock.yaml"]},{"id":"8939e8fc35a7c42d4957e2297c8dcb8eb58cb663","message":"chore(reports): check:fixtures 回绑 @ 748492c —— 补上本会话四轮夹具增量欠的那一笔\n\nreports/fixtures.latest.json 此前绑在 7523bd0(17 套件 316 例),check:evidence 报 EVIDENCE_STALE:\n作用域内 14 个文件已变更。变更的大头是本会话四条加夹具的提交——1a1b37e(IM)、bdb662d(数据分析)、\n7a4b693(成本容量)、0b3dab6(Webhook)、4f36e22(注册中心)、4df190d(最后 9 条仅单测)。\n每轮提交信息里都写了「本次不回绑」,当时理由成立(工作树有并行会话 WIP,拿不到 worktreeDirty=false),\n但后续没人补,就成了欠账。\n\n回绑做法:在 企业控制面/.worktrees/rebind-fixtures 开 detached 干净检出(HEAD 748492c),\n把主检出的 node_modules 软链进去(软链不被 .gitignore 的 node_modules/ 目录规则匹配,故写进\n本地 info/exclude,不改仓内 .gitignore),build contracts 与七模块后跑 check:fixtures,\n确认 git status 为空再出报告,最后只把这一份 report 拷回主检出、按 pathspec 单独提交——\n主检出里并行会话另有 11 份报告在改,一份都没碰。\n\n结果:provenance gitSha=748492c、worktreeDirty=false,17 套件 458 例 0 失败 0 不可用\n(此前 316 例,+142 例即本会话四轮的夹具增量)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/8939e8fc35a7c42d4957e2297c8dcb8eb58cb663","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:25-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.json"]}],"total_commits":0,"head_commit":{"id":"63ff31f256e45886e0a52d5e819ef7b3730eba9b","message":"feat(治理): check:pins 扩到第三方依赖——发布包严格,应用侧走存量基线\n\n此前 check:pins 只管 @juhai/*,第三方 pin 完全不看。量了一下:256 个第三方依赖声明里\n218 个(85%)是 range。直接全判红等于让门禁第一天就红 218 处;全量 pin 则要改 218 处并\n重建 runtime / identity 两个 lockfile、触碰整棵依赖树——而 lockfile + --frozen-lockfile\n已经保证了日常构建可复现,range 的真实风险只是有人跑 pnpm update 时意外升级。\n目录负责人裁决:分层。\n\n三层判据:\n\n 1. @juhai/* 一律 exact / workspace:*(原有)\n 2. 对外发布包 第三方依赖也一律 exact。判定依据是 publishConfig 的存在——它是「这个包会被\n 发出去」的机器特征,比硬编码包目录好:新增发布包自动纳入,不必记得回来改门禁。\n 消费者装到的是发布时解析的那棵树,range 在他们那边会解析成别的版本。\n 3. 其余(应用) 存量 209 处登记在 governance/pins-baseline.json,登记外的新增必须 exact。\n 基线**只减不增**:登记项对应的依赖删了条目也要删,否则 BASELINE_STALE 判红。\n\n配套把 clients 三包的 9 处 devDeps pin 掉(@types/node 22.19.20 / typescript 5.9.3 /\nvitest 2.1.9,取自 lockfile 已解析的版本)。lockfile 只动了 9 行 specifier,\n**resolution 变更 0 行**,依赖树没变;pnpm install --frozen-lockfile 复验通过。\n\n**一处会炸下游的设计,改掉了:** 初版把「无基线」当空基线 fail closed。但 @juhai/governance\n是发布给消费者仓(HR / OS)的 CLI,他们跑 juhai-governance check:pins --require @juhai/contracts\n时仓里没有本仓基线,按空基线判会把他们全部第三方 range 判红——一次判据扩展直接炸掉所有下游。\n改为:无基线则第三方层不启用,且**在输出里明说**(不静默关闭)。测试钉住了这条契约。\n\n本机实测:本仓 37 处 @juhai/* + 第三方 256 处(47 exact,含发布包 17 处严格;209 处在基线内)\nexit 0;模拟消费者仓(无基线)exit 0 且第三方层未启用;四种违规场景(发布包 range、\n基线外新增、基线腐烂、无基线)行为逐一验过,退出码直取、不经管道。测试 10 → 17 例。\n\ngovernance/README.md 同步(它随包发布,判据表必须与实现一致);CLAUDE.md 纪律 4 同步。\npins-baseline.json 不进 governance 包的 files——它是本仓的存量账,对消费者无意义。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/63ff31f256e45886e0a52d5e819ef7b3730eba9b","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:37:14-07:00","added":["governance/pins-baseline.json"],"removed":[],"modified":["CLAUDE.md","governance/README.md","governance/check-pins.mjs","governance/test/check-pins.test.mjs","runtime/clients/fact/package.json","runtime/clients/identity/package.json","runtime/clients/permission/package.json","runtime/pnpm-lock.yaml"]},"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":20979,"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:28: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
|
1789774677
|
1789774718
|
0
|
1789774677
|
1789774747
|
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
|
|
24181
|
fix(workbench): 客户端独有的状态不得进首帧——修掉两处水合不一致(D-12)
|
116
|
5
|
platform.yml
|
148
|
5
|
0
|
refs/heads/main
|
59265a6ffc4d0d4ffda878fd880a5d5a308720bb
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"63ff31f256e45886e0a52d5e819ef7b3730eba9b","after":"59265a6ffc4d0d4ffda878fd880a5d5a308720bb","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/63ff31f256e45886e0a52d5e819ef7b3730eba9b...59265a6ffc4d0d4ffda878fd880a5d5a308720bb","commits":[{"id":"59265a6ffc4d0d4ffda878fd880a5d5a308720bb","message":"fix(workbench): 客户端独有的状态不得进首帧——修掉两处水合不一致(D-12)\n\nD-12 登记的是顶栏那一处,查下来是两处同病,其中一处每次打开登录页都在报:\n\n- `app-nav.tsx` 直接渲染会话里的 subject。工作台是 output: \"export\",HTML 在构建期定死,\n 里面不可能有会话,而首帧客户端已经有了。只在 sessionStorage 有令牌时触发。\n- `login/page.tsx` 的 `typeof window === \"undefined\" ? null : readOidcConfig(...)`:服务端恒为\n null(渲染「缺配置」),浏览器算得出配置(渲染登录按钮),**必然**对不上,与有没有会话无关。\n 同源托管记录 §4.3 记的那个「缺配置」就是产物原文,客户端随后整片换掉了。\n\n定位用的是对照实验而不是读代码猜:清空 sessionStorage 重载 / 不报错,植入会话再重载即报;\n重载 /login/ 在无会话时也报。\n\n修法统一为新增的 useMounted():客户端独有的状态(sessionStorage 会话、window.location)\n等挂载之后再渲染,首帧与构建期产物逐字一致。没有复用 store 的 hydrated 标志——那面旗由\nProviders 的 effect 翻,时序上依赖别的组件;组件自己的 useState(false) 在水合那一帧恒为 false。\n\n登录页因此多出第三种状态「读取中」。这与本仓一贯口径一致:配置还没读到时,既不能说\n「缺配置」也不能说「可登录」。\n\n验证:workbench typecheck / lint 通过;next build 六路由导出;重载 /login/ 与植入会话硬跳转 /\n均不再新增 hydration 报错。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/59265a6ffc4d0d4ffda878fd880a5d5a308720bb","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:41:05-07:00","added":["runtime/apps/workbench/src/lib/use-mounted.ts"],"removed":[],"modified":["runtime/apps/workbench/src/app/login/page.tsx","runtime/apps/workbench/src/components/app-nav.tsx"]}],"total_commits":0,"head_commit":{"id":"59265a6ffc4d0d4ffda878fd880a5d5a308720bb","message":"fix(workbench): 客户端独有的状态不得进首帧——修掉两处水合不一致(D-12)\n\nD-12 登记的是顶栏那一处,查下来是两处同病,其中一处每次打开登录页都在报:\n\n- `app-nav.tsx` 直接渲染会话里的 subject。工作台是 output: \"export\",HTML 在构建期定死,\n 里面不可能有会话,而首帧客户端已经有了。只在 sessionStorage 有令牌时触发。\n- `login/page.tsx` 的 `typeof window === \"undefined\" ? null : readOidcConfig(...)`:服务端恒为\n null(渲染「缺配置」),浏览器算得出配置(渲染登录按钮),**必然**对不上,与有没有会话无关。\n 同源托管记录 §4.3 记的那个「缺配置」就是产物原文,客户端随后整片换掉了。\n\n定位用的是对照实验而不是读代码猜:清空 sessionStorage 重载 / 不报错,植入会话再重载即报;\n重载 /login/ 在无会话时也报。\n\n修法统一为新增的 useMounted():客户端独有的状态(sessionStorage 会话、window.location)\n等挂载之后再渲染,首帧与构建期产物逐字一致。没有复用 store 的 hydrated 标志——那面旗由\nProviders 的 effect 翻,时序上依赖别的组件;组件自己的 useState(false) 在水合那一帧恒为 false。\n\n登录页因此多出第三种状态「读取中」。这与本仓一贯口径一致:配置还没读到时,既不能说\n「缺配置」也不能说「可登录」。\n\n验证:workbench typecheck / lint 通过;next build 六路由导出;重载 /login/ 与植入会话硬跳转 /\n均不再新增 hydration 报错。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/59265a6ffc4d0d4ffda878fd880a5d5a308720bb","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:41:05-07:00","added":["runtime/apps/workbench/src/lib/use-mounted.ts"],"removed":[],"modified":["runtime/apps/workbench/src/app/login/page.tsx","runtime/apps/workbench/src/components/app-nav.tsx"]},"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":21164,"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:37: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
|
2
|
30
|
1789774883
|
1789774923
|
0
|
1789774882
|
1789775005
|
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
|
|
24182
|
docs(治理): 总架构 §1 表前五项复核改记 2026-09-18,图 1 / 图 2 图注同 docs(治理): 总架构 §1 表前五项复核改记 2026-09-18,图 1 / 图 2 图注同步对齐...
|
117
|
5
|
governance.yml
|
73
|
5
|
0
|
refs/heads/main
|
b0c8f85aaf3e0d5d8581c460a2bebbe2c14e9a85
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"8e5cc87f027dab462c6f3f5bf8f0e42894778016","after":"b0c8f85aaf3e0d5d8581c460a2bebbe2c14e9a85","compare_url":"https://gitea.g-hi.com/luoanwu/platform-governance/compare/8e5cc87f027dab462c6f3f5bf8f0e42894778016...b0c8f85aaf3e0d5d8581c460a2bebbe2c14e9a85","commits":[{"id":"b0c8f85aaf3e0d5d8581c460a2bebbe2c14e9a85","message":"docs(治理): 总架构 §1 表前五项复核改记 2026-09-18,图 1 / 图 2 图注同步对齐\n\n按原复算方式对活契约与 runtime/modules.json 重读平台项目 21 / 裁决 39 / 事实 11 /\n实体 168 / 运行时模块 7 五项,取值与 09-17 完全一致,故观测时刻改记 2026-09-18,\n并在 §1 表下补一段复核记:复核是工作区内只读直读,未产出登记报告,证据只绑定本地\n工作区。两张图(图 1 五层与依赖方向、图 2 现存跨应用关系)的图注观测时刻一并改到\n09-18,与表对齐;§0 增补段补一句指向这次改记。\n\n未重跑的五项——派生仓分档、框架版本 L11 / L12、docker ps、文档口径一致性——\n保持 2026-09-17 不动。本轮复跑 check-workspace-consistency.mjs 仍只有 L9 一条\n(COMPOSE_PROJECT_COLLISION,7 个仓共用 api-nestjs project 名),与文中写法一致。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/b0c8f85aaf3e0d5d8581c460a2bebbe2c14e9a85","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:34:29-07:00","added":[],"removed":[],"modified":["平台治理/企业应用群总架构-2026-09-17.md","平台治理/基础/分层模型-图1-五层与依赖方向.svg","平台治理/基础/分层模型-图2-现存跨应用关系.svg"]}],"total_commits":0,"head_commit":{"id":"b0c8f85aaf3e0d5d8581c460a2bebbe2c14e9a85","message":"docs(治理): 总架构 §1 表前五项复核改记 2026-09-18,图 1 / 图 2 图注同步对齐\n\n按原复算方式对活契约与 runtime/modules.json 重读平台项目 21 / 裁决 39 / 事实 11 /\n实体 168 / 运行时模块 7 五项,取值与 09-17 完全一致,故观测时刻改记 2026-09-18,\n并在 §1 表下补一段复核记:复核是工作区内只读直读,未产出登记报告,证据只绑定本地\n工作区。两张图(图 1 五层与依赖方向、图 2 现存跨应用关系)的图注观测时刻一并改到\n09-18,与表对齐;§0 增补段补一句指向这次改记。\n\n未重跑的五项——派生仓分档、框架版本 L11 / L12、docker ps、文档口径一致性——\n保持 2026-09-17 不动。本轮复跑 check-workspace-consistency.mjs 仍只有 L9 一条\n(COMPOSE_PROJECT_COLLISION,7 个仓共用 api-nestjs project 名),与文中写法一致。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/b0c8f85aaf3e0d5d8581c460a2bebbe2c14e9a85","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:34:29-07:00","added":[],"removed":[],"modified":["平台治理/企业应用群总架构-2026-09-17.md","平台治理/基础/分层模型-图1-五层与依赖方向.svg","平台治理/基础/分层模型-图2-现存跨应用关系.svg"]},"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":10526,"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: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
|
1
|
4
|
1789774923
|
1789774938
|
0
|
1789774905
|
1789774938
|
|
|
0
|
Edit
Delete
|
|
24183
|
chore(reports): check:module-imports 回绑 @ 59265a6
|
116
|
5
|
platform.yml
|
149
|
5
|
0
|
refs/heads/main
|
ac4f5b8ef04795013b51bcb9bb6d4c353e091311
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"59265a6ffc4d0d4ffda878fd880a5d5a308720bb","after":"ac4f5b8ef04795013b51bcb9bb6d4c353e091311","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/59265a6ffc4d0d4ffda878fd880a5d5a308720bb...ac4f5b8ef04795013b51bcb9bb6d4c353e091311","commits":[{"id":"ac4f5b8ef04795013b51bcb9bb6d4c353e091311","message":"chore(reports): check:module-imports 回绑 @ 59265a6\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,绑 59265a6 /\nworktreeDirty=false,扫描 397 个源文件、0 处违规。\n\n上一次绑 557a95c,之后作用域内有两批改动:63ff31f 把 clients 三包的 devDeps pin 到 exact,\n59265a6 给 workbench 加了客户端状态 hook。397 = 上次的 396 + 新增的\nruntime/apps/workbench/src/lib/use-mounted.ts,数字对得上。\n\n这份报告此前卡了一轮:它的证据作用域含 runtime/apps,而并行会话正在改 workbench,\nrebind 按判据拒绝回绑(作用域内有未提交输入)。等其提交后抢的窗口。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/ac4f5b8ef04795013b51bcb9bb6d4c353e091311","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:41:33-07:00","added":[],"removed":[],"modified":["reports/module-imports.latest.json"]}],"total_commits":0,"head_commit":{"id":"ac4f5b8ef04795013b51bcb9bb6d4c353e091311","message":"chore(reports): check:module-imports 回绑 @ 59265a6\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,绑 59265a6 /\nworktreeDirty=false,扫描 397 个源文件、0 处违规。\n\n上一次绑 557a95c,之后作用域内有两批改动:63ff31f 把 clients 三包的 devDeps pin 到 exact,\n59265a6 给 workbench 加了客户端状态 hook。397 = 上次的 396 + 新增的\nruntime/apps/workbench/src/lib/use-mounted.ts,数字对得上。\n\n这份报告此前卡了一轮:它的证据作用域含 runtime/apps,而并行会话正在改 workbench,\nrebind 按判据拒绝回绑(作用域内有未提交输入)。等其提交后抢的窗口。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/ac4f5b8ef04795013b51bcb9bb6d4c353e091311","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:41:33-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":21171,"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:41:22+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
|
1789774924
|
0
|
1789774905
|
1789774924
|
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
|
|
24184
|
docs(部署): 记录补 §15——D-12 修掉(实为两处),以及重建产物撞出的两个部署坑
|
116
|
5
|
platform.yml
|
150
|
5
|
0
|
refs/heads/main
|
67e81931c6da187ea61adff37ad74a4d9b672e8e
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"ac4f5b8ef04795013b51bcb9bb6d4c353e091311","after":"67e81931c6da187ea61adff37ad74a4d9b672e8e","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/ac4f5b8ef04795013b51bcb9bb6d4c353e091311...67e81931c6da187ea61adff37ad74a4d9b672e8e","commits":[{"id":"67e81931c6da187ea61adff37ad74a4d9b672e8e","message":"docs(部署): 记录补 §15——D-12 修掉(实为两处),以及重建产物撞出的两个部署坑\n\n实现提交 59265a6。本节记三件事:\n\n一、D-12 登记的是顶栏,实际是两处同病,第二处(登录页的 typeof window 分支)每次打开都在报、\n与有没有会话无关。它还改写了一条既有结论:同源托管记录 §4.3 记的那个「缺配置」就是产物原文,\n客户端随后整片换掉了——当时看到的渲染没错,但那是水合失败后重渲染的结果,不是水合成功。\n定位用对照实验(清空会话重载不报、植入会话即报),不是读代码猜。\n\n二、重建静态产物撞出两个坑,都会让人误判成「发好了」:\n① next build 把 .env.local 烤进产物——第一次重建后 out/ 里出现 localhost:3098 与工作台\n clientId,而这份产物是给网关同源托管的,API 基地址本该为空。在有 .env.local 的开发机上\n 直接 build,等于把 dev 配置发到网关。\n② next build 删目录再造 out/,inode 变了,caddy 的绑定挂载失效、/srv/workbench 变空,\n 而网关照样回 200——发的是 25 字节占位响应。「200 且有内容」不等于「发的是你刚建的产物」。\n force-recreate 后恢复。时序上坑 ① 那份产物从未真正对外发过,因为坑 ② 同刻已让挂载失效。\n\n三、ui-acceptance 因改动落在 runtime/apps 按作用域过期,Owner 定:先提交、过期登记在案、\n重跑排到下一轮(D-14,与 D-13 同批)。在那之前该报告不覆盖本次工作台改动。\n\n同轮把已修的 D-12 从 §14.5 未闭环表摘出并指向 §15。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/67e81931c6da187ea61adff37ad74a4d9b672e8e","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:41:54-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"67e81931c6da187ea61adff37ad74a4d9b672e8e","message":"docs(部署): 记录补 §15——D-12 修掉(实为两处),以及重建产物撞出的两个部署坑\n\n实现提交 59265a6。本节记三件事:\n\n一、D-12 登记的是顶栏,实际是两处同病,第二处(登录页的 typeof window 分支)每次打开都在报、\n与有没有会话无关。它还改写了一条既有结论:同源托管记录 §4.3 记的那个「缺配置」就是产物原文,\n客户端随后整片换掉了——当时看到的渲染没错,但那是水合失败后重渲染的结果,不是水合成功。\n定位用对照实验(清空会话重载不报、植入会话即报),不是读代码猜。\n\n二、重建静态产物撞出两个坑,都会让人误判成「发好了」:\n① next build 把 .env.local 烤进产物——第一次重建后 out/ 里出现 localhost:3098 与工作台\n clientId,而这份产物是给网关同源托管的,API 基地址本该为空。在有 .env.local 的开发机上\n 直接 build,等于把 dev 配置发到网关。\n② next build 删目录再造 out/,inode 变了,caddy 的绑定挂载失效、/srv/workbench 变空,\n 而网关照样回 200——发的是 25 字节占位响应。「200 且有内容」不等于「发的是你刚建的产物」。\n force-recreate 后恢复。时序上坑 ① 那份产物从未真正对外发过,因为坑 ② 同刻已让挂载失效。\n\n三、ui-acceptance 因改动落在 runtime/apps 按作用域过期,Owner 定:先提交、过期登记在案、\n重跑排到下一轮(D-14,与 D-13 同批)。在那之前该报告不覆盖本次工作台改动。\n\n同轮把已修的 D-12 从 §14.5 未闭环表摘出并指向 §15。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/67e81931c6da187ea61adff37ad74a4d9b672e8e","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:41:54-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":21174,"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:41:45+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
|
1789774949
|
1789774987
|
0
|
1789774924
|
1789775032
|
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
|
|
24185
|
chore(release): 三包推到 1.0.0-rc.5——pins 三层判据随包出去,fac chore(release): 三包推到 1.0.0-rc.5——pins 三层判据随包出去,fact-pii 有意留在仓内...
|
116
|
5
|
platform.yml
|
151
|
5
|
0
|
refs/heads/main
|
cf05344e117a84fedf092613be5fc13b7a07072b
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"67e81931c6da187ea61adff37ad74a4d9b672e8e","after":"cf05344e117a84fedf092613be5fc13b7a07072b","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/67e81931c6da187ea61adff37ad74a4d9b672e8e...cf05344e117a84fedf092613be5fc13b7a07072b","commits":[{"id":"cf05344e117a84fedf092613be5fc13b7a07072b","message":"chore(release): 三包推到 1.0.0-rc.5——pins 三层判据随包出去,fact-pii 有意留在仓内\n\n动因:check:pins 的三层判据(63ff31f)还不在任何已发布版本里,而 @juhai/governance 的\nrc.0—rc.4 已全部被占用,按 G-12 的边界只能往前发下一个 RC。\n\n**发布物里有什么、没有什么,说清楚免得下一个人误读:** check-pins.mjs 在 governance 包的\nfiles 里,所以三层判据随包出去,消费者仓跑 juhai-governance check:pins 会拿到新判据\n(他们没有 pins-baseline.json,第三方层不启用,行为与 rc.4 一致——这是设计好的向后兼容)。\n而 check-fact-pii.mjs 与 fact-pii-rules.json **有意不进 files**:它扫的是\ncontracts/schemas/facts/ 与 contracts/candidates/facts/,消费者仓根本没有这两个目录,\n发过去是道跑不起来的门禁。它属于本轮源码,但不是本轮发布物的一部分。\n\n自 rc.4 源 557a95c 起的随车内容(比 rc.4 那趟小得多):\n contracts 14 文件 / 6 提交(7 个代码文件,三个域的 fixture-evaluator 与其单测)\n governance 10 文件 / 3 提交(两道新门禁 + 夹具覆盖度算法入文档)\n runtime/clients/fact 1 文件 / 1 提交 —— **只有 package.json,零内容变更,纯跟车**\n\n通道:本地旁路(G-12 第四次使用)。2026-09-18 实测:GitHub Actions 最新 run 35404565689 仍\nfailure(两个 job failure、其余 skipped,计费停摆的典型形态),正道仍不可满足。\n\n**一处新情况:推送死锁已解开。** rc.4 那趟记的是「GitHub 镜像落后 237 条、因分支保护的\nrequired check 跑不起来而推不动」;本次实测镜像落后已降到 24 条,github/main 指向 54e6324,\n说明有人把提交推上去了。但 Actions 仍不启动,所以正道仍差这一半——计费恢复后即可直接走正道,\n不必再先解死锁。\n\n按 CL-5 打 tag packages-v1.0.0-rc.5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/cf05344e117a84fedf092613be5fc13b7a07072b","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:45:09-07:00","added":[],"removed":[],"modified":["contracts/package.json","governance/package.json","runtime/clients/fact/package.json"]},{"id":"ff80f7e1b91b7fb012f0488736bce79b33db3ad5","message":"docs(记录): 一个会话的契约包入参硬化与证据收口——重点是四次自我更正\n\n把散在提交信息与开发计划登记行里的结论汇到一处。写的是单个会话的范围,不代为总结\n同日并行会话在九个域做的同类工作;凡带数字的当前状态一律标注为落盘时点快照。\n\n四次更正里三次是判断错了、一次是方法缺了一步:\n\n1. 注册中心那套被放弃是对的,且不是风格之争。我当时报的「远端那版大部分相当,唯一\n 差异是原因码命名」是靠读代码比对得出的,后被 7523bd0 的双向交叉实测推翻——被放弃\n 那套有 4 个实缺陷,其中一条是它自己的注释抱怨「同一摘要两种写法等于两个身份」,\n 却只在入口拒大写、升级比较那条路上没修完。整个会话的方法论是先实测再下结论,\n 对自己的产物我没照做。\n2. module-imports 那次回绑是多余的,已撤回未提交。判据应为「这份报告现在是否被判\n 过期」,而不是「作用域是否干净」。\n3. 独立索引提交后必须 git reset 刷回共享索引,否则并行会话下次从索引提交会把已提交\n 改动带回去——本会话实际发生过一次。\n4. 上述回退事件一度被我误判为对方回退,实为 --amend 改写 SHA 叠加 BSD grep 的 \\| 不是\n 或运算符导致核实命令恒返回 0。核实要用 grep -E,且以内容为准不以 SHA 为准。\n\n另记回绑需构建产物门禁的两条实操约束:检出必须落在工作区内(workspaceRelative 套件\n要向上找 workspace.json),以及该不该回绑看作用域内有无未提交输入而非全仓是否干净。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/ff80f7e1b91b7fb012f0488736bce79b33db3ad5","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:44:30-07:00","added":["docs/契约包入参硬化与证据收口-2026-09-18.md"],"removed":[],"modified":[]},{"id":"bf834ce6bcb9551474ff6a18abaa832f2302739f","message":"test(contracts): 配置与开关最大的一支规则不在门禁上——refresh 的六条原因码一条没钉,含明文密钥那条\n\n覆盖度探针对本套件的读数是「都没有 0 / 仅单测 0」,看上去已收口。但它按自述只变异夹具已有用例的\n字段,而 configuration-client.ts(167 行,LocalConfigurationClient 的 create / status / get / refresh)\n一条夹具用例都没有——整支规则从来不在它的统计口径里。两个规则文件零改动,只动夹具评估器。\n\n1. refresh() 的六条原因码一条都没钉:SNAPSHOT_FORMAT_INVALID、SNAPSHOT_VERSION_NOT_FORWARD、\n SNAPSHOT_NOT_APPROVED、SNAPSHOT_SCHEMA_INVALID、PLAINTEXT_SECRET_FORBIDDEN、SNAPSHOT_VERSION_STALE。\n 其中 PLAINTEXT_SECRET_FORBIDDEN 有两条到达路径——候选显式标注,以及键名命中密钥模式\n (normalizeSnapshot 把两者 OR 起来,apiToken 这样的键足以触发)——都在门禁之外。\n 新增 client 规则:按 active 建客户端再喂候选热更,APPLIED 为放行,否则返回 KEPT_LAST_KNOWN_GOOD\n 给出的 reasons;create 在两份快照都不可用时会抛,评估器收敛成 CONFIGURATION_UNAVAILABLE: 原因码,\n 而不是让整套夹具塌成 configurationError。\n\n2. snapshot 把 USE_LAST_KNOWN_GOOD 判成放行:候选被拒退回上一版与候选被采纳在夹具里是同一个结果,\n 实测「候选未批准」「候选含明文密钥」两种退回都判 ACCEPT。这一条改的是既有的、有意为之的口径\n (原评估器抬头写着「只有 USE_CANDIDATE / USE_LAST_KNOWN_GOOD 算放行」),理由是与同仓兄弟域对齐——\n 通知与 Webhook 的评估器写着「DUPLICATE / RETRY / DLQ / REJECT_REPLAY 都如实返回,因为它们在消费侧的\n 后果都不是『这次投递成功了』」。退回上一版同样不是「这次配置更新成功了」。\n 原 P04-falls-back-to-last-known-good 随之改名 N15-(门禁强制 id 前缀与 expect 一致)。\n\n一处明写不覆盖:refresh() 的 SNAPSHOT_VERSION_STALE 按构造不可达——active 建客户端时已过版本下限、\n候选又必须比 active 前进,合起来候选不可能低于下限;configuration-client.ts 抬头自己写明那是防御性\n补的一笔。N24 改钉「两份快照都不可用时 create 抛 CONFIGURATION_UNAVAILABLE:」这条真实出口。\n\n覆盖:夹具 18 → 28 例(正 4 / 反 24),定向测试 21 → 25 例,前一轮断言一条未改;\nfixture-coverage 稳定码 8 → 11,两档仍 0 / 0。变异探针(28 例 × 14 种脏值)4200 个变异点、0 处抛异常。\n\n未做(越界):分桶、发布状态机、kill switch 仍不在本仓,C13 按缺失模块完善清单仍是「裁决」;\nCatalog 登记未动(仍 module_e2、code_truth 指向工单仓 packages/configuration-client)。\n\n证据:pnpm --dir contracts build / typecheck 绿、check:generated 14 files / 12 schemas 无漂移、\nnode --test contracts/test/*.test.mjs 408/408、该套件夹具 28/28 失败 0。\n负向实测:把 N23(密钥键名那条)的声明改成 SNAPSHOT_NOT_APPROVED → 门禁 exit 1 并点名该例,还原后 exit 0。\n本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/bf834ce6bcb9551474ff6a18abaa832f2302739f","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:44:11-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","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"]}],"total_commits":0,"head_commit":{"id":"cf05344e117a84fedf092613be5fc13b7a07072b","message":"chore(release): 三包推到 1.0.0-rc.5——pins 三层判据随包出去,fact-pii 有意留在仓内\n\n动因:check:pins 的三层判据(63ff31f)还不在任何已发布版本里,而 @juhai/governance 的\nrc.0—rc.4 已全部被占用,按 G-12 的边界只能往前发下一个 RC。\n\n**发布物里有什么、没有什么,说清楚免得下一个人误读:** check-pins.mjs 在 governance 包的\nfiles 里,所以三层判据随包出去,消费者仓跑 juhai-governance check:pins 会拿到新判据\n(他们没有 pins-baseline.json,第三方层不启用,行为与 rc.4 一致——这是设计好的向后兼容)。\n而 check-fact-pii.mjs 与 fact-pii-rules.json **有意不进 files**:它扫的是\ncontracts/schemas/facts/ 与 contracts/candidates/facts/,消费者仓根本没有这两个目录,\n发过去是道跑不起来的门禁。它属于本轮源码,但不是本轮发布物的一部分。\n\n自 rc.4 源 557a95c 起的随车内容(比 rc.4 那趟小得多):\n contracts 14 文件 / 6 提交(7 个代码文件,三个域的 fixture-evaluator 与其单测)\n governance 10 文件 / 3 提交(两道新门禁 + 夹具覆盖度算法入文档)\n runtime/clients/fact 1 文件 / 1 提交 —— **只有 package.json,零内容变更,纯跟车**\n\n通道:本地旁路(G-12 第四次使用)。2026-09-18 实测:GitHub Actions 最新 run 35404565689 仍\nfailure(两个 job failure、其余 skipped,计费停摆的典型形态),正道仍不可满足。\n\n**一处新情况:推送死锁已解开。** rc.4 那趟记的是「GitHub 镜像落后 237 条、因分支保护的\nrequired check 跑不起来而推不动」;本次实测镜像落后已降到 24 条,github/main 指向 54e6324,\n说明有人把提交推上去了。但 Actions 仍不启动,所以正道仍差这一半——计费恢复后即可直接走正道,\n不必再先解死锁。\n\n按 CL-5 打 tag packages-v1.0.0-rc.5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/cf05344e117a84fedf092613be5fc13b7a07072b","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:45:09-07:00","added":[],"removed":[],"modified":["contracts/package.json","governance/package.json","runtime/clients/fact/package.json"]},"repository":{"id":116,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"enterprise-platform","full_name":"luoanwu/enterprise-platform","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":21200,"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:42: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
|
30
|
1789775182
|
1789775222
|
0
|
1789775181
|
1789775251
|
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
|
|
24186
|
docs(治理): 覆盖度探针读数为 0 不等于该域已收口——把最大的盲区和先做结构比对写进 CLA docs(治理): 覆盖度探针读数为 0 不等于该域已收口——把最大的盲区和先做结构比对写进 CLAUDE.md...
|
116
|
5
|
platform.yml
|
152
|
5
|
0
|
refs/heads/main
|
62c9d953569c6a146215a0e5511efc292e3f7740
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"cf05344e117a84fedf092613be5fc13b7a07072b","after":"62c9d953569c6a146215a0e5511efc292e3f7740","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/cf05344e117a84fedf092613be5fc13b7a07072b...62c9d953569c6a146215a0e5511efc292e3f7740","commits":[{"id":"62c9d953569c6a146215a0e5511efc292e3f7740","message":"docs(治理): 覆盖度探针读数为 0 不等于该域已收口——把最大的盲区和先做结构比对写进 CLAUDE.md\n\nfixture-coverage.mjs 的局限第一条「只变异夹具已有用例的字段」,实际后果比字面严重:\n整支规则若一条夹具用例都没有,它根本不进统计,读数会一直显示 0/0。只看读数会以为收完了。\n\n2026-09-18 四次命中同一形状,当时四个域的读数都是 0:\n collaboration-messaging plan 分不出 ADMIT 与 SKIP_DUPLICATE\n notification-webhook decideProviderOutcome 没有规则(退避与 Retry-After 钳制全在里面)\n application-contract-registry plan 把 BLOCKED 判成放行,且没有一条用例带合法快照\n configuration-feature-flags configuration-client.ts(167 行,本域最大的一支)整个文件没有规则\n\n补进去的是可操作的两步,不是结论:\n1. 先做结构比对再看读数——把 index.ts 导出的规则函数与 planner 的公开方法(plan / refresh / status /\n 域特有方法)列出来逐个对 *_FIXTURE_RULES,对不上的先补规则、补一条带合法快照的正例。\n2. 连带查评估器判据——写成 `\"reasons\" in r` 这类按字段存在与否判放行的,凡是不带 reasons 的非放行出口\n (BLOCKED / SKIP_DUPLICATE / DLQ / DUPLICATE_NOOP / USE_LAST_KNOWN_GOOD)都会被判成 ACCEPT,\n 一律改成按 kind 判定。\n并写明:补规则后覆盖度会先变差(新面第一次被走到),那是对的,把新暴露的原因码钉完再收工。\n\n顺带把同段的例数从 458 更正为 468(C13 那轮 +10),按实跑 check:fixtures 的输出校对过。\n\n证据:check:fixtures 17 套件 468 例 0 失败 0 不可用;fixture-coverage 15 套件两档仍全 0;\n工作区一致性门禁只剩既有的 L9 compose project 撞名,无新增 L4 / L13。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/62c9d953569c6a146215a0e5511efc292e3f7740","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:47:21-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"62c9d953569c6a146215a0e5511efc292e3f7740","message":"docs(治理): 覆盖度探针读数为 0 不等于该域已收口——把最大的盲区和先做结构比对写进 CLAUDE.md\n\nfixture-coverage.mjs 的局限第一条「只变异夹具已有用例的字段」,实际后果比字面严重:\n整支规则若一条夹具用例都没有,它根本不进统计,读数会一直显示 0/0。只看读数会以为收完了。\n\n2026-09-18 四次命中同一形状,当时四个域的读数都是 0:\n collaboration-messaging plan 分不出 ADMIT 与 SKIP_DUPLICATE\n notification-webhook decideProviderOutcome 没有规则(退避与 Retry-After 钳制全在里面)\n application-contract-registry plan 把 BLOCKED 判成放行,且没有一条用例带合法快照\n configuration-feature-flags configuration-client.ts(167 行,本域最大的一支)整个文件没有规则\n\n补进去的是可操作的两步,不是结论:\n1. 先做结构比对再看读数——把 index.ts 导出的规则函数与 planner 的公开方法(plan / refresh / status /\n 域特有方法)列出来逐个对 *_FIXTURE_RULES,对不上的先补规则、补一条带合法快照的正例。\n2. 连带查评估器判据——写成 `\"reasons\" in r` 这类按字段存在与否判放行的,凡是不带 reasons 的非放行出口\n (BLOCKED / SKIP_DUPLICATE / DLQ / DUPLICATE_NOOP / USE_LAST_KNOWN_GOOD)都会被判成 ACCEPT,\n 一律改成按 kind 判定。\n并写明:补规则后覆盖度会先变差(新面第一次被走到),那是对的,把新暴露的原因码钉完再收工。\n\n顺带把同段的例数从 458 更正为 468(C13 那轮 +10),按实跑 check:fixtures 的输出校对过。\n\n证据:check:fixtures 17 套件 468 例 0 失败 0 不可用;fixture-coverage 15 套件两档仍全 0;\n工作区一致性门禁只剩既有的 L9 compose project 撞名,无新增 L4 / L13。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/62c9d953569c6a146215a0e5511efc292e3f7740","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:47:21-07:00","added":[],"removed":[],"modified":["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":21284,"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:46:22+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
|
1789775278
|
1789775318
|
0
|
1789775276
|
1789775347
|
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
|
|
24187
|
feat(governance): 覆盖度探针自己查「整支规则没接进评估器」——那是它此前按设计看不 feat(governance): 覆盖度探针自己查「整支规则没接进评估器」——那是它此前按设计看不见的盲区...
|
116
|
5
|
platform.yml
|
153
|
5
|
0
|
refs/heads/main
|
e79e5f2b943a633299851dbc7709455247a415ef
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"62c9d953569c6a146215a0e5511efc292e3f7740","after":"e79e5f2b943a633299851dbc7709455247a415ef","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/62c9d953569c6a146215a0e5511efc292e3f7740...e79e5f2b943a633299851dbc7709455247a415ef","commits":[{"id":"e79e5f2b943a633299851dbc7709455247a415ef","message":"feat(governance): 覆盖度探针自己查「整支规则没接进评估器」——那是它此前按设计看不见的盲区\n\n上一条(62c9d95)把盲区与绕开它的两步写进了 CLAUDE.md,但那只是文档约束,人不比对就不会发现。\n本次把两项结构比对做进 governance/fixture-coverage.mjs:它们不依赖夹具,因而看得见「从没有用例的那一面」。\n\n1. 未接线列:导入域的 index.js,把导出的判定函数(assess|review|classify|select|decide|plan|preflight|\n evaluate 打头)与 planner 原型方法逐个对评估器源码里的引用,没被引用的报出来。\n2. !!! 行:评估器写成 `\"reasons\" in r ? … : []` 时提醒——该规则结果联合体里一旦出现不带 reasons 的\n 非放行出口(BLOCKED / SKIP_DUPLICATE / DLQ / DUPLICATE_NOOP / USE_LAST_KNOWN_GOOD)就会被静默判成 ACCEPT。\n\n对着 15 个真实套件跑,逮到两类误报,都已修,并写成用例钉住:\n- planner 多数经 createRuntimeX() 工厂到达,类名根本不出现在评估器里。按「类名没出现」判整支未接线会把\n 跨域流程、Webhook、public-file 等全报一遍。改成按「一个方法都没被调」判,并排除 status/get 这类\n 只读访问器与错误类(AiRouteRequestRejected / AuditRequestRejected 不是判定面)。\n- cost-capacity 与 notification-webhook 把旧写法 `\"reasons\" in d ? [...] : []` 抄在注释里当变更记录,\n 按原文匹配会把两个已经改对的域报成缺陷。改成先去注释再匹配。\n措辞也相应收敛:`!!!` 行现在说「今天未必已经出错,但联合体里一旦出现…就会被静默判成 ACCEPT」,\n而不是断言它已经错了——跨域流程那处就属于「今天正确、但脆」。\n\n新增 governance/test/fixture-coverage.test.mjs(3 例):该脚本此前是 governance/ 下唯一没有测试的。\n用临时自足域验三件事——只报没被调的方法、经工厂到达的类不报整支未接线、注释里的旧写法不报。\n\n当前读数(均未处理,已登记进 CLAUDE.md 同段):\n 九个契约包域 未接线 1 处:LocalWorkflowPlanner.refresh()\n 运行时模块侧 未接线 9 处:ai-gateway 2 / permission 3 / audit / credential / fact / scope 各 1\n\n证据:pnpm test(governance)364/364;check-fixtures 17 套件 468 例 0 失败;\n「夹具与单测都没有」仍 0 条;工作区一致性门禁只剩既有的 L9 compose project 撞名。\n脚本仍是诊断而非门禁——不写报告、不进 pnpm check,故本次不涉及 reports 回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/e79e5f2b943a633299851dbc7709455247a415ef","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:51:13-07:00","added":["governance/test/fixture-coverage.test.mjs"],"removed":[],"modified":["governance/fixture-coverage.mjs"]},{"id":"fed1fd024bc60a4feef89dff7c2ec028e0bcb066","message":"docs(发布): 当场记录 rc.5 列车——三层判据随包出去,fact-pii 有意留在仓内\n\nrc.5 三包 2026-09-18 经本地旁路发出,源 cf05344,tag packages-v1.0.0-rc.5(连续第二趟按 CL-5\n打上)。三包均 registry integrity verified;产物 contracts 183.0 kB / governance 96.9 kB /\nclient-fact 17.4 kB,shasum 记在文档里。\n\n记录里写清了三件容易被误读的事:\n\n1. 发布物里有什么、没有什么。check-pins.mjs 在 governance 包的 files 里,三层判据随包出去,\n 消费者仓拿到新判据后因无 pins-baseline 而第三方层不启用,行为与 rc.4 一致(设计好的向后兼容)。\n check-fact-pii.mjs 与 fact-pii-rules.json **有意不进 files**——它扫 contracts/schemas/facts/,\n 消费者仓没有那个目录,发过去是道跑不起来的门禁。\n2. **CI 死锁解开了一半。** rc.4 那趟记的是双重不可用;本次实测 GitHub 镜像落后已从 237 条降到\n 24 条,推送死锁解开,但 Actions 最新 run 35404565689 仍 failure。计费一恢复即可直接走正道,\n 不必再先解死锁——这是四趟以来第一次出现的松动。\n3. 发布前验证的真实范围:构建 BUILD_EXIT=0、逐包核对产物内容与 provenance;**完整 pnpm check\n 没有在发布前跑**,发布后补跑(真实退出码 1,唯一失败是并行会话的 workbench-ops-snapshot 过期,\n 判据类全绿:pins、fact-pii、测试 361/361)。\n\n发布那一步由 Owner 在自己终端执行:本会话的 auto mode 安全分类器以 [Safety Bypass Flag] 拒绝了带\nPLATFORM_RELEASE_BYPASS_CI_EVIDENCE 的命令。那不算误伤,这个开关就是绕过 CI 证据链的。\n备料与验证由会话完成,最后一步由人按下——这个分工也记进了文档。\n\nCLAUDE.md 的 contracts 条目同步推到 rc.5,并记下 fact-pii 不随包这一条。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/fed1fd024bc60a4feef89dff7c2ec028e0bcb066","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:50:56-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/G-12本地旁路发布记录-2026-09-13.md"]},{"id":"5116dc5951412d8e6f037aafb4fe532fa38207a7","message":"chore(reports): check:fixtures 回绑 @ 62c9d95 —— 配置开关补的 10 例还没进报告\n\n已提交版绑 748492c、记 458 例;其后 contracts/src/domain/configuration-feature-flags/\nfixture-evaluator.ts 与对应夹具各有一次变更,现测 17 套件 468 例、失败 0、不可用 0。\n按「作用域内有无变更」判定该回绑,非按提交距离。产出绑 62c9d95、worktreeDirty=false\n(生成时主工作区恰好干净,未用临时检出)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/5116dc5951412d8e6f037aafb4fe532fa38207a7","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:49:08-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.json"]}],"total_commits":0,"head_commit":{"id":"e79e5f2b943a633299851dbc7709455247a415ef","message":"feat(governance): 覆盖度探针自己查「整支规则没接进评估器」——那是它此前按设计看不见的盲区\n\n上一条(62c9d95)把盲区与绕开它的两步写进了 CLAUDE.md,但那只是文档约束,人不比对就不会发现。\n本次把两项结构比对做进 governance/fixture-coverage.mjs:它们不依赖夹具,因而看得见「从没有用例的那一面」。\n\n1. 未接线列:导入域的 index.js,把导出的判定函数(assess|review|classify|select|decide|plan|preflight|\n evaluate 打头)与 planner 原型方法逐个对评估器源码里的引用,没被引用的报出来。\n2. !!! 行:评估器写成 `\"reasons\" in r ? … : []` 时提醒——该规则结果联合体里一旦出现不带 reasons 的\n 非放行出口(BLOCKED / SKIP_DUPLICATE / DLQ / DUPLICATE_NOOP / USE_LAST_KNOWN_GOOD)就会被静默判成 ACCEPT。\n\n对着 15 个真实套件跑,逮到两类误报,都已修,并写成用例钉住:\n- planner 多数经 createRuntimeX() 工厂到达,类名根本不出现在评估器里。按「类名没出现」判整支未接线会把\n 跨域流程、Webhook、public-file 等全报一遍。改成按「一个方法都没被调」判,并排除 status/get 这类\n 只读访问器与错误类(AiRouteRequestRejected / AuditRequestRejected 不是判定面)。\n- cost-capacity 与 notification-webhook 把旧写法 `\"reasons\" in d ? [...] : []` 抄在注释里当变更记录,\n 按原文匹配会把两个已经改对的域报成缺陷。改成先去注释再匹配。\n措辞也相应收敛:`!!!` 行现在说「今天未必已经出错,但联合体里一旦出现…就会被静默判成 ACCEPT」,\n而不是断言它已经错了——跨域流程那处就属于「今天正确、但脆」。\n\n新增 governance/test/fixture-coverage.test.mjs(3 例):该脚本此前是 governance/ 下唯一没有测试的。\n用临时自足域验三件事——只报没被调的方法、经工厂到达的类不报整支未接线、注释里的旧写法不报。\n\n当前读数(均未处理,已登记进 CLAUDE.md 同段):\n 九个契约包域 未接线 1 处:LocalWorkflowPlanner.refresh()\n 运行时模块侧 未接线 9 处:ai-gateway 2 / permission 3 / audit / credential / fact / scope 各 1\n\n证据:pnpm test(governance)364/364;check-fixtures 17 套件 468 例 0 失败;\n「夹具与单测都没有」仍 0 条;工作区一致性门禁只剩既有的 L9 compose project 撞名。\n脚本仍是诊断而非门禁——不写报告、不进 pnpm check,故本次不涉及 reports 回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/e79e5f2b943a633299851dbc7709455247a415ef","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:51:13-07:00","added":["governance/test/fixture-coverage.test.mjs"],"removed":[],"modified":["governance/fixture-coverage.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":21301,"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:47: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
|
2
|
30
|
1789775554
|
1789775594
|
0
|
1789775554
|
1789775622
|
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
|
|
24188
|
docs(部署): §15.4 改写 + 新增 §15.5——ui-acceptance 已真跑回来 docs(部署): §15.4 改写 + 新增 §15.5——ui-acceptance 已真跑回来,D-14 闭环...
|
116
|
5
|
platform.yml
|
154
|
5
|
0
|
refs/heads/main
|
3baec4ad9f8c27a94f514af7e4e340c1c763b923
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"e79e5f2b943a633299851dbc7709455247a415ef","after":"3baec4ad9f8c27a94f514af7e4e340c1c763b923","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/e79e5f2b943a633299851dbc7709455247a415ef...3baec4ad9f8c27a94f514af7e4e340c1c763b923","commits":[{"id":"3baec4ad9f8c27a94f514af7e4e340c1c763b923","message":"docs(部署): §15.4 改写 + 新增 §15.5——ui-acceptance 已真跑回来,D-14 闭环\n\n回绑提交 c4ec6f6:passed,nestjs/ws 5/5(地板 5),绑 67e8193 / worktreeDirty=false;\n67e8193..HEAD 之间作用域零变更,绑定对当前代码仍成立。\n\n同轮补两条环境教训:\n\n1. 隔离栈 enterprise-platform-ms23 那台 PG 的库又被清空了,验收库得重建。与 §9 末尾\n 「不能假定上一轮还在」同一条,这是第二次撞上——可以当常态而不是意外。\n2. §9 的三条前置少写了一条:临时检出只 install + prisma:generate 不够,必须再 pnpm build。\n 缺它时 api-nestjs 的 tsc 以 Cannot find module '@juhai/module-kit' / '@repo/telemetry' 失败,\n 是 workspace 包没构建,不是回归。该次失败停在构建阶段、未写报告,主工作区那份旧报告\n 全程没被覆盖——这正是在独立检出里跑的意义。\n\n§15.4 标题与结尾同步订正:原文写「本轮只登记」,现已不成立。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/3baec4ad9f8c27a94f514af7e4e340c1c763b923","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:53:58-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]},{"id":"c4ec6f6ad12a7b415db4bdd07de48ed64c26bde8","message":"chore(reports): ui-acceptance 重跑回绑 @ 67e8193\n\nD-14 登记的那份过期报告已真跑回来:passed,nestjs/ws 组合 5/5(地板 5),\nprovenance gitSha=67e8193 / worktreeDirty=false / runner=local。\n67e8193..HEAD 之间作用域(runtime/apps、runtime/packages、modules.json)零变更,\n因此该绑定对当前代码仍然成立。\n\n跑法按 §9 的口径:HEAD 的独立 git worktree 干净检出(主工作区有并行会话 WIP,\n跑在那里必 worktreeDirty=true)+ 隔离栈 enterprise-platform-ms23(PG :55471 /\nRedis :56380 逻辑库 7,本轮重新 docker start 并新建 enterprise_platform_ui_acceptance 库\n——那台 PG 里的库又被清空过一次,与 §9 末尾记的教训一致)。\n\n踩到一条 §9 三条前置之外的:**临时检出只 install + prisma:generate 还不够,必须再\npnpm build**。缺它时 api-nestjs 的 tsc 以 Cannot find module '@juhai/module-kit' /\n'@repo/telemetry' 失败——workspace 包没构建,不是回归。CLAUDE.md「开发命令」节的三步\n本来就写了 build,是我漏了第三步。该次失败发生在构建阶段、未写报告,主工作区那份\n旧报告全程未被覆盖(这正是在独立检出里跑的意义)。\n\n本提交只含这一个报告文件:同时有 18 份 runtime 报告被并行会话改动,不属本轮,未纳入。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/c4ec6f6ad12a7b415db4bdd07de48ed64c26bde8","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:53:21-07:00","added":[],"removed":[],"modified":["runtime/reports/ui-acceptance.latest.json"]}],"total_commits":0,"head_commit":{"id":"3baec4ad9f8c27a94f514af7e4e340c1c763b923","message":"docs(部署): §15.4 改写 + 新增 §15.5——ui-acceptance 已真跑回来,D-14 闭环\n\n回绑提交 c4ec6f6:passed,nestjs/ws 5/5(地板 5),绑 67e8193 / worktreeDirty=false;\n67e8193..HEAD 之间作用域零变更,绑定对当前代码仍成立。\n\n同轮补两条环境教训:\n\n1. 隔离栈 enterprise-platform-ms23 那台 PG 的库又被清空了,验收库得重建。与 §9 末尾\n 「不能假定上一轮还在」同一条,这是第二次撞上——可以当常态而不是意外。\n2. §9 的三条前置少写了一条:临时检出只 install + prisma:generate 不够,必须再 pnpm build。\n 缺它时 api-nestjs 的 tsc 以 Cannot find module '@juhai/module-kit' / '@repo/telemetry' 失败,\n 是 workspace 包没构建,不是回归。该次失败停在构建阶段、未写报告,主工作区那份旧报告\n 全程没被覆盖——这正是在独立检出里跑的意义。\n\n§15.4 标题与结尾同步订正:原文写「本轮只登记」,现已不成立。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/3baec4ad9f8c27a94f514af7e4e340c1c763b923","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:53:58-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":21357,"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:52:34+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
|
1789775645
|
1789775684
|
0
|
1789775643
|
1789775713
|
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
|
|
24189
|
feat(治理): check:fact-pii 进 @juhai/governance 包——并补 feat(治理): check:fact-pii 进 @juhai/governance 包——并补上让它在消费者仓真能跑的两处...
|
116
|
5
|
platform.yml
|
155
|
5
|
0
|
refs/heads/main
|
eb275b10c470d5db1907473c40e6c831d1e7a1c6
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"3baec4ad9f8c27a94f514af7e4e340c1c763b923","after":"eb275b10c470d5db1907473c40e6c831d1e7a1c6","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/3baec4ad9f8c27a94f514af7e4e340c1c763b923...eb275b10c470d5db1907473c40e6c831d1e7a1c6","commits":[{"id":"eb275b10c470d5db1907473c40e6c831d1e7a1c6","message":"feat(治理): check:fact-pii 进 @juhai/governance 包——并补上让它在消费者仓真能跑的两处\n\n把 check-fact-pii.mjs 与 fact-pii-rules.json 加进包的 files、在 bin/cli.mjs 注册\ncheck:fact-pii 子命令。但**只加 files 是个摆设**,装到消费者仓会是个永远扫到 0 个 Fact、\n永远 exit 0 的门禁——它原先硬编码扫 contracts/schemas/facts,还硬读仓内的\ngovernance/fact-pii-rules.json。两处都补了:\n\n --dir \u003c目录\u003e… 指定 Fact schema 目录(可重复),缺省仍是本仓那两处。消费者的 Fact\n 定义不在 contracts/schemas/facts,指不过去这道门禁就没有判据对象。\n 判据回落 仓内 governance/fact-pii-rules.json 优先,缺失则用包自带的那份。\n 消费者仓没有 governance/ 目录,硬读仓内路径会让门禁在他们那儿直接崩。\n 要收紧就在自己仓里放一份同名文件覆盖。\n\n一个 Fact 都没扫到时打警告而不是静默通过——多半是目录指错了,不是「真的没有 Fact」。\n报告里记下 scanDirs 与 rulesSource,事后能看出这次扫的是哪儿、判据是谁的。\n\n消费者场景端到端验过(临时目录,无 governance/、Fact 放在 domain/facts/):\n juhai-governance check:fact-pii --root \u003cdir\u003e --dir domain/facts\n → 抓到 buyer_phone、exit 1;报告 rulesSource=bundled、scanDirs=[\"domain/facts\"]\n → 不给 --dir 时明确警告「未找到任何 Fact schema」\n本仓行为不变:21 个 Fact / 116 字段 / 0 违规,rulesSource=repo。测试 8 → 10 例。\n\nREADME 两处同步(判据表 + check 链顺序)——它随包发布,说明必须与实现一致。\n\n**时间差要知道:rc.5 昨天刚发,这些进不了 rc.5。** 包里现在这道门禁的代码要等下一个 RC\n才出得去;在那之前消费者拿到的 @juhai/governance@1.0.0-rc.5 仍不含 fact-pii。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/eb275b10c470d5db1907473c40e6c831d1e7a1c6","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:54:59-07:00","added":[],"removed":[],"modified":["governance/README.md","governance/bin/cli.mjs","governance/check-fact-pii.mjs","governance/package.json","governance/test/check-fact-pii.test.mjs"]},{"id":"475704b56896c09a0408e1e95a87d9a9994b0667","message":"test(contracts): 跨域流程接上 refresh——10 处未接线的第 1 处,也是我自己那轮留下的\n\ngovernance/fixture-coverage.mjs 加上结构比对后第一轮就报出 LocalWorkflowPlanner.refresh() 未接线:\nplanner 三个公开方法里只有 plan 有规则,「版本必须前进」「坏候选保留 last-known-good」两条纪律\n此前只有单测看着。这是我 13c7eb7 那轮留下的口子。\n\n顺带把 plan 的判据从 `\"reasons\" in r` 改为按 kind。今天 WorkflowPlannerResult 只有 PLAN / REJECT\n两支、行为逐字不变,但按字段存在与否判放行意味着将来加一个不带 reasons 的非放行出口就会被静默放过\n——注册中心的 BLOCKED 正是这么漏的。\n\n接上规则后覆盖度先变差,这是预期的:refresh 那一面第一次被变异探针走到,立刻冒出 4 条「夹具与单测\n都没有」(WORKFLOW_ID_REQUIRED / WORKFLOW_DOMAINS_REQUIRED / WORKFLOW_TENANTS_REQUIRED /\nWORKFLOW_REVISION_REQUIRED)与 1 条「仅单测」(WORKFLOW_VERSION_INVALID),逐条钉完回到 0。\n\n覆盖:夹具 18 → 28 例(正 3 / 反 25),规则数 3 → 4;该套件三档(都没有 / 仅单测 / 未接线)均为 0。\n判定逻辑一行未改,只动评估器与夹具。\n\n剩余 9 处未接线全在运行时模块侧(ai-gateway 2 / permission 3 / audit / credential / fact / scope 各 1),\n每个 planner 300—734 行、各自要造一份合法快照,按模块逐个收。\n\n证据:node --test contracts/test/*.test.mjs 408/408、该套件夹具 28/28 失败 0、fixture-coverage 三档全 0。\n负向实测:把 N20(通配租户那条)的声明改成 WORKFLOW_VERSION_NOT_FORWARD → 门禁 exit 1 并点名该例,\n还原后 exit 0。本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/475704b56896c09a0408e1e95a87d9a9994b0667","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:54:50-07:00","added":[],"removed":[],"modified":["contracts/SOURCE.md","contracts/src/domain/cross-domain-workflow/fixture-evaluator.ts","contracts/test/fixtures/cross-domain-workflow.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"eb275b10c470d5db1907473c40e6c831d1e7a1c6","message":"feat(治理): check:fact-pii 进 @juhai/governance 包——并补上让它在消费者仓真能跑的两处\n\n把 check-fact-pii.mjs 与 fact-pii-rules.json 加进包的 files、在 bin/cli.mjs 注册\ncheck:fact-pii 子命令。但**只加 files 是个摆设**,装到消费者仓会是个永远扫到 0 个 Fact、\n永远 exit 0 的门禁——它原先硬编码扫 contracts/schemas/facts,还硬读仓内的\ngovernance/fact-pii-rules.json。两处都补了:\n\n --dir \u003c目录\u003e… 指定 Fact schema 目录(可重复),缺省仍是本仓那两处。消费者的 Fact\n 定义不在 contracts/schemas/facts,指不过去这道门禁就没有判据对象。\n 判据回落 仓内 governance/fact-pii-rules.json 优先,缺失则用包自带的那份。\n 消费者仓没有 governance/ 目录,硬读仓内路径会让门禁在他们那儿直接崩。\n 要收紧就在自己仓里放一份同名文件覆盖。\n\n一个 Fact 都没扫到时打警告而不是静默通过——多半是目录指错了,不是「真的没有 Fact」。\n报告里记下 scanDirs 与 rulesSource,事后能看出这次扫的是哪儿、判据是谁的。\n\n消费者场景端到端验过(临时目录,无 governance/、Fact 放在 domain/facts/):\n juhai-governance check:fact-pii --root \u003cdir\u003e --dir domain/facts\n → 抓到 buyer_phone、exit 1;报告 rulesSource=bundled、scanDirs=[\"domain/facts\"]\n → 不给 --dir 时明确警告「未找到任何 Fact schema」\n本仓行为不变:21 个 Fact / 116 字段 / 0 违规,rulesSource=repo。测试 8 → 10 例。\n\nREADME 两处同步(判据表 + check 链顺序)——它随包发布,说明必须与实现一致。\n\n**时间差要知道:rc.5 昨天刚发,这些进不了 rc.5。** 包里现在这道门禁的代码要等下一个 RC\n才出得去;在那之前消费者拿到的 @juhai/governance@1.0.0-rc.5 仍不含 fact-pii。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/eb275b10c470d5db1907473c40e6c831d1e7a1c6","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:54:59-07:00","added":[],"removed":[],"modified":["governance/README.md","governance/bin/cli.mjs","governance/check-fact-pii.mjs","governance/package.json","governance/test/check-fact-pii.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":21388,"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:54:03+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
|
1789775716
|
1789775754
|
0
|
1789775710
|
1789775784
|
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
|
|
24190
|
docs(部署,runbook): 记录补 §16——D-13 从推断变成实测、订正并复验,另登记 docs(部署,runbook): 记录补 §16——D-13 从推断变成实测、订正并复验,另登记 D-15...
|
116
|
5
|
platform.yml
|
156
|
5
|
0
|
refs/heads/main
|
21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"eb275b10c470d5db1907473c40e6c831d1e7a1c6","after":"21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/eb275b10c470d5db1907473c40e6c831d1e7a1c6...21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","commits":[{"id":"21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","message":"docs(部署,runbook): 记录补 §16——D-13 从推断变成实测、订正并复验,另登记 D-15\n\nD-13 此前只是读代码推断(判定链对不上)。本轮先做成可证伪的实测:用 dev 的 HS256 密钥\n手工签发三个只差 sub 的 token 打 GET /api/platform/ops/definitions——\n\n sub = users.subject(IdP 令牌的实际形态) 订正前 403 OPS_FORBIDDEN → 订正后 200\n sub = users.id(白名单原值) 订正前 200 → 订正后 403\n 同上但不带 platform:ops(对照) 两次都是 403 OPS_SCOPE_REQUIRED\n\n第三行是对照组,证明守卫顺序是 scope 在前、白名单在后,前两行的差异确实出在白名单这一关。\nsub 的实际形态取自 §14 那次真实登录的令牌,不是猜的。\n\n订正落在仓外 .secrets(PLATFORM_OPS_ADMIN_SUBJECTS 由 users.id 改为 users.subject,\n并在键上方留三行注释说明判定链),force-recreate 重建 runtime 容器后复验,健康探针 200。\nD-13 闭环。\n\n同时订正一个我自己此前过于保守的判断:原以为「必须等 canonical 租户分支合并后与 D-4 一并验」,\n实际 D-4 挡的是执行那一步,定义面的读取不受影响,守卫这一层现在就能独立验证。\n\n新登记 D-15:当前没有任何 OIDC 客户端的 allowedScopes 含 platform:ops(三个客户端全是\nopenid profile [idp:manage]),真实 IdP 令牌因此卡在 scope 关——不是白名单、也不是 D-4。\n给客户端放这个 scope 等于把平台运维权发给浏览器里的公开客户端,属安全裁决,留 Owner。\n\nrunbook §2.1 的警告块同步更新:那处现已订正,并指向 §16 与 D-15。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","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:58:15-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md","docs/runbook.md"]},{"id":"f28f8f9935231e083402f5fa47269576a96eb38d","message":"test(runtime): credential 的租约 planner 整支不在门禁上——补 lease-plan / lease-refresh,10 处未接线的第 3 处\n\n结构比对报出 LocalMachineCredentialLeasePlanner(308 行、三个公开方法)整支未接线:本模块此前只有\nlease-request 一条规则,走的是 preflight 纯规则;planner 的策略快照准入、主体登记、受众 / Scope\nallowlist、TTL 上限、授权版本水位与热更一条都不在门禁上。判定逻辑一行未改。\n\n判定按 kind:MachineCredentialLeaseResult 的 BLOCKED 携带 blockers 而非 reasons。\n\n接上规则后照例先变差:冒出 6 条「夹具与单测都没有」(归属三件套、授权版本、请求时钟,以及 refresh\n侧的版本 / 修订 / 主体策略),逐条钉完回到 0。\n\n覆盖:夹具 10 → 27 例(正 4 / 反 23),规则 1 → 3;三档(都没有 / 仅单测 / 未接线)均为 0。\n新钉住的策略面包括 AUDIENCE_NOT_ALLOWED / SCOPE_NOT_ALLOWED / TTL_OUT_OF_POLICY / STALE_AUTHORIZATION\n/ MACHINE_PRINCIPAL_NOT_REGISTERED / AI_DELEGATION_REQUIRED——凭据签发的准入闸门此前在门禁上一条没有。\n\n证据:pnpm --dir runtime --filter @juhai/module-credential test 46/46、该套件夹具 27/27 失败 0、\nfixture-coverage 三档全 0。本次不回绑任何 reports/。\n\n进度:10 处未接线已收 3 处(跨域流程 refresh、scope、credential)。余 7 处在 ai-gateway 2 /\npermission 3 / audit / fact 各 1。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/f28f8f9935231e083402f5fa47269576a96eb38d","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:57:26-07:00","added":[],"removed":[],"modified":["runtime/modules/credential/src/domain/fixture-evaluator.ts","runtime/modules/credential/test/fixtures/credential.fixtures.json"]},{"id":"7eadfb1a5af353077f1a32eef51389f4a6f7fbfa","message":"chore(release): 三包推到 1.0.0-rc.6——check:fact-pii 这次真的随包出去\n\nrc.5 发的时候 check-fact-pii.mjs 还不在 governance 包的 files 里,消费者拿到的 rc.5 不含它。\neb275b1 把它与 fact-pii-rules.json 加进 files、在 CLI 注册 check:fact-pii 子命令,\n并补上了让它在消费者仓真跑得起来的两处(--dir 指定 Fact schema 目录、判据回落到包内自带)。\n这趟车就是为了把那些送出去。\n\n自 rc.5 源 cf05344 起的随车内容:\n governance 7 文件 / 2 提交(fact-pii 进包 + 消费者可用性)\n contracts 3 文件 / 1 提交\n runtime/clients/fact 0 文件 / 0 提交 —— **完全没有变化,纯跟车**(同 rc.5)\n\n通道:本地旁路(G-12 第五次)。2026-09-18 实测 GitHub Actions 仍停在 run 35404565689\n(failure,计费),没有新 run;GitHub 镜像落后 35 条。正道仍不可满足。\n\n按 CL-5 打 tag packages-v1.0.0-rc.6(连续第三趟)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/7eadfb1a5af353077f1a32eef51389f4a6f7fbfa","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:56:38-07:00","added":[],"removed":[],"modified":["contracts/package.json","governance/package.json","runtime/clients/fact/package.json"]},{"id":"a2a86a7161102dba3d3ef227b89545ea65612273","message":"test(runtime): scope 的 410 行 planner 整支不在门禁上——补 plan / refresh 两条规则,10 处未接线的第 2 处\n\n结构比对报出 LocalScopeResolutionPlanner(三个公开方法)整支未接线:本模块此前只有 snapshot 一条规则,\nplanner 的请求体检、应用登记、目录版本、路由匹配与热更一条都不在门禁上。判定逻辑一行未改。\n\n判定按 kind 而不是 `\"reasons\" in`:ScopeResolutionPlanResult 的 BLOCKED 携带的是 blockers,\n按字段存在与否判会被当成放行——注册中心那次就是这么漏的,这里一开始就避开。\n\n接上规则后覆盖度先变差,同样是预期的:plan / refresh 两面第一次被变异探针走到,冒出 15 条\n「夹具与单测都没有」(十条请求字段守卫 + 路由未登记 + refresh 侧四条),逐条钉完回到 0。\n\n覆盖:夹具 8 → 35 例(正 4 / 反 31),规则 1 → 3;该套件三档(都没有 / 仅单测 / 未接线)均为 0。\n模块夹具与 test/negative/*.fixtures.test.ts 同源(it.each 直接遍历夹具文件),单测随夹具自动同步。\n\n证据:pnpm --dir runtime --filter @juhai/module-scope test 53/53、typecheck 绿、\n该套件夹具 35/35 失败 0、fixture-coverage 三档全 0。本次不回绑任何 reports/。\n\n进度:10 处未接线已收 2 处(跨域流程 refresh、scope)。余 8 处在 ai-gateway 2 / permission 3 /\naudit / credential / fact 各 1,planner 308—734 行,按模块逐个收。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a2a86a7161102dba3d3ef227b89545ea65612273","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:56:05-07:00","added":[],"removed":[],"modified":["runtime/modules/scope/src/domain/fixture-evaluator.ts","runtime/modules/scope/test/fixtures/scope.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","message":"docs(部署,runbook): 记录补 §16——D-13 从推断变成实测、订正并复验,另登记 D-15\n\nD-13 此前只是读代码推断(判定链对不上)。本轮先做成可证伪的实测:用 dev 的 HS256 密钥\n手工签发三个只差 sub 的 token 打 GET /api/platform/ops/definitions——\n\n sub = users.subject(IdP 令牌的实际形态) 订正前 403 OPS_FORBIDDEN → 订正后 200\n sub = users.id(白名单原值) 订正前 200 → 订正后 403\n 同上但不带 platform:ops(对照) 两次都是 403 OPS_SCOPE_REQUIRED\n\n第三行是对照组,证明守卫顺序是 scope 在前、白名单在后,前两行的差异确实出在白名单这一关。\nsub 的实际形态取自 §14 那次真实登录的令牌,不是猜的。\n\n订正落在仓外 .secrets(PLATFORM_OPS_ADMIN_SUBJECTS 由 users.id 改为 users.subject,\n并在键上方留三行注释说明判定链),force-recreate 重建 runtime 容器后复验,健康探针 200。\nD-13 闭环。\n\n同时订正一个我自己此前过于保守的判断:原以为「必须等 canonical 租户分支合并后与 D-4 一并验」,\n实际 D-4 挡的是执行那一步,定义面的读取不受影响,守卫这一层现在就能独立验证。\n\n新登记 D-15:当前没有任何 OIDC 客户端的 allowedScopes 含 platform:ops(三个客户端全是\nopenid profile [idp:manage]),真实 IdP 令牌因此卡在 scope 关——不是白名单、也不是 D-4。\n给客户端放这个 scope 等于把平台运维权发给浏览器里的公开客户端,属安全裁决,留 Owner。\n\nrunbook §2.1 的警告块同步更新:那处现已订正,并指向 §16 与 D-15。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","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:58:15-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md","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":21469,"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:55: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
|
1789775900
|
1789775940
|
0
|
1789775899
|
1789775969
|
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
|
|
24191
|
docs(发布): 记录 rc.6 列车——fact-pii 这次真出去了,并记下五趟旁路的累积代价
|
116
|
5
|
platform.yml
|
157
|
5
|
0
|
refs/heads/main
|
fe35d013ca78dcfcec4b634a312cd0266527fe2b
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f","after":"fe35d013ca78dcfcec4b634a312cd0266527fe2b","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/21d7c1aaae83d8d5e40aa185b1bd86d3a8d8d99f...fe35d013ca78dcfcec4b634a312cd0266527fe2b","commits":[{"id":"fe35d013ca78dcfcec4b634a312cd0266527fe2b","message":"docs(发布): 记录 rc.6 列车——fact-pii 这次真出去了,并记下五趟旁路的累积代价\n\nrc.6 三包 2026-09-18 发出,源 7eadfb1,tag packages-v1.0.0-rc.6(连续第三趟按 CL-5 打上)。\n动因是补 rc.5 的缺口:那时 check-fact-pii.mjs 还不在 governance 包的 files 里,消费者拿到的\nrc.5 不含它。governance 包从 96.9 kB 涨到 101.3 kB,涨的正是那两个文件。\n\n**这一趟的验证比前四趟硬。** 前几趟只能依赖 publish-rc.mjs 的 integrity 自校验;这次把\nRegistry 登记的 dist.integrity 与本地备料 tarball 的 sha512 逐包比对,三包全部一致——\n证明架上的就是会话备的那批料,中间没有被替换或重打包。\n\n顺带纠正一个前几趟被骗过的点:npm view \u003cpkg\u003e versions 在 Gitea 的 npm registry 上静默返回空,\n查具体版本(npm view \u003cpkg\u003e@\u003cversion\u003e dist.integrity)才有结果。此前以为「Registry 查不了」,\n是被这个 API 差异骗的,不是权限问题。\n\n**记下累积代价:** 旁路第五次使用后,contracts / governance 的 rc.0—rc.6 七个版本号已全部被\n本地包永久占用,永远不会有阶段门证据;计费恢复后 CI 只能从 rc.7 发起。开关当初登记为\n「临时设施」,五趟之后它显然已是常态通道——这不是它该有的角色。计费恢复时该做的是删掉\n这个分支并让 CI 发 rc.7,而不是让它继续顺手可用。这句话写进了 G-12,免得下一趟又顺手发第六次。\n\nCLAUDE.md 的 contracts 条目同步到 rc.6,并记下 check:fact-pii 自 rc.6 起随包。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/fe35d013ca78dcfcec4b634a312cd0266527fe2b","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:59:52-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/G-12本地旁路发布记录-2026-09-13.md"]},{"id":"fe96fe64bdb8753331280a2b3396c8237b08b9d3","message":"test(runtime): ai-gateway 的选路本身不在门禁上——补 router-route / router-refresh / route-plan,10 处的第 4、5 处\n\n结构比对报出 LocalAiGovernanceRouter(316 行、三个公开方法)整支未接线、planAiRoute() 未接线。\n既有三条规则(action / route / egress)走的都是纯函数——动作治理、单条路由体检、外发分类判据——\n而选路本身(租户 allowlist、能力匹配、区域 / 安全层级 / 留存期、禁止静默回退、快照热更)\n与 planAiRoute 的串联(鉴权 → 外发分类 → 选路)一条都不在门禁上。判定逻辑一行未改。\n\n补三条规则,判定按 kind / outcome,不用 `\"reasons\" in`。\n\n接上后照例先变差,冒出 7 条「夹具与单测都没有」(EXPLICIT_FALLBACK_REQUIRED 与 refresh 侧六条\n策略字段守卫),逐条钉完回到 0。\n\n过程中一处预期被实测推翻:我按「删掉 allowFallback 就该拒」造 N21,实跑返回 []——主路由仍然匹配,\n删这个布尔位不构成拒绝。真要触发 EXPLICIT_FALLBACK_REQUIRED 得让快照里只剩 fallback 路由可选。\n按实现重造该例,没有反过来改实现。\n\n覆盖:夹具 16 → 35 例(正 8 / 反 27),规则 3 → 6;三档(都没有 / 仅单测 / 未接线)均为 0。\n新钉住的包括 NO_APPROVED_MODEL_ROUTE(租户越界 / 能力不符 / 无快照三条路径)、\nSENSITIVE_PROVIDER_NOT_APPROVED、EGRESS_CLASS_REQUIRES_SENSITIVE_FLAG、PERMISSION_DENIED:\u003ccode\u003e\n——AI 出站的准入闸门此前在门禁上只有纯函数那一半。\n\n证据:pnpm --dir runtime --filter @juhai/module-ai-gateway test 53/53、typecheck 绿、\n该套件夹具 35/35 失败 0、fixture-coverage 三档全 0。本次不回绑任何 reports/。\n\n进度:10 处已收 5 处(跨域流程 refresh、scope、credential、ai-gateway 两处)。\n余 5 处在 permission 3 / audit 1 / fact 1。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/fe96fe64bdb8753331280a2b3396c8237b08b9d3","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:59:00-07:00","added":[],"removed":[],"modified":["runtime/modules/ai-gateway/src/domain/fixture-evaluator.ts","runtime/modules/ai-gateway/test/fixtures/ai-gateway.fixtures.json"]},{"id":"2822c4d34a1b519fc87a21fe30b035028502d297","message":"fix(modules): permission 三支判定接进夹具门禁,并修两处崩溃面——此前整支不在门禁上\n\n起因是 governance/fixture-coverage.mjs 的结构比对:六个运行时模块共 10 处判定面\n「评估器没接线」,permission 占 3 处(LocalPermissionDecisionPlanner、\nLocalEmploymentScopeInvalidationPlanner、evaluateCatalogAdmission)。\n\n先确认不是有意留白,三条证据:① 探针自述把「未接线」定义为「该面完全不在门禁上」,\n并在同日把契约包侧四次同形全部修掉;② 各模块夹具 description 确实声明过取舍,但都在\n另一个轴上(吊销即时性 / 配额熔断 / 查询越权,一律「属权威实现,DEC-xxx 后」),\n没有一条提到这些 planner;③ 决定性的一条——f7a0cbb 先迁入 planner,8a95879 才建夹具,\n建的时候这些文件就在同一目录里,而 8a95879 自述评估器「只调用迁入的纯规则」,\n按它自己的话这些面本就该在。\n\n实测先行,查出两处真缺陷(均已修):\n\n evaluateCatalogAdmission([null, \"x\"], …) 抛 TypeError——守了 routes 非数组,\n 没守条目非对象;目录来自快照 JSON。\n\n LocalPermissionDecisionPlanner.plan(undefined) 抛,兜底的 deny-all 也抛。\n 注意光守 preflight 不够:plan() 在 preflight 之后仍直接解引用 request.actorType 等,\n 故两处都要守。preflightCataloguedPermissionDecision 的 catalog 非数组 / 条目非对象 /\n actions 非数组一并收口。\n\n三支 employment 的 plan 是本域最结实的一支,畸形入参改前就已 REJECT,未动其判定。\n\n接线五条规则(decision-plan / employment-invalidation / catalog-admission 加两个\nplanner 的 refresh),非放行出口一律按 kind 显式映射:本域 PermissionDecisionPlanResult\n的 BLOCKED 带的是 blockers,EmploymentScopeInvalidationResult 的 SKIP_DUPLICATE 与\nACKNOWLEDGE_STALE 连原因字段都没有——按 `\"reasons\" in r` 判会把它们全判成 ACCEPT\n(该形状已在契约包侧四个域各咬过一次)。\n\n按探针自述「补规则后覆盖度会先变差,把新暴露的原因码钉完再收工」执行:接线后\n「夹具与单测都没有」由 0 涨到 40,用探针 --json 的 trigger 机械生成钉住用例并逐条实跑\n确认可复现(38 条自动 + 2 条手工,其中 ASSIGNMENT_ID_MUST_CHANGE 的 trigger 提示不准,\n删字段实得 NEW_ASSIGNMENT_ID_INVALID,按语义改为新旧指派相同才复现)。\n\n核验:夹具 11 → 68 例(正 7 / 反 61)0 失败;模块单测 63 → 108 例;探针 permission 两档\n双双归零(未接线 3 → 0、都没有 40 → 0),全仓「都没有」合计 47 → 0、未接线 10 → 4;\n负向实做:把 SKIP_DUPLICATE 的声明原因改成不会产生的串,门禁 exit 1 并点名该例,还原后\nexit 0;门禁另自行抓到我一处声明写错(PERMISSION_ADMISSION_SNAPSHOT_VERSION_NOT_FORWARD\n实为 PERMISSION_ADMISSION_VERSION_NOT_FORWARD)。\n\nruntime 静态链 12 道绿、第 13 道 check:docs-truth 红,但与本轮无关:c4ec6f6 把\nui-acceptance 重绑到 67e8193 却没回灌 runtime/CLAUDE.md 动态区,已在 HEAD 干净检出复现。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/2822c4d34a1b519fc87a21fe30b035028502d297","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:58:45-07:00","added":[],"removed":[],"modified":["runtime/modules/permission/src/domain/catalog-admission.ts","runtime/modules/permission/src/domain/fixture-evaluator.ts","runtime/modules/permission/src/domain/permission-decision-planner.ts","runtime/modules/permission/src/domain/permission-preflight.ts","runtime/modules/permission/test/fixtures/permission.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"fe35d013ca78dcfcec4b634a312cd0266527fe2b","message":"docs(发布): 记录 rc.6 列车——fact-pii 这次真出去了,并记下五趟旁路的累积代价\n\nrc.6 三包 2026-09-18 发出,源 7eadfb1,tag packages-v1.0.0-rc.6(连续第三趟按 CL-5 打上)。\n动因是补 rc.5 的缺口:那时 check-fact-pii.mjs 还不在 governance 包的 files 里,消费者拿到的\nrc.5 不含它。governance 包从 96.9 kB 涨到 101.3 kB,涨的正是那两个文件。\n\n**这一趟的验证比前四趟硬。** 前几趟只能依赖 publish-rc.mjs 的 integrity 自校验;这次把\nRegistry 登记的 dist.integrity 与本地备料 tarball 的 sha512 逐包比对,三包全部一致——\n证明架上的就是会话备的那批料,中间没有被替换或重打包。\n\n顺带纠正一个前几趟被骗过的点:npm view \u003cpkg\u003e versions 在 Gitea 的 npm registry 上静默返回空,\n查具体版本(npm view \u003cpkg\u003e@\u003cversion\u003e dist.integrity)才有结果。此前以为「Registry 查不了」,\n是被这个 API 差异骗的,不是权限问题。\n\n**记下累积代价:** 旁路第五次使用后,contracts / governance 的 rc.0—rc.6 七个版本号已全部被\n本地包永久占用,永远不会有阶段门证据;计费恢复后 CI 只能从 rc.7 发起。开关当初登记为\n「临时设施」,五趟之后它显然已是常态通道——这不是它该有的角色。计费恢复时该做的是删掉\n这个分支并让 CI 发 rc.7,而不是让它继续顺手可用。这句话写进了 G-12,免得下一趟又顺手发第六次。\n\nCLAUDE.md 的 contracts 条目同步到 rc.6,并记下 check:fact-pii 自 rc.6 起随包。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/fe35d013ca78dcfcec4b634a312cd0266527fe2b","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:59:52-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":21540,"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:58:20+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
|
1789776004
|
1789777073
|
0
|
1789776003
|
1789777125
|
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
|
|
24192
|
docs(部署): 记录补 §17——D-15 只说对了一半,放开 scope 在信任锚未改前无效; docs(部署): 记录补 §17——D-15 只说对了一半,放开 scope 在信任锚未改前无效;拆出 D-16...
|
116
|
5
|
platform.yml
|
158
|
5
|
0
|
refs/heads/main
|
db1b4721f85189353d42e1b67586d66ba6041c88
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"fe35d013ca78dcfcec4b634a312cd0266527fe2b","after":"db1b4721f85189353d42e1b67586d66ba6041c88","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/fe35d013ca78dcfcec4b634a312cd0266527fe2b...db1b4721f85189353d42e1b67586d66ba6041c88","commits":[{"id":"db1b4721f85189353d42e1b67586d66ba6041c88","message":"docs(部署): 记录补 §17——D-15 只说对了一半,放开 scope 在信任锚未改前无效;拆出 D-16\n\n动手处理 D-15 前先验前提,结论是前提不成立:就算放开 platform:ops,真实 IdP 令牌照样进不来。\n\n实验:用 IdP 自己的 dev 签名私钥签一个 RS256 access token(形状与真实令牌一致),把三重守卫\n的输入全部凑齐——sub 用 §16 订正后的 users.subject、azp 用白名单里的 demo-console、scope 含\nplatform:ops——打 GET /api/platform/ops/definitions,得 401 INVALID_TOKEN。不是 403、不是 scope、\n不是白名单,是签名根本没被验过:容器 AUTH_JWKS_URI 为空,token-verifier.ts:98 因此走 hs256Secret\n分支,算法集只有 HS 一族。用 IdP 真私钥而不是随便造一把,是为了堵住「那只是密钥不对」的解释。\n\n再深一层:token-verifier.ts:47-50 只认单个 key source 与单个 issuer/audience,而 IdP 是每租户\n一个 issuer、每租户一份 JWKS。单租户 dev 下是配一个 URL 的事,多租户下不是——两边模型没对齐。\n\n本轮不擅自改,两处代价都不小:改 AUTH_JWKS_URI 等于换掉整个运行时的信任锚、所有 HS256 令牌\n当场失效,而这台容器是并行会话共用的常驻 dev 运行时;给客户端放 platform:ops 则因管理 API 没有\n改已有客户端的端点,要新建客户端并同步 PLATFORM_OPS_CLIENT_IDS,且本身是安全裁决。\n\nD-15 照此改写(§16.3 那行改为指向 §17.3,避免两处并存),新拆 D-16 记信任锚与模型不匹配。\n在 D-16 未裁之前,单独放开 scope 是无效功。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/db1b4721f85189353d42e1b67586d66ba6041c88","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-18T17:00:37-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"db1b4721f85189353d42e1b67586d66ba6041c88","message":"docs(部署): 记录补 §17——D-15 只说对了一半,放开 scope 在信任锚未改前无效;拆出 D-16\n\n动手处理 D-15 前先验前提,结论是前提不成立:就算放开 platform:ops,真实 IdP 令牌照样进不来。\n\n实验:用 IdP 自己的 dev 签名私钥签一个 RS256 access token(形状与真实令牌一致),把三重守卫\n的输入全部凑齐——sub 用 §16 订正后的 users.subject、azp 用白名单里的 demo-console、scope 含\nplatform:ops——打 GET /api/platform/ops/definitions,得 401 INVALID_TOKEN。不是 403、不是 scope、\n不是白名单,是签名根本没被验过:容器 AUTH_JWKS_URI 为空,token-verifier.ts:98 因此走 hs256Secret\n分支,算法集只有 HS 一族。用 IdP 真私钥而不是随便造一把,是为了堵住「那只是密钥不对」的解释。\n\n再深一层:token-verifier.ts:47-50 只认单个 key source 与单个 issuer/audience,而 IdP 是每租户\n一个 issuer、每租户一份 JWKS。单租户 dev 下是配一个 URL 的事,多租户下不是——两边模型没对齐。\n\n本轮不擅自改,两处代价都不小:改 AUTH_JWKS_URI 等于换掉整个运行时的信任锚、所有 HS256 令牌\n当场失效,而这台容器是并行会话共用的常驻 dev 运行时;给客户端放 platform:ops 则因管理 API 没有\n改已有客户端的端点,要新建客户端并同步 PLATFORM_OPS_CLIENT_IDS,且本身是安全裁决。\n\nD-15 照此改写(§16.3 那行改为指向 §17.3,避免两处并存),新拆 D-16 记信任锚与模型不匹配。\n在 D-16 未裁之前,单独放开 scope 是无效功。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/db1b4721f85189353d42e1b67586d66ba6041c88","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-18T17:00:37-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":21600,"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-19T08:00:04+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
|
1789776044
|
0
|
1789776041
|
1789776044
|
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
|
|
24193
|
docs(发布): rc.6 产物行补 total files 与 shasum——37→39 是「 docs(发布): rc.6 产物行补 total files 与 shasum——37→39 是「两个文件进包」最直接的证据...
|
116
|
5
|
platform.yml
|
159
|
5
|
0
|
refs/heads/main
|
03af35c77d7373f504875531e22ec6fb8e078898
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"db1b4721f85189353d42e1b67586d66ba6041c88","after":"03af35c77d7373f504875531e22ec6fb8e078898","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/db1b4721f85189353d42e1b67586d66ba6041c88...03af35c77d7373f504875531e22ec6fb8e078898","commits":[{"id":"03af35c77d7373f504875531e22ec6fb8e078898","message":"docs(发布): rc.6 产物行补 total files 与 shasum——37→39 是「两个文件进包」最直接的证据\n\n原记录只写了包大小(96.9→101.3 kB)。发布输出里有更精确的数字:governance 的 total files\n由 rc.5 的 37 变为 39,多出来的正是 check-fact-pii.mjs(8.6 kB) 与 fact-pii-rules.json(1.8 kB);\nbin/cli.mjs 3.9→4.0 kB 是注册子命令那行。三包 shasum 一并记入,便于事后核验。\n\n记录与发布输出已逐项核对一致(三包大小、文件数、包内容)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/03af35c77d7373f504875531e22ec6fb8e078898","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-18T17:00:41-07:00","added":[],"removed":[],"modified":["docs/G-12本地旁路发布记录-2026-09-13.md"]}],"total_commits":0,"head_commit":{"id":"03af35c77d7373f504875531e22ec6fb8e078898","message":"docs(发布): rc.6 产物行补 total files 与 shasum——37→39 是「两个文件进包」最直接的证据\n\n原记录只写了包大小(96.9→101.3 kB)。发布输出里有更精确的数字:governance 的 total files\n由 rc.5 的 37 变为 39,多出来的正是 check-fact-pii.mjs(8.6 kB) 与 fact-pii-rules.json(1.8 kB);\nbin/cli.mjs 3.9→4.0 kB 是注册子命令那行。三包 shasum 一并记入,便于事后核验。\n\n记录与发布输出已逐项核对一致(三包大小、文件数、包内容)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/03af35c77d7373f504875531e22ec6fb8e078898","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-18T17:00:41-07:00","added":[],"removed":[],"modified":["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":21628,"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-19T08:00:42+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
|
1789776378
|
0
|
1789776045
|
1789776378
|
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
|
|
24194
|
fix(modules): audit 追加准入 plan() 补请求体检——兜底 deny-all fix(modules): audit 追加准入 plan() 补请求体检——兜底 deny-all 此前也抛...
|
116
|
5
|
platform.yml
|
160
|
5
|
0
|
refs/heads/main
|
64bc6f5489ead3c65b23869f5e8866202e60b855
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"03af35c77d7373f504875531e22ec6fb8e078898","after":"64bc6f5489ead3c65b23869f5e8866202e60b855","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/03af35c77d7373f504875531e22ec6fb8e078898...64bc6f5489ead3c65b23869f5e8866202e60b855","commits":[{"id":"64bc6f5489ead3c65b23869f5e8866202e60b855","message":"fix(modules): audit 追加准入 plan() 补请求体检——兜底 deny-all 此前也抛\n\n71a04df 把本域接进了门禁(10 处未接线全部收口),但没动判定本身。实测 dist:\nplan(undefined) 在 request.auditEventId 上抛 TypeError,createRuntimeAuditAppendAdmissionPlanner()\n的 bundled deny-all 走同一条路——\"什么都不放行\"的最后一道在畸形入参下抛异常,等于没有兜底。\n请求来自 JSON(夹具、Owner 写入口载荷),声明类型只约束调用方。\n\n本域其余部分改前就已失败关闭,一行未动:plan({}) → REJECT、details 非对象 → REJECT、\nchanges 非数组 → REJECT、refresh(undefined) → applied:false、快照 validated 非真在 create 期抛、\ndetails 带 password → AUDIT_DETAIL_FORBIDDEN 且回 forbiddenDetails、outcome 大写 → REJECT。\n\n补 AUDIT_APPEND_REQUEST_INVALID 一条稳定原因码并钉进夹具(71a04df 的 81 例未覆盖它——\n该原因码此前不存在)。夹具 81 → 82 例(正 11 / 反 71)0 失败;模块单测 136 例;\n负向实做:把该例声明原因改成不会产生的串,门禁 exit 1 并点名,还原后 exit 0。\n覆盖度探针两档归零(未接线 0 处、夹具与单测都没有 0 条)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/64bc6f5489ead3c65b23869f5e8866202e60b855","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-18T17:03:47-07:00","added":[],"removed":[],"modified":["runtime/modules/audit/src/domain/audit-append-planner.ts","runtime/modules/audit/test/fixtures/audit.fixtures.json"]},{"id":"71a04df0f09c8ff265e6f87c0f9016b61f84b4eb","message":"test(runtime): audit 追加准入接进门禁,10 处未接线全部收口——三档归零,17 套件 706 例\n\n最后一处:LocalAuditAppendAdmissionPlanner(734 行、本仓最大的一支 planner、三个公开方法)整支未接线。\n既有四条规则走的是事件预检与提交协议;追加准入——服务与动作登记、环境 allowlist、结果与理由码\nallowlist、details / changes 白名单与上限、权限与 Scope 决策引用、时钟偏移与事件时效、快照热更——\n一条都不在门禁上。补 append-plan / append-refresh 两条规则,判定按 kind(BLOCKED 携带 blockers)。\n接上后新暴露 41 条,逐条钉完回到 0。夹具 27 → 81 例(正 11 / 反 70)。\n\n顺带补掉 permission 的 2 条残留「仅单测」(ACTOR_CREDENTIAL_MISMATCH / TENANT_ID_INVALID)——\n那个模块的三支判定由并行会话 2822c4d 接线,这两条是接线后新暴露、尚未钉住的。夹具 68 → 70 例。\n\n至此 CLAUDE.md 登记的 10 处未接线全部收口,接线顺序与新暴露的原因码数:\n 跨域流程 refresh +4 / scope 整支 +15 / credential 整支 +6 / ai-gateway 路由与 planAiRoute +7 /\n fact 导出准入 +34 / permission 三支(并行会话,残留 2 条本次补)/ audit 追加准入 +41\n合计 109 条原因码此前任何入口都走不到——这正是「读数为 0 不等于收口」的量级。\nCLAUDE.md 同段已从「均未处理」改为已收口,并留下这份接线顺序与数字。\n\n证据:pnpm check:fixtures 17 套件 706 例 0 失败 0 不可用(此前 468 例);\nfixture-coverage 三档(都没有 / 仅单测 / 未接线)15 个套件全为 0;\nmodule-audit test 135/135、module-permission test 110/110、两模块 typecheck 绿;\n工作区一致性门禁只剩既有的 L9 compose project 撞名。\n规则源码一行未改——七次接线动的都只是评估器与夹具。本次不回绑任何 reports/。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/71a04df0f09c8ff265e6f87c0f9016b61f84b4eb","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-18T17:03:02-07:00","added":[],"removed":[],"modified":["CLAUDE.md","runtime/modules/audit/src/domain/fixture-evaluator.ts","runtime/modules/audit/test/fixtures/audit.fixtures.json","runtime/modules/permission/test/fixtures/permission.fixtures.json"]},{"id":"68116db133192fb66e0a6f84ee7b34cac74c9667","message":"test(runtime): fact 的生产侧导出准入不在门禁上——补 export-plan / export-refresh,10 处的第 6 处\n\n结构比对报出 LocalFactExportAdmissionPlanner(549 行、三个公开方法)整支未接线:本模块此前只有\ndelivery 一条规则,管的是消费侧分类(重复 / 乱序 / 缺口 / 毒消息);生产侧的导出准入——事实登记、\n生产者应用与主体、Schema 摘要与兼容性、实体前缀、目录版本水位、双时间顺序、快照热更——一条都不在\n门禁上。判定逻辑一行未改,判定按 kind(BLOCKED 携带 blockers 而非 reasons)。\n\n接上后新暴露 33 条「夹具与单测都没有」+ 1 条「仅单测」,是本批到目前为止最多的一次——因为这支\nplanner 的请求体检面最宽(26 个字段)。逐条钉完回到 0。\n\n覆盖:夹具 10 → 56 例(正 5 / 反 51),规则 1 → 3;三档均为 0。新钉住的包括\nFACT_SCHEMA_NOT_REGISTERED / FACT_PRODUCER_APP_MISMATCH / FACT_PRODUCER_PRINCIPAL_NOT_REGISTERED /\nFACT_SCHEMA_DIGEST_MISMATCH / FACT_ENTITY_ID_PREFIX_MISMATCH / FACT_CATALOG_VERSION_MISMATCH /\nRECORDED_AT_BEFORE_EFFECTIVE_AT——\"谁有资格往事实流里写\"这一整面此前门禁上一条没有。\n\n工具化:这轮把「按探针给出的触发路径逐条生成用例并用真实产出回填」写成了一次性脚本跑(34 例),\n比手写快得多,也避免了我前几轮那种\"挑错底例\"的手误;每例生成后仍逐条核了\"确实拒绝\"。\n\n证据:pnpm --dir runtime --filter @juhai/module-fact test 94/94、typecheck 绿、\n该套件夹具 56/56 失败 0、fixture-coverage 三档全 0。本次不回绑任何 reports/。\n\n进度:10 处已收 6 处。余 4 处在 permission 3 / audit 1。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/68116db133192fb66e0a6f84ee7b34cac74c9667","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-18T17:01:01-07:00","added":[],"removed":[],"modified":["runtime/modules/fact/src/domain/fixture-evaluator.ts","runtime/modules/fact/test/fixtures/fact.fixtures.json"]}],"total_commits":0,"head_commit":{"id":"64bc6f5489ead3c65b23869f5e8866202e60b855","message":"fix(modules): audit 追加准入 plan() 补请求体检——兜底 deny-all 此前也抛\n\n71a04df 把本域接进了门禁(10 处未接线全部收口),但没动判定本身。实测 dist:\nplan(undefined) 在 request.auditEventId 上抛 TypeError,createRuntimeAuditAppendAdmissionPlanner()\n的 bundled deny-all 走同一条路——\"什么都不放行\"的最后一道在畸形入参下抛异常,等于没有兜底。\n请求来自 JSON(夹具、Owner 写入口载荷),声明类型只约束调用方。\n\n本域其余部分改前就已失败关闭,一行未动:plan({}) → REJECT、details 非对象 → REJECT、\nchanges 非数组 → REJECT、refresh(undefined) → applied:false、快照 validated 非真在 create 期抛、\ndetails 带 password → AUDIT_DETAIL_FORBIDDEN 且回 forbiddenDetails、outcome 大写 → REJECT。\n\n补 AUDIT_APPEND_REQUEST_INVALID 一条稳定原因码并钉进夹具(71a04df 的 81 例未覆盖它——\n该原因码此前不存在)。夹具 81 → 82 例(正 11 / 反 71)0 失败;模块单测 136 例;\n负向实做:把该例声明原因改成不会产生的串,门禁 exit 1 并点名,还原后 exit 0。\n覆盖度探针两档归零(未接线 0 处、夹具与单测都没有 0 条)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/64bc6f5489ead3c65b23869f5e8866202e60b855","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-18T17:03:47-07:00","added":[],"removed":[],"modified":["runtime/modules/audit/src/domain/audit-append-planner.ts","runtime/modules/audit/test/fixtures/audit.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":21639,"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-19T08:00:45+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
|
1789776505
|
0
|
1789776378
|
1789776505
|
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
|
|
24195
|
docs(提案): fixture-coverage 探针是否接进门禁流——请门禁 Owner 裁三 docs(提案): fixture-coverage 探针是否接进门禁流——请门禁 Owner 裁三件事...
|
116
|
5
|
platform.yml
|
161
|
5
|
0
|
refs/heads/main
|
aac7c6046805e0336f73206b88fdd993afc991b9
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"64bc6f5489ead3c65b23869f5e8866202e60b855","after":"aac7c6046805e0336f73206b88fdd993afc991b9","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/64bc6f5489ead3c65b23869f5e8866202e60b855...aac7c6046805e0336f73206b88fdd993afc991b9","commits":[{"id":"aac7c6046805e0336f73206b88fdd993afc991b9","message":"docs(提案): fixture-coverage 探针是否接进门禁流——请门禁 Owner 裁三件事\n\n不是裁决,未实施任何接线。提案的核心事实是一条结构性盲区:check:gate-flow 的扫描面是\n根 package.json 的 scripts,而这个探针根本不是一个 script——于是它对那道「专门用来抓\n门禁的失败信号没人看」的门禁结构性不可见,既不在统一流内也不在任何 CI 链里。\n\n价值证据是今天一天的实况:仅靠手动敲它,报出六个模块 10 处判定面「评估器没接线」\n(含 393 行、734 行两整支规则),驱动 permission 夹具 11 → 68、audit 27 → 82,并暴露出\n「按字段存在与否判放行」这一 bug 类。这些对当时在跑的每一道门禁都不可见——check:fixtures\n只能证明已登记的用例都对,证明不了该登记的都登记了。\n\n三个必须先解决的设计问题均已实测,其中第一条最要命:在干净检出里不构建直接跑,15 个\n套件全部跳过,而 --json 的两个总数双双为 0、退出码 0——naive 接进 CI 就是一道永远绿的\n门禁。另两条是陈旧 dist 会假红(本会话被 fact 误报咬过一次),以及 nowhereTotal 在改进\n过程中非单调(permission 实测 0 → 40 → 0),对它上棘轮会阻断正在改进覆盖的提交本身。\n\n推荐紧跟 check:fixtures 之后接(复用其构建,增量 1.4 秒)、空跑失败关闭、只对\nwiringTotal 上棘轮;若认为改造暂不值当,至少给它一条带复核期的登记。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/aac7c6046805e0336f73206b88fdd993afc991b9","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-18T17:07:21-07:00","added":["docs/夹具覆盖度探针接入提案-2026-09-18.md"],"removed":[],"modified":[]}],"total_commits":0,"head_commit":{"id":"aac7c6046805e0336f73206b88fdd993afc991b9","message":"docs(提案): fixture-coverage 探针是否接进门禁流——请门禁 Owner 裁三件事\n\n不是裁决,未实施任何接线。提案的核心事实是一条结构性盲区:check:gate-flow 的扫描面是\n根 package.json 的 scripts,而这个探针根本不是一个 script——于是它对那道「专门用来抓\n门禁的失败信号没人看」的门禁结构性不可见,既不在统一流内也不在任何 CI 链里。\n\n价值证据是今天一天的实况:仅靠手动敲它,报出六个模块 10 处判定面「评估器没接线」\n(含 393 行、734 行两整支规则),驱动 permission 夹具 11 → 68、audit 27 → 82,并暴露出\n「按字段存在与否判放行」这一 bug 类。这些对当时在跑的每一道门禁都不可见——check:fixtures\n只能证明已登记的用例都对,证明不了该登记的都登记了。\n\n三个必须先解决的设计问题均已实测,其中第一条最要命:在干净检出里不构建直接跑,15 个\n套件全部跳过,而 --json 的两个总数双双为 0、退出码 0——naive 接进 CI 就是一道永远绿的\n门禁。另两条是陈旧 dist 会假红(本会话被 fact 误报咬过一次),以及 nowhereTotal 在改进\n过程中非单调(permission 实测 0 → 40 → 0),对它上棘轮会阻断正在改进覆盖的提交本身。\n\n推荐紧跟 check:fixtures 之后接(复用其构建,增量 1.4 秒)、空跑失败关闭、只对\nwiringTotal 上棘轮;若认为改造暂不值当,至少给它一条带复核期的登记。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/aac7c6046805e0336f73206b88fdd993afc991b9","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-18T17:07:21-07:00","added":["docs/夹具覆盖度探针接入提案-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":21719,"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-19T08:06: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
|
3
|
10
|
0
|
1789776552
|
0
|
1789776505
|
1789776552
|
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
|
|
24196
|
feat(治理): 删除 G-12 本地旁路开关——在计费尚未恢复时删,此后发布只有 CI 一条路
|
116
|
5
|
platform.yml
|
162
|
5
|
0
|
refs/heads/main
|
1de65fbbf4f2ae73c374662b9e342934b925556b
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"aac7c6046805e0336f73206b88fdd993afc991b9","after":"1de65fbbf4f2ae73c374662b9e342934b925556b","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/aac7c6046805e0336f73206b88fdd993afc991b9...1de65fbbf4f2ae73c374662b9e342934b925556b","commits":[{"id":"1de65fbbf4f2ae73c374662b9e342934b925556b","message":"feat(治理): 删除 G-12 本地旁路开关——在计费尚未恢复时删,此后发布只有 CI 一条路\n\nG-12 开头把这条通道登记为「临时设施」,约定「计费恢复、CI 发布链可用后应删除」。\n实际走向是它被用了**五趟**(rc.2 / rc.3 / rc.4 / rc.5 / rc.6),成了常态通道。\n\n**在计费尚未恢复时就删,是有意的。** 按原约定等计费恢复再删,等于把退场时机交给一件谁也不知道\n什么时候发生的事;而每多走一趟,「顺手再走一次」的门槛就低一分。删除当天实测:GitHub Actions\n最新 run 35404565689(2026-09-18T23:09,main)仍 failure,job 形态仍是计费停摆的典型\n(两个 failure + 其余 skipped),GitHub 镜像落后 46 条。\n\n改动:publish-rc.mjs 删去 localBypass 分支与 PLATFORM_RELEASE_BYPASS_CI_EVIDENCE 判读,\n守门回到 if (!dir || process.env.GITHUB_ACTIONS !== 'true')。\nprepare-package-release.mjs 的七道 require 未动,一条也没放宽。\n\n验证(退出码直取、不经管道):非 CI 环境退出码 1;**带已废弃开关退出码同样是 1**,\n脚本内对该变量的引用数为 0。\n\n**直接后果是有意接受的:CI 发布链不可用期间发不了任何 RC**,想发就得先去修 Billing。\n沉没成本一并记清楚:contracts / governance 的 rc.0—rc.6 七个版本永远不会有阶段门证据——\npublish-rc.mjs 拒绝以不同字节覆盖已发布版本,而 CI 版本必然含不同的 provenance.json,\n这七个版本号无法被 CI 重发。\n\nG-12 追加「关闭记录」一节(本文自己要求的),前五节留在原处不动:它们是这条通道存在过、\n以及它如何从「临时」变成「常态」的完整账。CLAUDE.md 的 contracts 条目同步。\n要重新启用须经裁决并在 G-12 追加记录,不要直接把那段代码改回去。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/1de65fbbf4f2ae73c374662b9e342934b925556b","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-18T17:08:52-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/G-12本地旁路发布记录-2026-09-13.md","governance/publish-rc.mjs"]}],"total_commits":0,"head_commit":{"id":"1de65fbbf4f2ae73c374662b9e342934b925556b","message":"feat(治理): 删除 G-12 本地旁路开关——在计费尚未恢复时删,此后发布只有 CI 一条路\n\nG-12 开头把这条通道登记为「临时设施」,约定「计费恢复、CI 发布链可用后应删除」。\n实际走向是它被用了**五趟**(rc.2 / rc.3 / rc.4 / rc.5 / rc.6),成了常态通道。\n\n**在计费尚未恢复时就删,是有意的。** 按原约定等计费恢复再删,等于把退场时机交给一件谁也不知道\n什么时候发生的事;而每多走一趟,「顺手再走一次」的门槛就低一分。删除当天实测:GitHub Actions\n最新 run 35404565689(2026-09-18T23:09,main)仍 failure,job 形态仍是计费停摆的典型\n(两个 failure + 其余 skipped),GitHub 镜像落后 46 条。\n\n改动:publish-rc.mjs 删去 localBypass 分支与 PLATFORM_RELEASE_BYPASS_CI_EVIDENCE 判读,\n守门回到 if (!dir || process.env.GITHUB_ACTIONS !== 'true')。\nprepare-package-release.mjs 的七道 require 未动,一条也没放宽。\n\n验证(退出码直取、不经管道):非 CI 环境退出码 1;**带已废弃开关退出码同样是 1**,\n脚本内对该变量的引用数为 0。\n\n**直接后果是有意接受的:CI 发布链不可用期间发不了任何 RC**,想发就得先去修 Billing。\n沉没成本一并记清楚:contracts / governance 的 rc.0—rc.6 七个版本永远不会有阶段门证据——\npublish-rc.mjs 拒绝以不同字节覆盖已发布版本,而 CI 版本必然含不同的 provenance.json,\n这七个版本号无法被 CI 重发。\n\nG-12 追加「关闭记录」一节(本文自己要求的),前五节留在原处不动:它们是这条通道存在过、\n以及它如何从「临时」变成「常态」的完整账。CLAUDE.md 的 contracts 条目同步。\n要重新启用须经裁决并在 G-12 追加记录,不要直接把那段代码改回去。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/1de65fbbf4f2ae73c374662b9e342934b925556b","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-18T17:08:52-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/G-12本地旁路发布记录-2026-09-13.md","governance/publish-rc.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":21727,"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-19T08:08: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
|
10
|
0
|
1789776809
|
0
|
1789776552
|
1789776809
|
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
|
|
24197
|
docs(提案): 补裁决结果——Owner 取方案 B,已实施 @ ab28a95 / 83a55 docs(提案): 补裁决结果——Owner 取方案 B,已实施 @ ab28a95 / 83a5542...
|
116
|
5
|
platform.yml
|
163
|
5
|
0
|
refs/heads/main
|
a15707432a286d35400876ba0420d6953cdee0fa
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"1de65fbbf4f2ae73c374662b9e342934b925556b","after":"a15707432a286d35400876ba0420d6953cdee0fa","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/1de65fbbf4f2ae73c374662b9e342934b925556b...a15707432a286d35400876ba0420d6953cdee0fa","commits":[{"id":"a15707432a286d35400876ba0420d6953cdee0fa","message":"docs(提案): 补裁决结果——Owner 取方案 B,已实施 @ ab28a95 / 83a5542\n\n提案正文 §1—§6 保留提出时原貌不回改,结果另起 §7;抬头改为「已裁定并实施完毕」,\n免得它腐烂成一份看起来还未决的提案。§7 另记一处提案里没写、实施时才发现的证据污染:\n显式 --suite 写仓级报告等于拿合成套件的结论冒充全仓结论,现只有全量扫描才产出。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a15707432a286d35400876ba0420d6953cdee0fa","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-18T17:13:23-07:00","added":[],"removed":[],"modified":["docs/夹具覆盖度探针接入提案-2026-09-18.md"]},{"id":"a81cb95d81f556b81cfd37184dda2ee9e6ee816e","message":"chore(reports): check:fixtures 回绑 @ ab28a95 —— 补上 10 处接线那一批欠的回绑\n\nreports/fixtures.latest.json 此前绑在 62c9d95(17 套件 468 例),check:evidence 报 EVIDENCE_STALE:\n作用域内 18 个文件已变更。增量来自本会话接线那一批六条提交——475704b(跨域流程 refresh)、\na2a86a7(scope)、f28f8f9(credential)、fe96fe6(ai-gateway)、68116db(fact)、71a04df(audit\n+ permission 残留)。每轮都写了「本次不回绑」(工作树有并行会话 WIP,拿不到 worktreeDirty=false),\n后续没人补,成了欠账。\n\n回绑做法同上一次:在 企业控制面/.worktrees/rebind-fixtures-2 开 detached 干净检出(HEAD ab28a95),\n把主检出的 node_modules 软链进去(软链不被 .gitignore 的 node_modules/ 目录规则匹配,故写进本地\ninfo/exclude,用后删除,不改仓内 .gitignore),build contracts 与七模块后跑 check:fixtures,\n确认 git status 为空再出报告,最后只把这一份 report 拷回主检出、按 pathspec 单独提交。\n\n只拷这一份:主检出里并行会话另有一批报告 WIP,以及他们刚加的 reports/fixture-coverage.latest.json\n(fixture-coverage 由诊断升格为门禁后的首份产物,已由他们自己在 83a5542 回绑),一个都没碰。\n\n结果:provenance gitSha=ab28a95、worktreeDirty=false,17 套件 701 例 0 失败 0 不可用(此前 468 例)。\n83a5542 只新增了 reports/fixture-coverage.latest.json,不在本报告作用域内,故 ab28a95 的绑定仍成立。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a81cb95d81f556b81cfd37184dda2ee9e6ee816e","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-18T17:13:20-07:00","added":[],"removed":[],"modified":["reports/fixtures.latest.json"]},{"id":"4ead62835b2d39b84f434f333175e42d45885486","message":"chore(reports): check:gate-flow 回绑 @ 83a5542\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,绑 83a5542 / worktreeDirty=false。\n\n此前工作区里那份是脏树产物(绑 1de65fb、dirty=true,是本会话跑 pnpm check 时就地覆写的),\n已还原后重跑。gate-flow 的作用域含根 package.json,1de65fb 之后它又被改过,所以绑定要跟到当前 HEAD。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/4ead62835b2d39b84f434f333175e42d45885486","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-18T17:13:19-07:00","added":[],"removed":[],"modified":["reports/gate-flow.latest.json"]},{"id":"83a554271fb7d176e403778575e45d1cd480aae9","message":"chore(reports): check:fixture-coverage 首份回绑 @ ab28a95\n\n本门禁在 ab28a95 升格后的第一份仓级证据:15 个套件、未接线 0 处、夹具与单测都没有 0 条,\nstatus=passed;provenance 绑 ab28a95、worktreeDirty=false。\n\n主工作区常驻并行会话在途文件、拿不到干净树,按偏差 #34-A 的路径在 HEAD 开 worktree\n(落在 企业控制面/.worktrees/)装依赖、构建 dist 后跑门禁再带回。本门禁依赖 runtime 七模块\n与 contracts 的 dist,故与 check:fixtures 同属 reports:rebind 工具拒绝的那一类,手工补上\ninstall 与 build 两步。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/83a554271fb7d176e403778575e45d1cd480aae9","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-18T17:12:44-07:00","added":["reports/fixture-coverage.latest.json"],"removed":[],"modified":[]},{"id":"ab28a95de59f5253872b51b3d03bb8f7a4c6598c","message":"feat(governance): fixture-coverage 由诊断工具升格为门禁并串进 check 链(Owner 裁方案 B)\n\n按 docs/夹具覆盖度探针接入提案-2026-09-18.md,门禁 Owner 裁定方案 B。提案 §4.2 的三条\n实测约束逐条落地,其中第一条是升格的前提:\n\n① 空跑即红。此前在干净检出里不构建直接跑,15 个套件全部「(未构建,跳过)」,而 --json\n 的 nowhereTotal / wiringTotal 双双为 0、退出码 0——人读的输出诚实,机器读的那份假绿,\n naive 接进 CI 就是一道永远绿的门禁。现照 check-fixtures.mjs 的既有语义:未构建的套件\n 计入 unavailable,默认失败关闭;--allow-unavailable 只降级「部分不可用」,不放行\n 「一个都跑不了」。\n\n② 只阻断 wiringTotal(未接线判定面)。它单调,适合做阻断项。\n\n③ nowhereTotal 只记不拦。它在改进过程中非单调(permission 实测 0 → 40 → 0:接线让新面\n 第一次被走到,钉完才回零),拿它阻断会拦住正在改进覆盖的那条提交本身。\n\n另修一处会污染证据的设计:显式 --suite 是定向排查与单元测试的用法,让它写\nreports/fixture-coverage.latest.json 等于拿合成套件的结论冒充全仓结论(本仓 pnpm test\n曾因此覆盖真实报告)。现只有全量扫描才产出仓级报告。\n\n接线位置紧跟 check:fixtures,复用它已建好的 dist,增量 1.4 秒;两份 CI 的 static job 跑的\n就是根 pnpm check,故无需改工作流。evidence-scopes 登记一条(error 级,作用域 = 套件清单 +\n探针 + 两侧 evaluator + 夹具用例文件)。check:gate-flow 因其已在链内不再需要具名登记。\n\n负向实做四项,全部转为回归用例(governance 测试 366 → 370):空跑 exit 1、\n--allow-unavailable 仍不放行空跑、未接线 exit 1、全接线 exit 0;另有一项手工实做——\n把 dist 里的 planner.refresh( 改成等价的 planner[\"refresh\"]((运行时行为不变,只是正则\n不再匹配),门禁精确报出 LocalAuditAppendAdmissionPlanner.refresh() 并 exit 1,还原后 exit 0。\n\n根链跑到本门禁为 passed(15 套件 / 未接线 0 / 都没有 0)。链上唯一的红是 check:docs-truth,\n与本轮无关:c4ec6f6 把 ui-acceptance 重绑到 67e8193 却没回灌 runtime/CLAUDE.md 动态区,\n已在 HEAD 干净检出复现。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/ab28a95de59f5253872b51b3d03bb8f7a4c6598c","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-18T17:12:04-07:00","added":[],"removed":[],"modified":["governance/evidence-scopes.json","governance/fixture-coverage.mjs","governance/test/fixture-coverage.test.mjs","package.json"]}],"total_commits":0,"head_commit":{"id":"a15707432a286d35400876ba0420d6953cdee0fa","message":"docs(提案): 补裁决结果——Owner 取方案 B,已实施 @ ab28a95 / 83a5542\n\n提案正文 §1—§6 保留提出时原貌不回改,结果另起 §7;抬头改为「已裁定并实施完毕」,\n免得它腐烂成一份看起来还未决的提案。§7 另记一处提案里没写、实施时才发现的证据污染:\n显式 --suite 写仓级报告等于拿合成套件的结论冒充全仓结论,现只有全量扫描才产出。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a15707432a286d35400876ba0420d6953cdee0fa","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-18T17:13:23-07:00","added":[],"removed":[],"modified":["docs/夹具覆盖度探针接入提案-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":21759,"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-19T08:09: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
|
34
|
1789777085
|
1789778117
|
0
|
1789776810
|
1789778311
|
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
|
|
24198
|
chore(reports): 工作台两份快照回绑 @ a157074
|
116
|
5
|
platform.yml
|
164
|
5
|
0
|
refs/heads/main
|
d7d9fe5adc753a199dba41ec4be184d3db5053c4
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"a15707432a286d35400876ba0420d6953cdee0fa","after":"d7d9fe5adc753a199dba41ec4be184d3db5053c4","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/a15707432a286d35400876ba0420d6953cdee0fa...d7d9fe5adc753a199dba41ec4be184d3db5053c4","commits":[{"id":"d7d9fe5adc753a199dba41ec4be184d3db5053c4","message":"chore(reports): 工作台两份快照回绑 @ a157074\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,两份均绑 a157074 /\nworktreeDirty=false。两份由同一脚本(build-workbench-snapshots.mjs)产出,rebind 登记要求\n一起带回——分开提交会让它们绑不同提交,「同一次快照」这个前提就没了。\n\nops-snapshot 此前绑 73e36fd 过期,触发是并行会话的 21d7c1a 改了 docs/runbook.md\n(该报告的作用域含它)。回绑前先还原了 reports/evidence-freshness.latest.json——\n那份是本会话跑 pnpm check 时就地覆写的脏树产物(绑 5116dc5、dirty=true),\n它落在 ops-snapshot 的作用域里,不还原 rebind 会因「作用域内有未提交输入」拒绝。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/d7d9fe5adc753a199dba41ec4be184d3db5053c4","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-18T17:18:31-07:00","added":[],"removed":[],"modified":["reports/workbench-catalog-snapshot.latest.json","reports/workbench-ops-snapshot.latest.json"]}],"total_commits":0,"head_commit":{"id":"d7d9fe5adc753a199dba41ec4be184d3db5053c4","message":"chore(reports): 工作台两份快照回绑 @ a157074\n\n经 governance/rebind-reports.mjs 在 HEAD 的临时干净检出里重跑,两份均绑 a157074 /\nworktreeDirty=false。两份由同一脚本(build-workbench-snapshots.mjs)产出,rebind 登记要求\n一起带回——分开提交会让它们绑不同提交,「同一次快照」这个前提就没了。\n\nops-snapshot 此前绑 73e36fd 过期,触发是并行会话的 21d7c1a 改了 docs/runbook.md\n(该报告的作用域含它)。回绑前先还原了 reports/evidence-freshness.latest.json——\n那份是本会话跑 pnpm check 时就地覆写的脏树产物(绑 5116dc5、dirty=true),\n它落在 ops-snapshot 的作用域里,不还原 rebind 会因「作用域内有未提交输入」拒绝。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/d7d9fe5adc753a199dba41ec4be184d3db5053c4","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-18T17:18:31-07:00","added":[],"removed":[],"modified":["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":21824,"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-19T08:13: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
|
10
|
0
|
1789777366
|
0
|
1789777125
|
1789777366
|
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
|
|
24199
|
chore(reports): sbom 回绑——包清单一字未变,因为镜像还是 106 个提交前那个
|
116
|
5
|
platform.yml
|
165
|
5
|
0
|
refs/heads/main
|
e3b9d12525448038fd8d8ac3f3c1470552ce4ff7
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"d7d9fe5adc753a199dba41ec4be184d3db5053c4","after":"e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/d7d9fe5adc753a199dba41ec4be184d3db5053c4...e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","commits":[{"id":"e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","message":"chore(reports): sbom 回绑——包清单一字未变,因为镜像还是 106 个提交前那个\n\nlockfile 模式扫 reports/image-digest.json 指向的镜像(sha256:c0869934…,本机 docker 里还在),\n268 个包,worktreeDirty=false。\n\n**这次回绑没有改变任何实质结论:** 触发过期的是 63ff31f 改的 runtime/pnpm-lock.yaml(把 clients\n三包的 devDeps pin 成 exact),而 SBOM 描述的是镜像里的物料——镜像绑的源提交 05e3826 距当前 HEAD\n106 个提交,那些改动根本还没进镜像。逐包比对确认:新旧两份的包清单完全一致,变的只有 SPDX 生成时间戳。\n\n诚实读法:**provenance.gitSha 说「我是在哪跑的」,sourceSha 说「我描述的是 05e3826 的镜像」——\n两者相距 106 个提交。** 作用域纳入 runtime/pnpm-lock.yaml,是为了在锁文件变动时提醒「SBOM 可能\n不再反映当前源码」;正确回应是**重建镜像**(需 BuildKit + Gitea token,不在本机这轮范围),\n而不是重跑一遍生成器。回绑只是让证据链不挂着一条无人处理的红,没有解决镜像落后本身。\n\ncoverage 仍是 partial:只含 /srv/runtime/apps/api-nestjs 的 Node 依赖,不含基础镜像的 Debian 包。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","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-18T17:22:33-07:00","added":[],"removed":[],"modified":["reports/sbom.latest.json","reports/sbom.spdx.json"]},{"id":"a48cbd69d9411a1c7bc85e0fb97520c4392d1e73","message":"docs(证据): 补 identity/reports 的扫描面处置说明,并修掉它已造成的一处数字漂移\n\n全仓盲区复核查出的唯一真发现:check-evidence-freshness.mjs 只扫 reports/ 与\nruntime/reports/ 两个目录(写死在源码里),identity/reports/ 的 15 份报告既不在作用域\n登记里、也不在未登记账里——不是「未登记」,是压根没被看见。\n\nidentity 是 PF-07 阶段 1 的过渡工作区,按仓纪律 7 其三级门禁不进根 pnpm check 链,这层\n分离是有意的;但报告新鲜度的失察不是:那 15 份确实被当证据用(verify:candidate 从\nidentity/reports/baseline.json 读测试地板,docs/项目完整能力表.md E03 直接引用两份),\n而 identity 自带的 check:docs-truth 有 0 条 freshness-sha-* 断言(runtime 版有 4 条),\n于是「报告往前跑了、文档没跟上」这类漂移没有任何一道门禁能发现。\n\n它已经真的发生了。三处文档写 runtime 255 / UI 12 @ 85d538b,而报告实际绑:\nruntime-acceptance @ 25ead3e(2026-09-12,261 项 / 地板 255)、ui-acceptance @ 90cda56\n(2026-09-13,12 项)、dual-backend-behavior @ 25ead3e(差分 0)。三处按文档既有的\n「当前 + 历史」体例改正,85d538b 那轮移入历史;该次报告未记录的细节(新 UI 运行的\nWeb / API 端口)不补写,明示未记录。\n\n处置说明写进 undeclaredNote,含二选一出口(纳入扫描面逐份登记,或给 identity 的\ncheck-docs-truth 补 freshness-sha-* 断言)并注明 PF-07 阶段 2 后此条作废——但在那之前\n不得把「将来会消失」当作现在不管的理由。归门禁 Owner 裁。\n\n核验:check:evidence 未登记账仍 10 份 0 份无说明;identity check:governance-docs 与\ncheck:docs-truth 均绿;工作区一致性 L4 / L10 / L13 均 0。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a48cbd69d9411a1c7bc85e0fb97520c4392d1e73","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-18T17:20:16-07:00","added":[],"removed":[],"modified":["CLAUDE.md","docs/项目完整能力表.md","governance/evidence-scopes.json","identity/CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","message":"chore(reports): sbom 回绑——包清单一字未变,因为镜像还是 106 个提交前那个\n\nlockfile 模式扫 reports/image-digest.json 指向的镜像(sha256:c0869934…,本机 docker 里还在),\n268 个包,worktreeDirty=false。\n\n**这次回绑没有改变任何实质结论:** 触发过期的是 63ff31f 改的 runtime/pnpm-lock.yaml(把 clients\n三包的 devDeps pin 成 exact),而 SBOM 描述的是镜像里的物料——镜像绑的源提交 05e3826 距当前 HEAD\n106 个提交,那些改动根本还没进镜像。逐包比对确认:新旧两份的包清单完全一致,变的只有 SPDX 生成时间戳。\n\n诚实读法:**provenance.gitSha 说「我是在哪跑的」,sourceSha 说「我描述的是 05e3826 的镜像」——\n两者相距 106 个提交。** 作用域纳入 runtime/pnpm-lock.yaml,是为了在锁文件变动时提醒「SBOM 可能\n不再反映当前源码」;正确回应是**重建镜像**(需 BuildKit + Gitea token,不在本机这轮范围),\n而不是重跑一遍生成器。回绑只是让证据链不挂着一条无人处理的红,没有解决镜像落后本身。\n\ncoverage 仍是 partial:只含 /srv/runtime/apps/api-nestjs 的 Node 依赖,不含基础镜像的 Debian 包。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","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-18T17:22:33-07:00","added":[],"removed":[],"modified":["reports/sbom.latest.json","reports/sbom.spdx.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":21838,"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-19T08:18:45+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
|
1789777575
|
0
|
1789777366
|
1789777575
|
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
|
|
24200
|
chore(reports): identity docs-truth 回绑 @ 1f3ff8c — chore(reports): identity docs-truth 回绑 @ 1f3ff8c —— 含新增的两条 freshness 断言...
|
116
|
5
|
platform.yml
|
166
|
5
|
0
|
refs/heads/main
|
6687aecfababeb5c03b9fa56d306e8212e79e107
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"e3b9d12525448038fd8d8ac3f3c1470552ce4ff7","after":"6687aecfababeb5c03b9fa56d306e8212e79e107","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/e3b9d12525448038fd8d8ac3f3c1470552ce4ff7...6687aecfababeb5c03b9fa56d306e8212e79e107","commits":[{"id":"6687aecfababeb5c03b9fa56d306e8212e79e107","message":"chore(reports): identity docs-truth 回绑 @ 1f3ff8c —— 含新增的两条 freshness 断言\n\n绑 1f3ff8c、worktreeDirty=false、docsTruthViolations=0。该门禁自身零依赖,故在 HEAD 的\n干净 worktree 里直接 node 即可跑出,不需要 install。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/6687aecfababeb5c03b9fa56d306e8212e79e107","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-18T17:24:55-07:00","added":[],"removed":[],"modified":["identity/reports/docs-truth.latest.json"]},{"id":"1f3ff8c8f7d688955cc786f83cc79cc21fd73cc2","message":"feat(identity): check:docs-truth 补 freshness-sha 断言,证据处置出口 ② 落地\n\na48cbd6 登记的二选一出口,门禁 Owner 取 ②。identity 的报告此前两头都照不到:\nidentity/reports 不在 governance/check-evidence-freshness.mjs 的扫描面内(那边只扫\nreports/ 与 runtime/reports/),而 identity 自带的 check:docs-truth 有 0 条 freshness\n断言(runtime 版有 4 条)。当日实测它已真的漂了一次——动态区写 255 / 12 @ 85d538b,\n报告实际是 25ead3e(261 项)与 90cda56(UI 12)。\n\n口径移植自 runtime/scripts/check-docs-truth.mjs,保留其三条设计判断,逐条都有理由:\n\n 刻意不含静态级——governance.latest.json 每次 check 都重绑当时 HEAD,对它断言等价于\n 「每次提交都必须改文档」,提交报告后必红,那是会误杀的门禁不是有牙的门禁。\n\n 未接线的级别跳过而不是判红——恒红门禁不携带信息。本仓只接了 check:runtime 与 check:ui,\n 故只有这两条;deployment / production 两级在 identity 不存在,未列入。\n\n 必须是声明形式——上游实锤过一次自我假绿:条目为说明陈旧度写了提交区间 A..B,裸 includes\n 命中散文里的顺带提及,于是「文档声明 A、报告是 B」这个断言唯一要防的形态被整个绕过。\n\n与上游的唯一差异:本仓动态区写法是 clean commit `sha`(上游是 clean `sha`),两种都认——\n让断言认识本仓真实措辞,而不是为迁就工具去改文档。\n\n负向三项实做:① 把 runtime 条目 SHA 改回 85d538b → exit 1 并点名期望形式;② SHA 只出现在\n提交区间里(clean commit `85d538b`(区间 85d538b..25ead3e))→ 仍 exit 1,即上游那条陷阱\n在本仓也拦得住;③ UI 条目单独篡改 → exit 1。三项还原后均 exit 0。\n\nevidence-scopes 的处置说明同步更新:② 标记为已实施并记下负向证据;① 明示未做且暂不做\n(identity 按仓纪律 7 本就与根链分离,扩面会把 15 份一次性拖进根链账),现状是「identity\n的报告由 identity 自己的门禁守新鲜度」,边界清楚。本条仍随 PF-07 阶段 2 折入后作废。\n\n报告未随本提交:identity/reports/docs-truth.latest.json 我跑出来的那份绑脏树,已还原,\n按纪律在干净检出重出后另起 chore(reports)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/1f3ff8c8f7d688955cc786f83cc79cc21fd73cc2","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-18T17:24:38-07:00","added":[],"removed":[],"modified":["governance/evidence-scopes.json","identity/scripts/check-docs-truth.mjs"]},{"id":"a0145351979f7cf18de29b182000f791d6f5de05","message":"chore(reports): release-manifest 与 port-conformance 回绑 @ e3b9d12 —— 离线可跑的那批收口\n\n排查 7 条过期证据后分三组:A 组离线可跑、B 组要重建镜像并重启容器、C 组要真实 DB / Redpanda 验收。\n本次收 A 组。sbom 那条已由并行会话 e3b9d12 先收(包清单一字未变,因为镜像还是 106 个提交前那个),\n故 A 组实收两条。\n\n- release-manifest:结论仍是 partial,缺 signature(缺少与本次 registry 镜像绑定且 cosign 验证成功的\n 签名,§3A D-2)。回绑的是「当前确实缺这一项」这个事实,不是把它跑绿。\n- port-conformance:passed。\n\n回绑做法同前几次:企业控制面/.worktrees/rebind-a 开 detached 干净检出(HEAD e3b9d12),软链主检出的\nnode_modules(写进本地 info/exclude,用后删除),build contracts / modules / clients 后逐条跑,\n只把这两份 report 拷回主检出、按 pathspec 单独提交——主检出里并行会话另有十余份报告 WIP,一份没碰。\n\n过程中一处返工:首次跑 port-conformance 失败于 `Command \"vitest\" not found`——runtime/test 是独立\nworkspace 包,我第一轮软链只覆盖了 modules / packages / apps / clients,漏了它。补上软链后 passed。\n失败那份报告没有拷回。\n\n结果:两份 provenance 均 gitSha=e3b9d12、worktreeDirty=false;e3b9d12..HEAD 未触及这两份的作用域输入,\n绑定仍成立。\n\n未收(已登记,需你决定):\n B 组 deployed-runtime —— BUILT_IMAGE_SOURCE_BEHIND,运行容器镜像源 05e3826,HEAD 已有 23 个运行时\n 输入变更(其中含本会话接线那批 fixture-evaluator 与夹具)。要 image:build 重建 + 重启 runtime 容器。\n C 组 runtime-acceptance / mainline-acceptance / revocation-sla —— 要真实 PostgreSQL + Redis + Redpanda\n 验收;本机 dev 底座 13 个容器在跑,但会真实读写隔离库。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a0145351979f7cf18de29b182000f791d6f5de05","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-18T17:24:14-07:00","added":[],"removed":[],"modified":["reports/port-conformance.latest.json","reports/release-manifest.latest.json"]}],"total_commits":0,"head_commit":{"id":"6687aecfababeb5c03b9fa56d306e8212e79e107","message":"chore(reports): identity docs-truth 回绑 @ 1f3ff8c —— 含新增的两条 freshness 断言\n\n绑 1f3ff8c、worktreeDirty=false、docsTruthViolations=0。该门禁自身零依赖,故在 HEAD 的\n干净 worktree 里直接 node 即可跑出,不需要 install。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/6687aecfababeb5c03b9fa56d306e8212e79e107","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-18T17:24:55-07:00","added":[],"removed":[],"modified":["identity/reports/docs-truth.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":21967,"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-19T08:22: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
|
33
|
1789778117
|
1789778261
|
0
|
1789777575
|
1789778290
|
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
|
|
24201
|
chore(reports): runtime 静态门禁链 18 份回绑 @ 8a621fd
|
116
|
5
|
platform.yml
|
167
|
5
|
0
|
refs/heads/main
|
12093b843ef69d300370e5da16fcca3399c14d40
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"6687aecfababeb5c03b9fa56d306e8212e79e107","after":"12093b843ef69d300370e5da16fcca3399c14d40","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/6687aecfababeb5c03b9fa56d306e8212e79e107...12093b843ef69d300370e5da16fcca3399c14d40","commits":[{"id":"12093b843ef69d300370e5da16fcca3399c14d40","message":"chore(reports): runtime 静态门禁链 18 份回绑 @ 8a621fd\n\n8a621fd 订正动态区 UI 条目后,docs-truth 的作用域(含 runtime/CLAUDE.md)随之过期;\nruntime check 是一条链、跑一次重出全部 16 项,故整批回绑而不是只挑一份——绑定一致比\n少改几个文件重要(同 b60cc18 的口径)。顺带清掉此前 error 级的 runtime-governance\n(绑 7fc7f02,作用域内 3 个文件已变)。\n\n在 HEAD 的干净 worktree(企业控制面/.worktrees/)装依赖 + prisma:generate 后跑\npnpm --dir runtime check:exit 0、16 项全过;只带回 provenance 绑 8a621fd 且\nworktreeDirty=false 的 18 份。\n\n刻意未带回 4 份:runtime-acceptance / ui-acceptance / conformance-differential 需真实\nDB 与浏览器,不由静态链产出,保持各自原绑定(08c3788 / 67e8193);framework-migration\n至今没有嵌套 provenance,已在 evidence-scopes 未登记账里具名。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/12093b843ef69d300370e5da16fcca3399c14d40","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-18T17:33:42-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":"8a621fdb03a44cebc985f97332ead8bbb785a685","message":"docs(runtime): 动态区 UI 条目订正三处——SHA、端口、验收库;check:docs-truth 转绿\n\nc4ec6f6 把 ui-acceptance 重绑到 67e8193 后没回灌动态区,check:docs-truth 的\nfreshness-sha-ui 从那时起一直红。逐项核对报告后发现**这一行有三处与报告对不上,\n而门禁只抓得到其中一处**:\n\n clean `1b23285` → 报告绑 `67e8193`(门禁抓到的就这条)\n web :3120 / api :3222 → 报告是 web :3100 / api :3202\n 「同上验收库与 Redis」 → UI 用的是 enterprise_platform_ui_acceptance,\n 与上一行 runtime 那轮的 enterprise_platform_acceptance_20260918\n 不是同一个库;Redis 逻辑库(:56380 db7)才是相同的\n\n只换 SHA 会把红变绿却留着后两句假话,故三处一并订正,并把「不是同一个库」写明——\n这一行紧跟在 runtime 条目之后,「同上」原本就容易被读成同一套基座。\n\n顺带记下门禁的覆盖边界:freshness-sha-* 只断言「动态区是否以声明形式写出报告当前的\nSHA」,同一条目里的端口、库名、用例描述都不在它的判据内,可以静默漂移——本次两处正是\n这样漂的。这不是缺陷而是取舍(把整行结构化对账会把门禁变成文档格式检查器),但读的人\n要知道绿不代表整行都对。\n\n核验:pnpm --dir runtime check 现 exit 0、16 项全过(本会话首次整条绿);\ncheck:governance-docs 绿(AGENTS.md 符号链接一致)。本次跑链改脏的 runtime/reports\n已全部还原,报告另在干净检出重出。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/8a621fdb03a44cebc985f97332ead8bbb785a685","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-18T17:32:06-07:00","added":[],"removed":[],"modified":["runtime/CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"12093b843ef69d300370e5da16fcca3399c14d40","message":"chore(reports): runtime 静态门禁链 18 份回绑 @ 8a621fd\n\n8a621fd 订正动态区 UI 条目后,docs-truth 的作用域(含 runtime/CLAUDE.md)随之过期;\nruntime check 是一条链、跑一次重出全部 16 项,故整批回绑而不是只挑一份——绑定一致比\n少改几个文件重要(同 b60cc18 的口径)。顺带清掉此前 error 级的 runtime-governance\n(绑 7fc7f02,作用域内 3 个文件已变)。\n\n在 HEAD 的干净 worktree(企业控制面/.worktrees/)装依赖 + prisma:generate 后跑\npnpm --dir runtime check:exit 0、16 项全过;只带回 provenance 绑 8a621fd 且\nworktreeDirty=false 的 18 份。\n\n刻意未带回 4 份:runtime-acceptance / ui-acceptance / conformance-differential 需真实\nDB 与浏览器,不由静态链产出,保持各自原绑定(08c3788 / 67e8193);framework-migration\n至今没有嵌套 provenance,已在 evidence-scopes 未登记账里具名。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/12093b843ef69d300370e5da16fcca3399c14d40","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-18T17:33:42-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":22003,"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-19T08:26: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
|
3
|
26
|
1789778463
|
1789779510
|
0
|
1789778291
|
1789779516
|
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
|
|
24202
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 47e6 chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 47e6fe3;锚点随批次刷新...
|
76
|
5
|
governance.yml
|
90
|
5
|
0
|
refs/heads/main
|
34aab5dea31113ee2688fd236eea3f382402027e
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","after":"34aab5dea31113ee2688fd236eea3f382402027e","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/2ef8d2fea20dcc03a7397ed3fc71312b675a70d9...34aab5dea31113ee2688fd236eea3f382402027e","commits":[{"id":"34aab5dea31113ee2688fd236eea3f382402027e","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 47e6fe3;锚点随批次刷新\n\n三级证据本批首次同时绑定 clean HEAD `47e6fe3`(worktreeDirty:false):\n\n· runtime 30/30 步、**747 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 七包测试、迁移 deploy/status、auth-startup、db-credential-separation、tracing、\n dependency-resilience、capacity、write-capacity、multi-instance 全通过。\n 747 = 735 + 本批 12 例,与 b71b745 前置写下的预测值一致——预测被实测证实,\n 不是反过来改文档迁就。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate(收尾清单硬条目)。\n\nauth-startup 现有**三类拒启各 2/2**:无验签器、显式 demo、**生产缺 APP_ID**。第三类是本日\n新增,`missingAppIdRejected: 2` 是两个后端都真的起不来的机器回执——它抓到的正是本批自己\n第一版的惰性解析缺陷,不是事后补的装饰。\n\n跑了三轮 runtime,如实记账:\n ① 红在 auth-startup —— 真缺陷(惰性 APP_ID),已修(47e6fe3 的父提交);\n ② 实质全绿但红在收尾 docs-truth 的快照锚点滞后 —— 锚点停在 3949dcc 而 HEAD 已走两步,\n 打穿 C232 的 +1 自指窗。修复提交已把锚点折进去指向其父提交;\n ③ 30/30 全绿,即本提交回绑的这一份。\n第 ② 轮暴露的是我自己的流程错:改变用例数的批次天然要两轮,但锚点该在每个提交里跟着走,\n不该等到最后一个提交才想起来——C241 写的就是这条,这次仍然踩了。\n\n本提交按 C241 把锚点指向父提交 47e6fe3;证据新鲜度里 runtime 与 auth-startup 两行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/34aab5dea31113ee2688fd236eea3f382402027e","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-18T17:38:01-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":"47e6fe38803a863e867b9f8a6141540da75736ee","message":"fix(kernel-repin): APP_ID 改为装配期强制解析——惰性解析让生产「起得来但每个请求 500」\n\n本批 runtime 第一轮就红在 auth-startup,抓到的是我自己引入的缺陷,不是环境问题:\n\n首版 appId() 是**惰性**的(第一次请求才解析)。于是生产缺 APP_ID 时进程**正常启动**,\n随后 /api/health 与每个业务请求各 500 一次——栈顶就是 request-context 插件。内核对\nresolveAppId 写明的语义是「生产缺失即抛错,起不来好过匿名运行」,惰性版把它退化成\n「运行但全错」,而且把一个配置错误伪装成运行时故障。假绿五形态里的「假健康读模型」\n换了个方向:健康检查自己 500,但进程活着、编排层看不出是配置问题。\n\n改法:\n· appId() 解析失败时包一层稳定归因码 `[APP_ID_REQUIRED]`(与 C51 的 AUTH_VERIFIER_REQUIRED、\n C153 的 secret 读取同款——门禁判定归因码,不去匹配内核的中文消息);\n· 新增 assertRequestContextStartup(),在**四个入口**启动期强制解析:\n NestJS create-app.ts / Fastify app.ts(紧挨 assertTenantAuthStartup)\n + 两个 dispatcher 的 main()(contextFromJob 同样以 APP_ID 标识来源应用);\n· check:auth-startup 增加**第三类拒启负例**:生产 + required + 有 verifier、但显式拿掉\n APP_ID → 必须起不来。指标 missingAppIdRejected 入棘轮(floor 2);\n· 八个启动生产入口的 runner 显式提供 APP_ID——它们本来就该像真实编排那样配齐环境,\n 这不是放宽判据:判据是「缺了要拒启」,由上面那条负例证明,不是靠别的 runner 顺带不配。\n\n绊网加厚:check:dual-backend 的 RequestContext 断言由 7 条扩到 14 条,覆盖四个入口的启动闸、\n两份持有模块的归因码,以及那条负例本身——防惰性解析回潮(它在 typecheck 和行为矩阵下都是绿的)。\n\n第一轮 runtime 的其余结果(报告已随失败轮作废,此处只作判断依据,不作证据引用):\n21 个步骤 status=0,**testsPassed=747——与上一提交前置的预测值一致**,两个 request-context\n验收文件各 6 例都在里面;唯一红的是 auth-startup。行为矩阵未执行(在 auth-startup 之后)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/47e6fe38803a863e867b9f8a6141540da75736ee","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-18T17:14:16-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-fastify/src/dispatcher.ts","apps/api-fastify/src/lib/request-context.ts","apps/api-nestjs/src/common/request-context.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/dispatcher.ts","docs/planning/内核退回pin立项-2026-09-18.md","reports/baseline.json","scripts/check-auth-startup.mjs","scripts/check-capacity-envelope.mjs","scripts/check-db-credential-separation.mjs","scripts/check-dependency-resilience.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-multi-instance.mjs","scripts/check-redis-auth-live.mjs","scripts/check-tracing.mjs","scripts/check-write-capacity.mjs","scripts/governance-report.mjs"]},{"id":"b71b745a36f3b4786d177604aa7034bf5a43ba39","message":"chore(reports): 静态 28/28 回绑 @ 3949dcc;数字前置到本批实测值\n\n静态 28 份报告在实现提交上重新生成并回绑(`check:kernel-admission` 42 模块 / 751 导出、\n`check:kernel-boundaries` 147/147 受管面 / 245/245 锁定文件、`check:dual-backend` 负探针 2/2)。\n\nCLAUDE.md 动态数字随本批改动前移:\n own-tests 92 → 94 (+2 个 request-context 验收文件,C70 只计 git 已跟踪,\n 故必须在实现提交落地后才数得到)\n own-test-cases 738 → 750 (+12 例,与 governance.latest.json 实测一致)\n tests-passing 735 → 747 (**这一个是预测值**:735 + 本批 12 例,尚未被 runtime 实测)\n\n「tests-passing 写在实测之前」是本仓已知的结构性自指,不是抄数:任何改变用例数的批次\n都会在自己第一次 runtime 的收尾 docs-truth 上红——C231/C244 把该复验放在 canonical 报告\n写下之后,而正确数字只有跑完才知道。两条出路都要跑两轮 runtime(先跑得数再改文档,或\n先写预测再跑),这里选后者,好处是 runtime 报告能直接绑定 clean HEAD。\n**若下一轮实测不等于 747,以报告为准修正本行,不反过来迁就文档。**\n\n快照锚点按 C241 指向实现提交 3949dcc。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/b71b745a36f3b4786d177604aa7034bf5a43ba39","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:59:31-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/ui-acceptance.latest.json","reports/ui-fastify-acceptance.latest.json","reports/ui-nestjs-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"3949dcccd743f991487c1438db85ddb11277cc4c","message":"feat(kernel-repin): RequestContext 从 HTTP 层贯通——两后端回显 x-request-id / x-trace-id\n\nB2c-2 与 B3″ 的共同前置(立项 §5.2)。形状与解析全部取自 contracts `request-context.ts`\n(转发自 `@juhai/kernel` 0.22.0),本仓只写 AsyncLocalStorage、APP_ID 解析与两个框架各自的\n入口适配——不复制第二份判定。\n\n修的是一个真缺陷,不只是搬代码:本仓此前**不回显任何相关性标识**,调用方拿到 500 之后\n没有任何能交给运维去查日志的句柄。现在固定回显 x-request-id;有合法 traceparent 时另回\nx-trace-id。入站 requestId 合法即沿用(跨服务相关性的唯一意义),非法即丢弃重生成——不把\n外部字符串反射进响应头与日志。\n\n装配(两侧必须最先,鉴权在其后才能 enrich,响应头回显要覆盖其后所有分支):\n NestJS create-app.ts 第一个 app.use(先于 trace 中间件)\n Fastify app.ts 第一个 register(先于 setErrorHandler 与既有 hook)\n\n与既有 rls-context 并存、刻意不合并:那一份持有 RLS 执行身份(tenant/system 两态),\n这一份持有请求可追溯性。失败语义不同,合成一个 store 会让「租户缺失」与「上下文缺失」\n不可区分。\n\n⚠️ 部署侧同批改动:resolveAppId 在生产缺 APP_ID 时抛错拒绝启动,\ndeploy/production/compose.yml 的 x-api-environment 与 x-dispatcher-environment 两个锚点\n都已写入 APP_ID。漏掉任一个,对应进程起不来——不能等下一批补。\n\n为什么额外建绊网:行为矩阵**结构上证明不了这条**。x-request-id 是实例噪声,被显式排除在\n22 个稳定响应头白名单之外(两端值必然不同),所以删掉任一侧的装配点,矩阵 204 例仍全绿。\n补两层:\n · check:dual-backend 新增 7 条 targeted 断言(含装配顺序、两个 compose 锚点各一)\n + 一个受控断线负探针;dualBackendParityNegativeProbes 由 1 收紧到 2;\n · 两侧各 6 例真实 HTTP 验收 request-context.acceptance.test.ts,断言集逐条对等:\n 无头生成 / 合法沿用 / 非法重生成 / traceparent 取 trace-id / 畸形不猜 / 404 也回显。\n\n负向实测(已恢复现场):注释掉 Fastify 的 register → 该侧 6/6 精确红;注释掉 NestJS 的\napp.use → 该侧 6/6 精确红。\n\n本批没做、也不声称:outboxContext() 与 decisionContext() 目前**零调用方**——把 context\n写进 outbox 行是 B3″,接进权限判定是 B2c-2(仍卡 ADR 0011 裁决)。本批只交付「上下文在\n请求入口真实存在、可被下游取用、且对外可见」。\n\n边界归属:新增 3 个源码文件按 CORE 归属,kernel.boundaries.lock 重签,受管面 146→147、\n锁定文件 242→245,CLAUDE.md 同步。baseline 只收紧本批真正改变的那个字段\n(dualBackendParityNegativeProbes 1→2)——其余若干地板确实落后于现值(ownTests 83 vs 92、\nrlsProtectedTables 65 vs 67 等),那是另一件事,不在本批顺手扫掉。\n\n证据:typecheck 13/13;pnpm check 28/28;两侧 request-context 验收各 6/6(真实 DB\ndigital_employee_os_acceptance_20260918 @127.0.0.1:55470 + redis :6404/3)。\nruntime 整轮与报告回绑在下一提交。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/3949dcccd743f991487c1438db85ddb11277cc4c","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:56:13-07:00","added":["apps/api-fastify/src/lib/request-context.ts","apps/api-fastify/src/plugins/request-context.ts","apps/api-fastify/test/request-context.acceptance.test.ts","apps/api-nestjs/src/common/request-context.ts","apps/api-nestjs/test/request-context.acceptance.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-nestjs/src/create-app.ts","deploy/production/compose.yml","docs/planning/内核退回pin立项-2026-09-18.md","kernel.boundaries.json","kernel.boundaries.lock.json","reports/baseline.json","scripts/check-dual-backend-parity.mjs"]}],"total_commits":0,"head_commit":{"id":"34aab5dea31113ee2688fd236eea3f382402027e","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 47e6fe3;锚点随批次刷新\n\n三级证据本批首次同时绑定 clean HEAD `47e6fe3`(worktreeDirty:false):\n\n· runtime 30/30 步、**747 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 七包测试、迁移 deploy/status、auth-startup、db-credential-separation、tracing、\n dependency-resilience、capacity、write-capacity、multi-instance 全通过。\n 747 = 735 + 本批 12 例,与 b71b745 前置写下的预测值一致——预测被实测证实,\n 不是反过来改文档迁就。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate(收尾清单硬条目)。\n\nauth-startup 现有**三类拒启各 2/2**:无验签器、显式 demo、**生产缺 APP_ID**。第三类是本日\n新增,`missingAppIdRejected: 2` 是两个后端都真的起不来的机器回执——它抓到的正是本批自己\n第一版的惰性解析缺陷,不是事后补的装饰。\n\n跑了三轮 runtime,如实记账:\n ① 红在 auth-startup —— 真缺陷(惰性 APP_ID),已修(47e6fe3 的父提交);\n ② 实质全绿但红在收尾 docs-truth 的快照锚点滞后 —— 锚点停在 3949dcc 而 HEAD 已走两步,\n 打穿 C232 的 +1 自指窗。修复提交已把锚点折进去指向其父提交;\n ③ 30/30 全绿,即本提交回绑的这一份。\n第 ② 轮暴露的是我自己的流程错:改变用例数的批次天然要两轮,但锚点该在每个提交里跟着走,\n不该等到最后一个提交才想起来——C241 写的就是这条,这次仍然踩了。\n\n本提交按 C241 把锚点指向父提交 47e6fe3;证据新鲜度里 runtime 与 auth-startup 两行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/34aab5dea31113ee2688fd236eea3f382402027e","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-18T17:38:01-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":90066,"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:35:06+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
|
1789778311
|
1789778402
|
0
|
1789778300
|
1789779516
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24203
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 47e6 chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 47e6fe3;锚点随批次刷新...
|
76
|
5
|
platform-governance.yml
|
91
|
5
|
0
|
refs/heads/main
|
34aab5dea31113ee2688fd236eea3f382402027e
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"2ef8d2fea20dcc03a7397ed3fc71312b675a70d9","after":"34aab5dea31113ee2688fd236eea3f382402027e","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/2ef8d2fea20dcc03a7397ed3fc71312b675a70d9...34aab5dea31113ee2688fd236eea3f382402027e","commits":[{"id":"34aab5dea31113ee2688fd236eea3f382402027e","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 47e6fe3;锚点随批次刷新\n\n三级证据本批首次同时绑定 clean HEAD `47e6fe3`(worktreeDirty:false):\n\n· runtime 30/30 步、**747 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 七包测试、迁移 deploy/status、auth-startup、db-credential-separation、tracing、\n dependency-resilience、capacity、write-capacity、multi-instance 全通过。\n 747 = 735 + 本批 12 例,与 b71b745 前置写下的预测值一致——预测被实测证实,\n 不是反过来改文档迁就。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate(收尾清单硬条目)。\n\nauth-startup 现有**三类拒启各 2/2**:无验签器、显式 demo、**生产缺 APP_ID**。第三类是本日\n新增,`missingAppIdRejected: 2` 是两个后端都真的起不来的机器回执——它抓到的正是本批自己\n第一版的惰性解析缺陷,不是事后补的装饰。\n\n跑了三轮 runtime,如实记账:\n ① 红在 auth-startup —— 真缺陷(惰性 APP_ID),已修(47e6fe3 的父提交);\n ② 实质全绿但红在收尾 docs-truth 的快照锚点滞后 —— 锚点停在 3949dcc 而 HEAD 已走两步,\n 打穿 C232 的 +1 自指窗。修复提交已把锚点折进去指向其父提交;\n ③ 30/30 全绿,即本提交回绑的这一份。\n第 ② 轮暴露的是我自己的流程错:改变用例数的批次天然要两轮,但锚点该在每个提交里跟着走,\n不该等到最后一个提交才想起来——C241 写的就是这条,这次仍然踩了。\n\n本提交按 C241 把锚点指向父提交 47e6fe3;证据新鲜度里 runtime 与 auth-startup 两行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/34aab5dea31113ee2688fd236eea3f382402027e","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-18T17:38:01-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":"47e6fe38803a863e867b9f8a6141540da75736ee","message":"fix(kernel-repin): APP_ID 改为装配期强制解析——惰性解析让生产「起得来但每个请求 500」\n\n本批 runtime 第一轮就红在 auth-startup,抓到的是我自己引入的缺陷,不是环境问题:\n\n首版 appId() 是**惰性**的(第一次请求才解析)。于是生产缺 APP_ID 时进程**正常启动**,\n随后 /api/health 与每个业务请求各 500 一次——栈顶就是 request-context 插件。内核对\nresolveAppId 写明的语义是「生产缺失即抛错,起不来好过匿名运行」,惰性版把它退化成\n「运行但全错」,而且把一个配置错误伪装成运行时故障。假绿五形态里的「假健康读模型」\n换了个方向:健康检查自己 500,但进程活着、编排层看不出是配置问题。\n\n改法:\n· appId() 解析失败时包一层稳定归因码 `[APP_ID_REQUIRED]`(与 C51 的 AUTH_VERIFIER_REQUIRED、\n C153 的 secret 读取同款——门禁判定归因码,不去匹配内核的中文消息);\n· 新增 assertRequestContextStartup(),在**四个入口**启动期强制解析:\n NestJS create-app.ts / Fastify app.ts(紧挨 assertTenantAuthStartup)\n + 两个 dispatcher 的 main()(contextFromJob 同样以 APP_ID 标识来源应用);\n· check:auth-startup 增加**第三类拒启负例**:生产 + required + 有 verifier、但显式拿掉\n APP_ID → 必须起不来。指标 missingAppIdRejected 入棘轮(floor 2);\n· 八个启动生产入口的 runner 显式提供 APP_ID——它们本来就该像真实编排那样配齐环境,\n 这不是放宽判据:判据是「缺了要拒启」,由上面那条负例证明,不是靠别的 runner 顺带不配。\n\n绊网加厚:check:dual-backend 的 RequestContext 断言由 7 条扩到 14 条,覆盖四个入口的启动闸、\n两份持有模块的归因码,以及那条负例本身——防惰性解析回潮(它在 typecheck 和行为矩阵下都是绿的)。\n\n第一轮 runtime 的其余结果(报告已随失败轮作废,此处只作判断依据,不作证据引用):\n21 个步骤 status=0,**testsPassed=747——与上一提交前置的预测值一致**,两个 request-context\n验收文件各 6 例都在里面;唯一红的是 auth-startup。行为矩阵未执行(在 auth-startup 之后)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/47e6fe38803a863e867b9f8a6141540da75736ee","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-18T17:14:16-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-fastify/src/dispatcher.ts","apps/api-fastify/src/lib/request-context.ts","apps/api-nestjs/src/common/request-context.ts","apps/api-nestjs/src/create-app.ts","apps/api-nestjs/src/dispatcher.ts","docs/planning/内核退回pin立项-2026-09-18.md","reports/baseline.json","scripts/check-auth-startup.mjs","scripts/check-capacity-envelope.mjs","scripts/check-db-credential-separation.mjs","scripts/check-dependency-resilience.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-multi-instance.mjs","scripts/check-redis-auth-live.mjs","scripts/check-tracing.mjs","scripts/check-write-capacity.mjs","scripts/governance-report.mjs"]},{"id":"b71b745a36f3b4786d177604aa7034bf5a43ba39","message":"chore(reports): 静态 28/28 回绑 @ 3949dcc;数字前置到本批实测值\n\n静态 28 份报告在实现提交上重新生成并回绑(`check:kernel-admission` 42 模块 / 751 导出、\n`check:kernel-boundaries` 147/147 受管面 / 245/245 锁定文件、`check:dual-backend` 负探针 2/2)。\n\nCLAUDE.md 动态数字随本批改动前移:\n own-tests 92 → 94 (+2 个 request-context 验收文件,C70 只计 git 已跟踪,\n 故必须在实现提交落地后才数得到)\n own-test-cases 738 → 750 (+12 例,与 governance.latest.json 实测一致)\n tests-passing 735 → 747 (**这一个是预测值**:735 + 本批 12 例,尚未被 runtime 实测)\n\n「tests-passing 写在实测之前」是本仓已知的结构性自指,不是抄数:任何改变用例数的批次\n都会在自己第一次 runtime 的收尾 docs-truth 上红——C231/C244 把该复验放在 canonical 报告\n写下之后,而正确数字只有跑完才知道。两条出路都要跑两轮 runtime(先跑得数再改文档,或\n先写预测再跑),这里选后者,好处是 runtime 报告能直接绑定 clean HEAD。\n**若下一轮实测不等于 747,以报告为准修正本行,不反过来迁就文档。**\n\n快照锚点按 C241 指向实现提交 3949dcc。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/b71b745a36f3b4786d177604aa7034bf5a43ba39","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:59:31-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/ui-acceptance.latest.json","reports/ui-fastify-acceptance.latest.json","reports/ui-nestjs-acceptance.latest.json","reports/validation-source.latest.json"]},{"id":"3949dcccd743f991487c1438db85ddb11277cc4c","message":"feat(kernel-repin): RequestContext 从 HTTP 层贯通——两后端回显 x-request-id / x-trace-id\n\nB2c-2 与 B3″ 的共同前置(立项 §5.2)。形状与解析全部取自 contracts `request-context.ts`\n(转发自 `@juhai/kernel` 0.22.0),本仓只写 AsyncLocalStorage、APP_ID 解析与两个框架各自的\n入口适配——不复制第二份判定。\n\n修的是一个真缺陷,不只是搬代码:本仓此前**不回显任何相关性标识**,调用方拿到 500 之后\n没有任何能交给运维去查日志的句柄。现在固定回显 x-request-id;有合法 traceparent 时另回\nx-trace-id。入站 requestId 合法即沿用(跨服务相关性的唯一意义),非法即丢弃重生成——不把\n外部字符串反射进响应头与日志。\n\n装配(两侧必须最先,鉴权在其后才能 enrich,响应头回显要覆盖其后所有分支):\n NestJS create-app.ts 第一个 app.use(先于 trace 中间件)\n Fastify app.ts 第一个 register(先于 setErrorHandler 与既有 hook)\n\n与既有 rls-context 并存、刻意不合并:那一份持有 RLS 执行身份(tenant/system 两态),\n这一份持有请求可追溯性。失败语义不同,合成一个 store 会让「租户缺失」与「上下文缺失」\n不可区分。\n\n⚠️ 部署侧同批改动:resolveAppId 在生产缺 APP_ID 时抛错拒绝启动,\ndeploy/production/compose.yml 的 x-api-environment 与 x-dispatcher-environment 两个锚点\n都已写入 APP_ID。漏掉任一个,对应进程起不来——不能等下一批补。\n\n为什么额外建绊网:行为矩阵**结构上证明不了这条**。x-request-id 是实例噪声,被显式排除在\n22 个稳定响应头白名单之外(两端值必然不同),所以删掉任一侧的装配点,矩阵 204 例仍全绿。\n补两层:\n · check:dual-backend 新增 7 条 targeted 断言(含装配顺序、两个 compose 锚点各一)\n + 一个受控断线负探针;dualBackendParityNegativeProbes 由 1 收紧到 2;\n · 两侧各 6 例真实 HTTP 验收 request-context.acceptance.test.ts,断言集逐条对等:\n 无头生成 / 合法沿用 / 非法重生成 / traceparent 取 trace-id / 畸形不猜 / 404 也回显。\n\n负向实测(已恢复现场):注释掉 Fastify 的 register → 该侧 6/6 精确红;注释掉 NestJS 的\napp.use → 该侧 6/6 精确红。\n\n本批没做、也不声称:outboxContext() 与 decisionContext() 目前**零调用方**——把 context\n写进 outbox 行是 B3″,接进权限判定是 B2c-2(仍卡 ADR 0011 裁决)。本批只交付「上下文在\n请求入口真实存在、可被下游取用、且对外可见」。\n\n边界归属:新增 3 个源码文件按 CORE 归属,kernel.boundaries.lock 重签,受管面 146→147、\n锁定文件 242→245,CLAUDE.md 同步。baseline 只收紧本批真正改变的那个字段\n(dualBackendParityNegativeProbes 1→2)——其余若干地板确实落后于现值(ownTests 83 vs 92、\nrlsProtectedTables 65 vs 67 等),那是另一件事,不在本批顺手扫掉。\n\n证据:typecheck 13/13;pnpm check 28/28;两侧 request-context 验收各 6/6(真实 DB\ndigital_employee_os_acceptance_20260918 @127.0.0.1:55470 + redis :6404/3)。\nruntime 整轮与报告回绑在下一提交。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/3949dcccd743f991487c1438db85ddb11277cc4c","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:56:13-07:00","added":["apps/api-fastify/src/lib/request-context.ts","apps/api-fastify/src/plugins/request-context.ts","apps/api-fastify/test/request-context.acceptance.test.ts","apps/api-nestjs/src/common/request-context.ts","apps/api-nestjs/test/request-context.acceptance.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/app.ts","apps/api-nestjs/src/create-app.ts","deploy/production/compose.yml","docs/planning/内核退回pin立项-2026-09-18.md","kernel.boundaries.json","kernel.boundaries.lock.json","reports/baseline.json","scripts/check-dual-backend-parity.mjs"]}],"total_commits":0,"head_commit":{"id":"34aab5dea31113ee2688fd236eea3f382402027e","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 47e6fe3;锚点随批次刷新\n\n三级证据本批首次同时绑定 clean HEAD `47e6fe3`(worktreeDirty:false):\n\n· runtime 30/30 步、**747 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 七包测试、迁移 deploy/status、auth-startup、db-credential-separation、tracing、\n dependency-resilience、capacity、write-capacity、multi-instance 全通过。\n 747 = 735 + 本批 12 例,与 b71b745 前置写下的预测值一致——预测被实测证实,\n 不是反过来改文档迁就。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate(收尾清单硬条目)。\n\nauth-startup 现有**三类拒启各 2/2**:无验签器、显式 demo、**生产缺 APP_ID**。第三类是本日\n新增,`missingAppIdRejected: 2` 是两个后端都真的起不来的机器回执——它抓到的正是本批自己\n第一版的惰性解析缺陷,不是事后补的装饰。\n\n跑了三轮 runtime,如实记账:\n ① 红在 auth-startup —— 真缺陷(惰性 APP_ID),已修(47e6fe3 的父提交);\n ② 实质全绿但红在收尾 docs-truth 的快照锚点滞后 —— 锚点停在 3949dcc 而 HEAD 已走两步,\n 打穿 C232 的 +1 自指窗。修复提交已把锚点折进去指向其父提交;\n ③ 30/30 全绿,即本提交回绑的这一份。\n第 ② 轮暴露的是我自己的流程错:改变用例数的批次天然要两轮,但锚点该在每个提交里跟着走,\n不该等到最后一个提交才想起来——C241 写的就是这条,这次仍然踩了。\n\n本提交按 C241 把锚点指向父提交 47e6fe3;证据新鲜度里 runtime 与 auth-startup 两行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/34aab5dea31113ee2688fd236eea3f382402027e","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-18T17:38:01-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":90066,"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:35:06+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
|
1789778402
|
1789778432
|
0
|
1789778300
|
1789779516
|
|
|
0
|
Edit
Delete
|
|
24204
|
docs(计划): 登记 docs-truth 那条红的修复 @ 8a621fd / 12093b8
|
117
|
5
|
governance.yml
|
74
|
5
|
0
|
refs/heads/main
|
0bd8704df3bd5cfbed6e6b06cbcf6d211d0da76f
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"b0c8f85aaf3e0d5d8581c460a2bebbe2c14e9a85","after":"0bd8704df3bd5cfbed6e6b06cbcf6d211d0da76f","compare_url":"https://gitea.g-hi.com/luoanwu/platform-governance/compare/b0c8f85aaf3e0d5d8581c460a2bebbe2c14e9a85...0bd8704df3bd5cfbed6e6b06cbcf6d211d0da76f","commits":[{"id":"0bd8704df3bd5cfbed6e6b06cbcf6d211d0da76f","message":"docs(计划): 登记 docs-truth 那条红的修复 @ 8a621fd / 12093b8\n\n动态区 UI 条目实为三处漂移(SHA、端口、验收库),门禁只抓得到 SHA 一处;只换 SHA 会把红\n变绿却留着两句假话,故三处一并订正。同时记下 freshness-sha-* 的覆盖边界:它只断言 SHA\n的声明形式,同条目里的端口与库名可以静默漂移——绿不代表整行都对。\n\nruntime check 现 exit 0、16 项全过;报告在干净 worktree 整批重出回绑,check:evidence\n降至 0 error。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/0bd8704df3bd5cfbed6e6b06cbcf6d211d0da76f","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-18T17:34:13-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]},{"id":"f84a1e12c72975d9a25af5f9fe62413314b9a280","message":"docs(计划): 登记盲区复核第二轮结果——无新洞,并自查本轮新增的两处接线\n\n四类结果与首轮一致:够不到的检查器 1 个(dev helper 非门禁)、登记报告 0 份无产出方、\n未构建检出逐道跑无新的空跑即绿、流外门禁 5 道复核期均未过期。\n\n自查本轮自己新加的两样是否变成同类盲区:check:fixture-coverage 四处接线齐全;identity\n的两条 freshness 断言经递归展开确认 CI 的 identity job 可达。\n\n同时写清边界:接线正确不等于当前在把关——GitHub Actions 因计费停摆、Gitea 镜像通道从未\n启用,两条均已在案,故这些门禁当前实际把关仍只在本机。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/f84a1e12c72975d9a25af5f9fe62413314b9a280","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-18T17:29:40-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]},{"id":"4a26207d8d4f89aa1b24b7ad4698b6091cc92361","message":"docs(计划): 登记 identity docs-truth 补 freshness-sha 断言 @ 1f3ff8c / 6687aec\n\n出口二选一取 ②。口径移植自 runtime 版并保留其三条设计判断(不含静态级、未接线跳过而非\n恒红、必须是声明形式);唯一差异是认本仓实际写法 clean commit `sha`。负向三项实做,含\n上游记载过的「SHA 只出现在提交区间里」那条自我假绿陷阱。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/4a26207d8d4f89aa1b24b7ad4698b6091cc92361","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-18T17:25:17-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]},{"id":"32f549d3f61c3729d1a00abb65f50df542c84c39","message":"docs(计划): 登记全仓盲区复核结果与 identity 漂移订正 @ a48cbd6\n\n系统性扫描四类形态,唯一真发现是 identity/reports 完全在新鲜度扫描面之外,且已造成\n一处数字漂移(文档 255 @ 85d538b vs 报告 261 @ 25ead3e),当日已修并补处置说明。\n其余四类均核过且干净,含未构建检出里逐道跑根链验证无新的空跑即绿。\n\n另记本轮自己的三次假阳性及其成因,均在报出前复验修正。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/32f549d3f61c3729d1a00abb65f50df542c84c39","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-18T17:20:38-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]},{"id":"c3ae79df23ed6c5e055ef1c5ac6862f14bc477fe","message":"docs(计划): 登记 fixture-coverage 升格为门禁 @ ab28a95 / 83a5542\n\nOwner 裁方案 B。升格前提是先修掉它自己的假绿:不构建直接跑时 15 个套件全跳过而两个\n总数双双为 0、退出码 0,naive 接进 CI 就是永远绿。只阻断 wiringTotal,nowhereTotal 因\n改进过程中非单调只记不拦。另修一处证据污染:显式 --suite 不再写仓级报告。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/c3ae79df23ed6c5e055ef1c5ac6862f14bc477fe","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-18T17:13:51-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]}],"total_commits":0,"head_commit":{"id":"0bd8704df3bd5cfbed6e6b06cbcf6d211d0da76f","message":"docs(计划): 登记 docs-truth 那条红的修复 @ 8a621fd / 12093b8\n\n动态区 UI 条目实为三处漂移(SHA、端口、验收库),门禁只抓得到 SHA 一处;只换 SHA 会把红\n变绿却留着两句假话,故三处一并订正。同时记下 freshness-sha-* 的覆盖边界:它只断言 SHA\n的声明形式,同条目里的端口与库名可以静默漂移——绿不代表整行都对。\n\nruntime check 现 exit 0、16 项全过;报告在干净 worktree 整批重出回绑,check:evidence\n降至 0 error。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/0bd8704df3bd5cfbed6e6b06cbcf6d211d0da76f","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-18T17:34:13-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":10551,"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:41:45+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
|
4
|
1789778432
|
1789778463
|
0
|
1789778300
|
1789778463
|
|
|
0
|
Edit
Delete
|
|
24205
|
chore(reports): C 组三份真实验收回绑 @ 8a621fd —— 在 adversa chore(reports): C 组三份真实验收回绑 @ 8a621fd —— 在 adversarial 隔离栈上跑,共享底座与 ms23 均未触碰...
|
116
|
5
|
platform.yml
|
168
|
5
|
0
|
refs/heads/main
|
b90d7a151e5e9451fa12fb6e883b8898552124df
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"12093b843ef69d300370e5da16fcca3399c14d40","after":"b90d7a151e5e9451fa12fb6e883b8898552124df","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/12093b843ef69d300370e5da16fcca3399c14d40...b90d7a151e5e9451fa12fb6e883b8898552124df","commits":[{"id":"b90d7a151e5e9451fa12fb6e883b8898552124df","message":"chore(reports): C 组三份真实验收回绑 @ 8a621fd —— 在 adversarial 隔离栈上跑,共享底座与 ms23 均未触碰\n\nC 组(runtime-acceptance / mainline-acceptance / revocation-sla)需要真实 PG + Redis + Redpanda。\nms23 那套 35 分钟前刚被并行会话用过(容器 Exited),按 docs/持久主线本地验收.md「同名 project 即使\n容器刚启动也不能直接 up 覆盖,该名称已占用时应协调或选择已有获准且无人使用的测试环境」,改用\nadversarial(PG 55473 / Redis 56382 / Broker 59095,2026-09-12 获准、闲置 3 天、其 Broker 已在故障\n注入白名单)。全程 docker start 既有容器,未 compose up 覆盖任何 project。\n\n结果(均在干净检出 8a621fd 上产出,worktreeDirty=false):\n runtime-acceptance passed 1001 tests(地板 775)、tenantRlsEnforced=1、双后端差分 0\n mainline-acceptance passed\n revocation-sla partial p95 5027ms / max 5041ms / 20 samples——远低于 MS-3 的 30s;\n partial 来自 employmentScope 链仍 pending-scope-consumer-enforcement,\n 以及生产投送/负载/staging 四项 unverified,是既定状态不是失败\n conformance-differential 作为 runtime 验收的副产物一并刷新(同样已登记 severity=warn)\n\n过程中一处失败是我搭环境搭错的,记下来免得下次再犯:首轮 e2e/identity-profile 断言\n`elevated=false` 实测 true——mainline:prepare 只为 fact/permission/audit/owner/consumer 建非超级用户\n角色,identity/credential/scope/aigateway 四个库是我用管理员 platform 手建的,identity 的连接因此是\n特权角色。REASSIGN OWNED 不适用(platform 持有系统对象),改为重建该库并 OWNER 给\nplatform_identity_test_app、以该角色重新 deploy 迁移后转绿。credential / scope 没有\nprisma:migrate:deploy 脚本是对的——它们是 state=shape 模块,按仓纪律不得有迁移。\n\n隔离与收尾:凭据只经仓外 0600 文件(/tmp/c3-mainline.env、/tmp/c3-env.sh),不入仓、不打印;\n验收在独立 worktree 里 pnpm install 自己的 node_modules,不软链主检出,避免与并行会话抢 .prisma;\nadversarial 三容器跑完恢复为 Exited(与我接手前一致)。主检出里并行会话另有十余份报告 WIP,一份没碰。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/b90d7a151e5e9451fa12fb6e883b8898552124df","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-18T17:45:56-07:00","added":[],"removed":[],"modified":["reports/mainline-acceptance.latest.json","reports/revocation-sla.latest.json","runtime/reports/conformance-differential.latest.json","runtime/reports/runtime-acceptance.latest.json"]},{"id":"a178ba36c65d82fab8106fa7395dd65f927876ad","message":"docs(治理): 云端治理段补 2026-09-19 实测——分支保护已整个消失,而计费仍未恢复\n\n推送本会话提交时实测到两条与在案记录对不上的事实:\n\n① main 的分支保护整个没了,不是摘掉那条必需检查而已:\n gh api .../branches/main/protection → 404 \"Branch not protected\"。\n 镜像因此重新推得动,直推 54e6324..12093b8 成功并已核对 github/main 与本地一致;\n 「镜像停在 3308542」这句作废。谁摘的、何时、为什么未知,gh 查不到保护变更历史。\n 本会话未恢复保护、未改动任何 GitHub 设置——不知原委时自行配回去,风险大于留着不动。\n\n② 计费没解决,原记录前半截仍成立:该次直推触发的 run 35410044850 三 job failure、\n 五 skipped,注解逐字仍是 recent account payments have failed。\n\n故「镜像推得动」≠「远端验过了」:这批提交在 GitHub 上一次门禁都没跑过,远端只是有了代码。\n\n第三条是写给下一个人的:本条与同段「不要靠摘必需检查绕过」的口径现在对不上现实,须由\n仓库管理权限持有者二选一收口——恢复保护,或把「为什么现在不设保护」写成显式裁决并给\n复核期。保持现状而不记录,等于让一条在案的治理资产无声消失。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a178ba36c65d82fab8106fa7395dd65f927876ad","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-18T17:45:16-07:00","added":[],"removed":[],"modified":["CLAUDE.md"]}],"total_commits":0,"head_commit":{"id":"b90d7a151e5e9451fa12fb6e883b8898552124df","message":"chore(reports): C 组三份真实验收回绑 @ 8a621fd —— 在 adversarial 隔离栈上跑,共享底座与 ms23 均未触碰\n\nC 组(runtime-acceptance / mainline-acceptance / revocation-sla)需要真实 PG + Redis + Redpanda。\nms23 那套 35 分钟前刚被并行会话用过(容器 Exited),按 docs/持久主线本地验收.md「同名 project 即使\n容器刚启动也不能直接 up 覆盖,该名称已占用时应协调或选择已有获准且无人使用的测试环境」,改用\nadversarial(PG 55473 / Redis 56382 / Broker 59095,2026-09-12 获准、闲置 3 天、其 Broker 已在故障\n注入白名单)。全程 docker start 既有容器,未 compose up 覆盖任何 project。\n\n结果(均在干净检出 8a621fd 上产出,worktreeDirty=false):\n runtime-acceptance passed 1001 tests(地板 775)、tenantRlsEnforced=1、双后端差分 0\n mainline-acceptance passed\n revocation-sla partial p95 5027ms / max 5041ms / 20 samples——远低于 MS-3 的 30s;\n partial 来自 employmentScope 链仍 pending-scope-consumer-enforcement,\n 以及生产投送/负载/staging 四项 unverified,是既定状态不是失败\n conformance-differential 作为 runtime 验收的副产物一并刷新(同样已登记 severity=warn)\n\n过程中一处失败是我搭环境搭错的,记下来免得下次再犯:首轮 e2e/identity-profile 断言\n`elevated=false` 实测 true——mainline:prepare 只为 fact/permission/audit/owner/consumer 建非超级用户\n角色,identity/credential/scope/aigateway 四个库是我用管理员 platform 手建的,identity 的连接因此是\n特权角色。REASSIGN OWNED 不适用(platform 持有系统对象),改为重建该库并 OWNER 给\nplatform_identity_test_app、以该角色重新 deploy 迁移后转绿。credential / scope 没有\nprisma:migrate:deploy 脚本是对的——它们是 state=shape 模块,按仓纪律不得有迁移。\n\n隔离与收尾:凭据只经仓外 0600 文件(/tmp/c3-mainline.env、/tmp/c3-env.sh),不入仓、不打印;\n验收在独立 worktree 里 pnpm install 自己的 node_modules,不软链主检出,避免与并行会话抢 .prisma;\nadversarial 三容器跑完恢复为 Exited(与我接手前一致)。主检出里并行会话另有十余份报告 WIP,一份没碰。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/b90d7a151e5e9451fa12fb6e883b8898552124df","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-18T17:45:56-07:00","added":[],"removed":[],"modified":["reports/mainline-acceptance.latest.json","reports/revocation-sla.latest.json","runtime/reports/conformance-differential.latest.json","runtime/reports/runtime-acceptance.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":22073,"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-19T08:38:11+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
|
1789779515
|
0
|
1789778893
|
1789779515
|
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
|
|
24206
|
docs(计划): 登记推送结果与两条实测更正 @ a178ba3
|
117
|
5
|
governance.yml
|
75
|
5
|
0
|
refs/heads/main
|
dea10cf1124b0e7714fe60f395709cda0be55fdb
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0bd8704df3bd5cfbed6e6b06cbcf6d211d0da76f","after":"dea10cf1124b0e7714fe60f395709cda0be55fdb","compare_url":"https://gitea.g-hi.com/luoanwu/platform-governance/compare/0bd8704df3bd5cfbed6e6b06cbcf6d211d0da76f...dea10cf1124b0e7714fe60f395709cda0be55fdb","commits":[{"id":"dea10cf1124b0e7714fe60f395709cda0be55fdb","message":"docs(计划): 登记推送结果与两条实测更正 @ a178ba3\n\n三处远端均已推送并核对 SHA 一致。过程中查出 main 分支保护整个消失(404 Branch not\nprotected,非只摘必需检查)与计费仍未恢复(run 35410044850 三 job failure、注解逐字\n未变)两条,已补进 CLAUDE.md 云端治理段。\n\n按事实作用域,现在只能说到「远端已有该 SHA」,不能说「远端 CI 已通过」。保护由谁摘、\n为何摘未知,本会话未改动任何 GitHub 设置,留给仓库管理权限持有者二选一收口。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/dea10cf1124b0e7714fe60f395709cda0be55fdb","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-18T17:45:36-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]}],"total_commits":0,"head_commit":{"id":"dea10cf1124b0e7714fe60f395709cda0be55fdb","message":"docs(计划): 登记推送结果与两条实测更正 @ a178ba3\n\n三处远端均已推送并核对 SHA 一致。过程中查出 main 分支保护整个消失(404 Branch not\nprotected,非只摘必需检查)与计费仍未恢复(run 35410044850 三 job failure、注解逐字\n未变)两条,已补进 CLAUDE.md 云端治理段。\n\n按事实作用域,现在只能说到「远端已有该 SHA」,不能说「远端 CI 已通过」。保护由谁摘、\n为何摘未知,本会话未改动任何 GitHub 设置,留给仓库管理权限持有者二选一收口。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/dea10cf1124b0e7714fe60f395709cda0be55fdb","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-18T17:45:36-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":11037,"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-19T08:38:20+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
|
1789779518
|
1789779534
|
0
|
1789778936
|
1789779534
|
|
|
0
|
Edit
Delete
|
|
24207
|
chore(reports): 新镜像连带过期的四份,收三份回绑 @ dd6de71;image-s chore(reports): 新镜像连带过期的四份,收三份回绑 @ dd6de71;image-smoke 如实留红...
|
116
|
5
|
platform.yml
|
169
|
5
|
0
|
refs/heads/main
|
6abcd3d93b19b2a73eb7869272261dde4e0b66d5
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"b90d7a151e5e9451fa12fb6e883b8898552124df","after":"6abcd3d93b19b2a73eb7869272261dde4e0b66d5","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/b90d7a151e5e9451fa12fb6e883b8898552124df...6abcd3d93b19b2a73eb7869272261dde4e0b66d5","commits":[{"id":"6abcd3d93b19b2a73eb7869272261dde4e0b66d5","message":"chore(reports): 新镜像连带过期的四份,收三份回绑 @ dd6de71;image-smoke 如实留红\n\n重建 runtime 镜像后 reports/image-digest.json 变了,它同时落在四份报告的作用域里,四份一起过期。\n这四份都是我造成的,一次批量收:\n\n deployed-runtime passed 容器镜像与 image-digest 一致 @ b90d7a1\n release-manifest partial 仍缺 signature(与 registry 镜像绑定的 cosign 验证),是结论不是失败\n sbom 已刷新 lockfile 模式,随新镜像的源提交重算\n\n**image-smoke 没收,如实留在过期状态**,理由写清楚免得下一个人重走一遍:\n- 它要 `--env-file`,仓里没有也不该有;`.secrets/enterprise-platform-runtime-dev.env` 是给 compose 用的,\n 里面的 DB / Redis 主机名是 compose 服务名,独立 `docker run` 的容器不在那张网里,解析不到;\n- 默认端口 53001 被 dev 常驻 runtime 占着,换 --port 53051 可以绕开端口冲突,但上面那条解析不了,\n 实测 api-health HTTP 0、HEALTHCHECK unhealthy;\n- runbook §2 写的是「指向本机底座时主机名用 host.docker.internal」——要跑得先造一份改写过主机名与端口的\n env 变体。那是新配置,不在本次范围,也不该由我随手拼。\n跑出来的那份 failed 报告**没有拷回主检出**(在临时 worktree 里 git checkout 还原了)——不拿失败结果\n冒充证据,也不让它把一份原本只是\"过期\"的报告变成\"失败\"。\n\n做法同前:企业控制面/.worktrees/settle 干净检出(HEAD dd6de71),只软链 runtime/node_modules,\n跑完把三份 report + sbom.spdx.json 拷回,按 pathspec 提交。三份 provenance 均 dd6de71、worktreeDirty=false。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/6abcd3d93b19b2a73eb7869272261dde4e0b66d5","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-18T17:58:16-07:00","added":[],"removed":[],"modified":["reports/deployed-runtime.latest.json","reports/release-manifest.latest.json","reports/sbom.latest.json","reports/sbom.spdx.json"]},{"id":"dd6de7125d4ff5c3a32855f67adc483a2cb2c22a","message":"chore(reports): 工作台两份快照回绑 @ a818ec2 —— 这次内容真的变了(新镜像 + rc.6)\n\n上一次回绑(d7d9fe5)是纯背书,索引内容一字未变。这次不同,两份都有实质变化:\n ops.image ref 05e3826e9e9e → b90d7a151e5e,digest c086993…→ fe5570f…,source_sha 与 built_at 同步\n (B 组重建镜像换容器的结果,a818ec2)\n ops.release version 1.0.0-rc.3 → 1.0.0-rc.6,source_sha 04d02d6 → e3b9d12,三个包版本随之更新\n (并行会话的 rc.6 列车)\n catalog entries 与包版本同步刷新\n\n成因就是它的作用域设计:reports/image-digest.json、release-manifest、evidence-freshness 都在里面,\n任一输入变更即过期——我提交 image-digest.json 的那一刻它就该重跑。\n\n零依赖脚本,在 企业控制面/.worktrees/rebind-ops2 干净检出(HEAD a818ec2)跑\nnode governance/build-workbench-snapshots.mjs,确认 git status 为空后出报告,两份拷回主检出、\n按 pathspec 提交。两份 provenance 均 gitSha=a818ec2、worktreeDirty=false。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/dd6de7125d4ff5c3a32855f67adc483a2cb2c22a","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-18T17:56:53-07:00","added":[],"removed":[],"modified":["reports/workbench-catalog-snapshot.latest.json","reports/workbench-ops-snapshot.latest.json"]},{"id":"a818ec2cb2324fc14720fdfc1bc5f07b9cf38309","message":"chore(reports): B 组 deployed-runtime 转绿 @ b90d7a1 —— 重建 runtime 镜像并换掉 dev 常驻容器\n\ndeployed-runtime 此前 failed:BUILT_IMAGE_SOURCE_BEHIND——运行容器的镜像源停在 05e3826,HEAD 已有\n23 个运行时输入变更,其中含本会话 10 处接线改的那批 fixture-evaluator 与夹具。这条不是重跑报告能收的,\n必须真重建镜像并换容器。\n\n做了什么:\n1. pnpm image:build —— 上下文是 git archive HEAD:runtime(只取已提交的树,不受任何 WIP 影响),\n token 只作 BuildKit secret。产出 enterprise-platform/runtime:b90d7a151e5e,\n image id sha256:fe5570f5cb60…,linux/arm64,195 MB;reports/image-digest.json 随之更新。\n2. 按 runbook §1 的既定写法换镜像:改 .secrets/enterprise-platform-runtime-dev.env 里的\n PLATFORM_RUNTIME_IMAGE 为 \u003cname\u003e@sha256:\u003cimage id\u003e(改前已备份为 .bak-20260919-b90d7a1,该文件在仓外、0600),\n docker compose --env-file … up -d --no-deps runtime 重建。未动底座其他 12 个服务。\n3. 容器 healthy,/api/health 200:{\"status\":\"ok\",\"service\":\"nestjs\",\"checks\":{\"database\":\"up\",\"redis\":\"up\"}}。\n4. 在干净检出跑 node governance/check-deployed-runtime.mjs --write-report → passed @ b90d7a1。\n\n一处踩坑记下来:check-deployed-runtime.mjs 只有带 --write-report 才落盘,不带就只打印。我前两次跑完\n以为报告已更新,实际文件还是 06c3d4c 那份——git status 不显示改动才发现。别被 ✓ 骗了。\n\nreports/image-digest.json 一并提交:它是本次构建的产物,也是 deployed-runtime 与 release-manifest 的\n作用域输入,不提交则下一次判定会指向一个仓里不存在的镜像绑定。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/a818ec2cb2324fc14720fdfc1bc5f07b9cf38309","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-18T17:52:23-07:00","added":[],"removed":[],"modified":["reports/deployed-runtime.latest.json","reports/image-digest.json"]}],"total_commits":0,"head_commit":{"id":"6abcd3d93b19b2a73eb7869272261dde4e0b66d5","message":"chore(reports): 新镜像连带过期的四份,收三份回绑 @ dd6de71;image-smoke 如实留红\n\n重建 runtime 镜像后 reports/image-digest.json 变了,它同时落在四份报告的作用域里,四份一起过期。\n这四份都是我造成的,一次批量收:\n\n deployed-runtime passed 容器镜像与 image-digest 一致 @ b90d7a1\n release-manifest partial 仍缺 signature(与 registry 镜像绑定的 cosign 验证),是结论不是失败\n sbom 已刷新 lockfile 模式,随新镜像的源提交重算\n\n**image-smoke 没收,如实留在过期状态**,理由写清楚免得下一个人重走一遍:\n- 它要 `--env-file`,仓里没有也不该有;`.secrets/enterprise-platform-runtime-dev.env` 是给 compose 用的,\n 里面的 DB / Redis 主机名是 compose 服务名,独立 `docker run` 的容器不在那张网里,解析不到;\n- 默认端口 53001 被 dev 常驻 runtime 占着,换 --port 53051 可以绕开端口冲突,但上面那条解析不了,\n 实测 api-health HTTP 0、HEALTHCHECK unhealthy;\n- runbook §2 写的是「指向本机底座时主机名用 host.docker.internal」——要跑得先造一份改写过主机名与端口的\n env 变体。那是新配置,不在本次范围,也不该由我随手拼。\n跑出来的那份 failed 报告**没有拷回主检出**(在临时 worktree 里 git checkout 还原了)——不拿失败结果\n冒充证据,也不让它把一份原本只是\"过期\"的报告变成\"失败\"。\n\n做法同前:企业控制面/.worktrees/settle 干净检出(HEAD dd6de71),只软链 runtime/node_modules,\n跑完把三份 report + sbom.spdx.json 拷回,按 pathspec 提交。三份 provenance 均 dd6de71、worktreeDirty=false。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/6abcd3d93b19b2a73eb7869272261dde4e0b66d5","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-18T17:58:16-07:00","added":[],"removed":[],"modified":["reports/deployed-runtime.latest.json","reports/release-manifest.latest.json","reports/sbom.latest.json","reports/sbom.spdx.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":22105,"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-19T08:48: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
|
30
|
1789779534
|
1789779575
|
0
|
1789779516
|
1789779608
|
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
|
|
24208
|
chore(reports): 工作台两份快照回绑 @ 3eb37ea —— image-smoke chore(reports): 工作台两份快照回绑 @ 3eb37ea —— image-smoke 转绿与 runbook 新增章节都进了索引...
|
116
|
5
|
platform.yml
|
170
|
5
|
0
|
refs/heads/main
|
07df639ac88e1f0ec5a24d21c120bc36e2e722fa
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"6abcd3d93b19b2a73eb7869272261dde4e0b66d5","after":"07df639ac88e1f0ec5a24d21c120bc36e2e722fa","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/6abcd3d93b19b2a73eb7869272261dde4e0b66d5...07df639ac88e1f0ec5a24d21c120bc36e2e722fa","commits":[{"id":"07df639ac88e1f0ec5a24d21c120bc36e2e722fa","message":"chore(reports): 工作台两份快照回绑 @ 3eb37ea —— image-smoke 转绿与 runbook 新增章节都进了索引\n\n本会话第三次回绑这两份,成因还是那条作用域设计:docs/runbook.md 与一批 reports 都在里面,\n任一输入变更即过期。这次变的是 runbook §2 新增的 smoke env 生成配方,以及 image-smoke 由过期转 passed。\n内容确有变化(不是纯背书)。\n\n零依赖脚本,干净检出(HEAD 3eb37ea)生成,两份 provenance 均 worktreeDirty=false。\n\n至此 check:evidence 43 份全新鲜。本会话在证据线上收的:\n A 组 release-manifest / port-conformance(sbom 由并行会话收)\n B 组 deployed-runtime —— 重建 runtime 镜像并换掉 dev 常驻容器\n C 组 runtime-acceptance / mainline-acceptance / revocation-sla —— adversarial 隔离栈上真实验收\n 连带 image-digest / image-smoke / sbom / 工作台两份快照\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/07df639ac88e1f0ec5a24d21c120bc36e2e722fa","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-18T18:05:37-07:00","added":[],"removed":[],"modified":["reports/workbench-catalog-snapshot.latest.json","reports/workbench-ops-snapshot.latest.json"]},{"id":"3eb37eaf82da1668fb94e3f5c9f06511da52f51a","message":"chore(reports): image-smoke 转绿 @ 6abcd3d,并把 smoke env 的生成配方写进 runbook\n\n上一条(6abcd3d)把 image-smoke 如实留红,理由是「需要一份主机名改写过的 env 变体,那是新配置」。\n这次把它造出来跑通了,证据面最后一条红清掉。\n\n配方不是手拼的——手拼必错,因为容器侧变量名与 .secrets/…-runtime-dev.env 的键名不是一套\n(compose 里是 `DATABASE_URL: ${PLATFORM_RUNTIME_DATABASE_URL}` 这样映射的)。做法是从\n`docker compose config --format json` 解析出 runtime 的**已解析环境**(32 个变量),只改三处主机名\n(postgres:5432 / redis:6379 / otel-collector:4318 → host.docker.internal + 已发布端口,共 12 个键被改写),\n写进 .secrets/enterprise-platform-runtime-smoke.env(0600,仓外)。\n\n跑通后发现自己漏遵守 runbook 一条,已改正:REDIS_URL 继承了 dev 的逻辑库 14,而 runbook 明写\n「别用 dev 常驻运行时占着的那个,借未分配的」。首轮(db14)虽然六项全绿,但那是和常驻运行时共用\n一个逻辑库;改为 db15 后重跑,六项仍全绿,回绑的是改正后这一份。\n顺带记下一个表本身没说的坑:stack/provision/redis-dbs.json 里 14 / 15 都标未分配,\n**实际占用要看 .secrets 的 dev env,不是看表**。\n\n冒烟结果(镜像 fe5570f5cb60 @ b90d7a1,即 B 组重建的那个):\n container-running / api-health-200(database+redis up)/ platform-modules-view(fail-closed,七模块)\n / module-health-200 / decisions-unauthenticated-401 / docker-healthcheck-healthy —— 六项全绿\n\n报告在干净检出(HEAD 6abcd3d)产出,provenance dirty=false,sourceSha b90d7a1(镜像源提交,与本次\n运行绑定不同是正常的,runbook 已说明)。配方连同两处踩坑写进 docs/runbook.md §2,免得下一个人重走。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/3eb37eaf82da1668fb94e3f5c9f06511da52f51a","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-18T18:05:08-07:00","added":[],"removed":[],"modified":["docs/runbook.md","reports/image-smoke.latest.json"]}],"total_commits":0,"head_commit":{"id":"07df639ac88e1f0ec5a24d21c120bc36e2e722fa","message":"chore(reports): 工作台两份快照回绑 @ 3eb37ea —— image-smoke 转绿与 runbook 新增章节都进了索引\n\n本会话第三次回绑这两份,成因还是那条作用域设计:docs/runbook.md 与一批 reports 都在里面,\n任一输入变更即过期。这次变的是 runbook §2 新增的 smoke env 生成配方,以及 image-smoke 由过期转 passed。\n内容确有变化(不是纯背书)。\n\n零依赖脚本,干净检出(HEAD 3eb37ea)生成,两份 provenance 均 worktreeDirty=false。\n\n至此 check:evidence 43 份全新鲜。本会话在证据线上收的:\n A 组 release-manifest / port-conformance(sbom 由并行会话收)\n B 组 deployed-runtime —— 重建 runtime 镜像并换掉 dev 常驻容器\n C 组 runtime-acceptance / mainline-acceptance / revocation-sla —— adversarial 隔离栈上真实验收\n 连带 image-digest / image-smoke / sbom / 工作台两份快照\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/07df639ac88e1f0ec5a24d21c120bc36e2e722fa","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-18T18:05:37-07:00","added":[],"removed":[],"modified":["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":22172,"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-19T08:58:36+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
|
1789780030
|
1789780070
|
0
|
1789780029
|
1789780100
|
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
|
|
24209
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 1b22 chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 1b228ba;锚点随批次刷新...
|
76
|
5
|
governance.yml
|
92
|
5
|
0
|
refs/heads/main
|
94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"34aab5dea31113ee2688fd236eea3f382402027e","after":"94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/34aab5dea31113ee2688fd236eea3f382402027e...94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","commits":[{"id":"94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 1b228ba;锚点随批次刷新\n\nB3″ 三级证据绑定 clean HEAD `1b228ba`(worktreeDirty:false):\n\n· runtime 30/30 步、**759 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 759 = 747 + 本批 12 例,与 1b228ba 前置写下的预测值一致。\n 信封加了可选 context 之后矩阵仍 204/204——它本来就比不到这个字段\n (outbox 快照只取 type + payload),这也正是本批另建 14 条绊网的理由。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\n**一轮过**。上一批因锚点没跟着提交走白跑 25 分钟,这批把锚点写进了每个提交,没有复发。\n\n本提交按 C241 把锚点指向父提交 1b228ba;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","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-18T18:13:05-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":"1b228baf0006555572a2e829ae95f67960da7e98","message":"chore(reports): 静态 28/28 回绑 @ aa62fba;数字前置到本批实测值\n\nown-tests 94 → 96、own-test-cases 750 → 762(+2 文件 / +12 例信封上下文验收,C70 只计\ngit 已跟踪文件,故必须在实现提交落地后才数得到)。\n\ntests-passing 747 → 759 是**预测值**(747 + 本批 12 例),由下一轮 runtime 实测证实;\n不等于 759 就按报告改文档。上一批已验证过这条路子:预测值被实测原样证实。\n理由同上批:改变用例数的批次结构上要两轮 runtime,先写预测能让 runtime 报告直接绑 clean HEAD。\n\n锚点按 C241 指向父提交 aa62fba——上一批就是漏在这里,白跑了一轮 25 分钟。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/1b228baf0006555572a2e829ae95f67960da7e98","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-18T18:00:51-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":"aa62fba5da4448840228f6699f42085fb2bdeae8","message":"feat(kernel-repin): B3″ realtime 双向合并——信封请求上下文真正贯通到 outbox\n\n内核 0.6.0 给信封加了 `context {requestId, traceId}`,但**只给了字段,没给它怎么进来**:\n写入端如何落库、读出端如何还原、无入站请求时如何表达「不知道」,三件事都留给下游发明。\n最省事的实现——投递时从当前 ALS 取一份填进去——恰好是最坏的:照着那个 requestId 去查日志\n只会查到 dispatcher 自己,「信封可追溯」就此变成假象。本批按三段落地:\n\n· 写入:outbox 加 request_id / trace_id 两列(两后端字节一致迁移,纯 additive 可空),\n 由 **Prisma 客户端扩展单点注入**。不逐处改两后端各 74 处 tx.outbox.create——那是\n 148 处一次性改动外加一条永久漂移缝:新写链忘了带就静默缺席,而少一个可空字段\n 不会让任何门禁红。扩展在交互式事务内同样生效,P4 的「outbox 与业务写同 tx」不变。\n 装配顺序固定:扩展在最内层、RLS 代理在最外层——反过来 $extends 会作用到代理的\n 目标对象上,代理当场失效。\n· 读出:dispatcher 与重放各自**从行上取**,经 contracts envelopeContextOf 还原;\n requestId 缺席即整体缺席(半份上下文既对不上日志,也不能声称知道来源)。\n· 缺席:无入站请求(worker / dispatcher / 触发器)时两列 NULL,信封里干脆没有 context。\n\n独立列而非塞 payload:payload 是领域事实,掺进基建相关性标识会被双后端行为矩阵当成领域\n差异比较——它的 outbox 快照恰好只取 type + payload。\n\n这是**合并不是 pin**:内核那版没有 resourceRefs,也没有 realtimeChannelForDatabase,\n直接 pin 会丢掉产品扩展参与订阅的唯一途径与「同 Redis 实例多环境不得互相收事件」的结构解\n(13 个消费者)。分歧已登记进迁移手册 §6,上游同步不得用内核版覆盖本文件。\n\n守护(行为矩阵**结构上证明不了这条**:上下文走独立列,矩阵只比 type + payload,\n删掉任一侧的注入或读出,204 例仍全绿):\n· check:dual-backend 增 14 条 targeted 断言(注入点/读出点/迁移/负例本身)+ 1 个受控断线\n 负探针,dualBackendParityNegativeProbes 由 2 收紧到 3;\n· 两侧各 6 例真实 DB 验收,断言集逐条对等:落库两列 / 无请求即 NULL / dispatcher 读出 /\n 重放保留 / 半份整体缺席 / 显式值不被覆盖。\n负向实测:摘掉 Fastify 注入扩展 → 精确 3 例红;摘掉重放读出 → 精确 1 例红;均已恢复现场。\n\ncontracts 升 1.23.0(expand-only),packages/downstream 两把锁重签,下游 fixture 源码未改\n即通过(同 major 兼容成立)。顺带实测到一个门禁盲区并如实登记为 U-42:check:kernel-packages\n的 apiDigest **只哈希入口 .d.ts 字节、不含再导出的模块**,所以本批加 3 个公开导出它不会红——\n「同版本改公开 API 即红」对 barrel 式入口基本不成立,版本是自觉升的。\n\n本批明确不做、逐条登记在立项书 §5.3:内核的 defineRealtimeEventTypes 组合式事件类型、\n两个未接线的内核常量(LIVE_BUFFER_LIMIT / REDIS_COMMAND_TIMEOUT_MS——后者对应一个真实的\nRedis publish 无超时缺口)、产品事件路径(走 raw SQL,扩展覆盖不到,目前没有 context)、\nworker 派生事件继承原始请求。前三项是范围取舍,最后一项的后果是那些行 context 为 NULL——\n缺席是诚实的,不构成假象。\n\n证据:typecheck 13/13;pnpm check 28/28;两侧信封上下文验收各 6/6(真实 DB\ndigital_employee_os_acceptance_20260918 @127.0.0.1:55470 + redis :6404/3)。\nruntime 整轮与报告回绑在下一提交。锚点按 C241 指向父提交 34aab5d。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/aa62fba5da4448840228f6699f42085fb2bdeae8","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-18T17:59:16-07:00","added":["apps/api-fastify/prisma/migrations/20260929000000_outbox_request_context/migration.sql","apps/api-fastify/src/plugins/outbox-request-context.ts","apps/api-fastify/test/realtime.envelope-context.acceptance.test.ts","apps/api-nestjs/prisma/migrations/20260929000000_outbox_request_context/migration.sql","apps/api-nestjs/src/prisma/outbox-request-context.ts","apps/api-nestjs/test/realtime.envelope-context.acceptance.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/src/prisma/prisma.service.ts","docs/migration-playbook.md","docs/planning/内核退回pin立项-2026-09-18.md","docs/product-extension-guide.md","kernel.boundaries.json","kernel.boundaries.lock.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/realtime.ts","reports/baseline.json","scripts/check-dual-backend-parity.mjs"]}],"total_commits":0,"head_commit":{"id":"94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 1b228ba;锚点随批次刷新\n\nB3″ 三级证据绑定 clean HEAD `1b228ba`(worktreeDirty:false):\n\n· runtime 30/30 步、**759 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 759 = 747 + 本批 12 例,与 1b228ba 前置写下的预测值一致。\n 信封加了可选 context 之后矩阵仍 204/204——它本来就比不到这个字段\n (outbox 快照只取 type + payload),这也正是本批另建 14 条绊网的理由。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\n**一轮过**。上一批因锚点没跟着提交走白跑 25 分钟,这批把锚点写进了每个提交,没有复发。\n\n本提交按 C241 把锚点指向父提交 1b228ba;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","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-18T18:13:05-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":90457,"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-19T08:38:20+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
|
1789780398
|
1789780407
|
0
|
1789780398
|
1789780421
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24210
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 1b22 chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 1b228ba;锚点随批次刷新...
|
76
|
5
|
platform-governance.yml
|
93
|
5
|
0
|
refs/heads/main
|
94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"34aab5dea31113ee2688fd236eea3f382402027e","after":"94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/34aab5dea31113ee2688fd236eea3f382402027e...94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","commits":[{"id":"94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 1b228ba;锚点随批次刷新\n\nB3″ 三级证据绑定 clean HEAD `1b228ba`(worktreeDirty:false):\n\n· runtime 30/30 步、**759 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 759 = 747 + 本批 12 例,与 1b228ba 前置写下的预测值一致。\n 信封加了可选 context 之后矩阵仍 204/204——它本来就比不到这个字段\n (outbox 快照只取 type + payload),这也正是本批另建 14 条绊网的理由。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\n**一轮过**。上一批因锚点没跟着提交走白跑 25 分钟,这批把锚点写进了每个提交,没有复发。\n\n本提交按 C241 把锚点指向父提交 1b228ba;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","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-18T18:13:05-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":"1b228baf0006555572a2e829ae95f67960da7e98","message":"chore(reports): 静态 28/28 回绑 @ aa62fba;数字前置到本批实测值\n\nown-tests 94 → 96、own-test-cases 750 → 762(+2 文件 / +12 例信封上下文验收,C70 只计\ngit 已跟踪文件,故必须在实现提交落地后才数得到)。\n\ntests-passing 747 → 759 是**预测值**(747 + 本批 12 例),由下一轮 runtime 实测证实;\n不等于 759 就按报告改文档。上一批已验证过这条路子:预测值被实测原样证实。\n理由同上批:改变用例数的批次结构上要两轮 runtime,先写预测能让 runtime 报告直接绑 clean HEAD。\n\n锚点按 C241 指向父提交 aa62fba——上一批就是漏在这里,白跑了一轮 25 分钟。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/1b228baf0006555572a2e829ae95f67960da7e98","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-18T18:00:51-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":"aa62fba5da4448840228f6699f42085fb2bdeae8","message":"feat(kernel-repin): B3″ realtime 双向合并——信封请求上下文真正贯通到 outbox\n\n内核 0.6.0 给信封加了 `context {requestId, traceId}`,但**只给了字段,没给它怎么进来**:\n写入端如何落库、读出端如何还原、无入站请求时如何表达「不知道」,三件事都留给下游发明。\n最省事的实现——投递时从当前 ALS 取一份填进去——恰好是最坏的:照着那个 requestId 去查日志\n只会查到 dispatcher 自己,「信封可追溯」就此变成假象。本批按三段落地:\n\n· 写入:outbox 加 request_id / trace_id 两列(两后端字节一致迁移,纯 additive 可空),\n 由 **Prisma 客户端扩展单点注入**。不逐处改两后端各 74 处 tx.outbox.create——那是\n 148 处一次性改动外加一条永久漂移缝:新写链忘了带就静默缺席,而少一个可空字段\n 不会让任何门禁红。扩展在交互式事务内同样生效,P4 的「outbox 与业务写同 tx」不变。\n 装配顺序固定:扩展在最内层、RLS 代理在最外层——反过来 $extends 会作用到代理的\n 目标对象上,代理当场失效。\n· 读出:dispatcher 与重放各自**从行上取**,经 contracts envelopeContextOf 还原;\n requestId 缺席即整体缺席(半份上下文既对不上日志,也不能声称知道来源)。\n· 缺席:无入站请求(worker / dispatcher / 触发器)时两列 NULL,信封里干脆没有 context。\n\n独立列而非塞 payload:payload 是领域事实,掺进基建相关性标识会被双后端行为矩阵当成领域\n差异比较——它的 outbox 快照恰好只取 type + payload。\n\n这是**合并不是 pin**:内核那版没有 resourceRefs,也没有 realtimeChannelForDatabase,\n直接 pin 会丢掉产品扩展参与订阅的唯一途径与「同 Redis 实例多环境不得互相收事件」的结构解\n(13 个消费者)。分歧已登记进迁移手册 §6,上游同步不得用内核版覆盖本文件。\n\n守护(行为矩阵**结构上证明不了这条**:上下文走独立列,矩阵只比 type + payload,\n删掉任一侧的注入或读出,204 例仍全绿):\n· check:dual-backend 增 14 条 targeted 断言(注入点/读出点/迁移/负例本身)+ 1 个受控断线\n 负探针,dualBackendParityNegativeProbes 由 2 收紧到 3;\n· 两侧各 6 例真实 DB 验收,断言集逐条对等:落库两列 / 无请求即 NULL / dispatcher 读出 /\n 重放保留 / 半份整体缺席 / 显式值不被覆盖。\n负向实测:摘掉 Fastify 注入扩展 → 精确 3 例红;摘掉重放读出 → 精确 1 例红;均已恢复现场。\n\ncontracts 升 1.23.0(expand-only),packages/downstream 两把锁重签,下游 fixture 源码未改\n即通过(同 major 兼容成立)。顺带实测到一个门禁盲区并如实登记为 U-42:check:kernel-packages\n的 apiDigest **只哈希入口 .d.ts 字节、不含再导出的模块**,所以本批加 3 个公开导出它不会红——\n「同版本改公开 API 即红」对 barrel 式入口基本不成立,版本是自觉升的。\n\n本批明确不做、逐条登记在立项书 §5.3:内核的 defineRealtimeEventTypes 组合式事件类型、\n两个未接线的内核常量(LIVE_BUFFER_LIMIT / REDIS_COMMAND_TIMEOUT_MS——后者对应一个真实的\nRedis publish 无超时缺口)、产品事件路径(走 raw SQL,扩展覆盖不到,目前没有 context)、\nworker 派生事件继承原始请求。前三项是范围取舍,最后一项的后果是那些行 context 为 NULL——\n缺席是诚实的,不构成假象。\n\n证据:typecheck 13/13;pnpm check 28/28;两侧信封上下文验收各 6/6(真实 DB\ndigital_employee_os_acceptance_20260918 @127.0.0.1:55470 + redis :6404/3)。\nruntime 整轮与报告回绑在下一提交。锚点按 C241 指向父提交 34aab5d。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/aa62fba5da4448840228f6699f42085fb2bdeae8","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-18T17:59:16-07:00","added":["apps/api-fastify/prisma/migrations/20260929000000_outbox_request_context/migration.sql","apps/api-fastify/src/plugins/outbox-request-context.ts","apps/api-fastify/test/realtime.envelope-context.acceptance.test.ts","apps/api-nestjs/prisma/migrations/20260929000000_outbox_request_context/migration.sql","apps/api-nestjs/src/prisma/outbox-request-context.ts","apps/api-nestjs/test/realtime.envelope-context.acceptance.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/prisma/schema.prisma","apps/api-fastify/src/modules/replay.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-nestjs/prisma/schema.prisma","apps/api-nestjs/src/events/outbox-dispatcher.service.ts","apps/api-nestjs/src/events/replay.service.ts","apps/api-nestjs/src/prisma/prisma.service.ts","docs/migration-playbook.md","docs/planning/内核退回pin立项-2026-09-18.md","docs/product-extension-guide.md","kernel.boundaries.json","kernel.boundaries.lock.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/realtime.ts","reports/baseline.json","scripts/check-dual-backend-parity.mjs"]}],"total_commits":0,"head_commit":{"id":"94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 1b228ba;锚点随批次刷新\n\nB3″ 三级证据绑定 clean HEAD `1b228ba`(worktreeDirty:false):\n\n· runtime 30/30 步、**759 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 759 = 747 + 本批 12 例,与 1b228ba 前置写下的预测值一致。\n 信封加了可选 context 之后矩阵仍 204/204——它本来就比不到这个字段\n (outbox 快照只取 type + payload),这也正是本批另建 14 条绊网的理由。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\n**一轮过**。上一批因锚点没跟着提交走白跑 25 分钟,这批把锚点写进了每个提交,没有复发。\n\n本提交按 C241 把锚点指向父提交 1b228ba;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","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-18T18:13:05-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":90457,"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-19T08:38:20+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
|
1789780407
|
1789780416
|
0
|
1789780398
|
1789780421
|
|
|
0
|
Edit
Delete
|
|
24211
|
chore(reports): check:evidence 自身回绑 @ fe9fdca —— 4 chore(reports): check:evidence 自身回绑 @ fe9fdca —— 43 份全新鲜,状态由 partial 转 passed...
|
116
|
5
|
platform.yml
|
171
|
5
|
0
|
refs/heads/main
|
97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"07df639ac88e1f0ec5a24d21c120bc36e2e722fa","after":"97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/07df639ac88e1f0ec5a24d21c120bc36e2e722fa...97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","commits":[{"id":"97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","message":"chore(reports): check:evidence 自身回绑 @ fe9fdca —— 43 份全新鲜,状态由 partial 转 passed\n\n仓里这份还停在 2026-09-18 07:28(绑 a4b3d35),记的是 status=partial、34 新鲜 / 3 过期。\n那三条是 runtime/reports/runtime-acceptance、reports/revocation-sla、reports/mainline-acceptance,\n都因 runtime/test/e2e/identity-profile.test.ts 变更而过期,已在 b90d7a1 那轮收掉;\n只是没人把 check:evidence 自己重跑回绑,证据面的总账一直落后于实况。\n\n本次在干净树上重跑(HEAD fe9fdca,provenance.worktreeDirty=false,门禁 exit 0):\n 43 份已登记,43 份新鲜、0 份过期、0 份输入未提交、0 份无有效绑定、0 份例外\n 0 条告警;10 份未登记作用域,其中 0 份无处置说明\n\n也顺带验了前两个提交没有连带效应:十份零依赖门禁回绑到 07df639 / c570056 之后,\n工作台两份快照等以 reports 为输入的报告仍然新鲜,没有被重新判过期。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","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-18T18:16:11-07:00","added":[],"removed":[],"modified":["reports/evidence-freshness.latest.json"]},{"id":"fe9fdca41e28e3cbfc84f1ece8f76b068781647b","message":"chore(reports): catalog-drift 与 facts 回绑 @ c570056 —— 在主工作区干净态下重跑\n\n这两份不能走 rebind-reports:它的临时检出在工作区之外,catalog-drift 因此读不到工作区\n(workspaceAvailable 由 true 变 false、candidates 4→0、catalogDriftUnknown 0→154,\n多出一千两百行 unknown 条目),check:facts 则会把临时目录路径写进 candidatesDir。\n改在主工作区跑,用的是上一提交刚腾出的干净窗口:先跑 catalog:drift(树干净 → dirty=false),\n把产出移出工作区、还原文件,再跑 check:facts(树仍干净 → dirty=false),最后把 drift 那份放回来。\n两份因此绑同一个提交 c570056,且 provenance.worktreeDirty 都是 false。\n\n结论与 17:11 那轮在途版本逐字一致(剔除 provenance 三行后无差异),不是靠重跑改出来的:\n catalog:drift —— error 0 / drift 0 / info 5 / unknown 0,工作区可用\n check:facts —— 16 个声明 Fact 全部可追溯(Catalog 11 / 候选 5)\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/fe9fdca41e28e3cbfc84f1ece8f76b068781647b","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-18T18:15:40-07:00","added":[],"removed":[],"modified":["reports/catalog-drift.latest.json","reports/facts.latest.json"]},{"id":"c5700568890c95adf58272c1755e20a54f512d77","message":"chore(reports): 八份零依赖门禁回绑 @ 07df639 —— 覆盖上一轮绑 1de65fb/dirty 的在途版本\n\n工作区里躺着的这八份是 2026-09-18 17:11—17:26 本地跑的,绑的是\n1de65fb(caddy / catalog-reconciliation / fact-pii / migration-decs / module-imports / otel)、\n5116dc5(ci-mirror)与 6687aec(gate-flow)。前七份 provenance.worktreeDirty=true,\n按状态措辞纪律只能绑本地;而 HEAD 此后又走了六个提交(b90d7a1 … 07df639),\n直接提交等于把一份旧输入、脏树的结论写进证据面。\n\n改用 rebind-reports 在 HEAD 07df639 的干净检出里重跑这八个门禁:\n八份全部门禁 exit 0,provenance 均为 07df639 / worktreeDirty=false。\n\n结论与重跑前一致,没有靠重跑把红洗绿:\n caddy / catalog-reconciliation / migration-decs / otel —— findings 0\n fact-pii / module-imports —— violations 0\n gate-flow / ci-mirror —— status=passed,findings 0\nfact-pii 比上一份已提交的报告多出 scanDirs 与 rulesSource 两个字段,\n那是脚本里早已提交的改动第一次落进报告,不是本次新增的判据。\n\ncatalog-drift 与 facts 不在这一提交里:rebind 的临时检出在工作区之外,\n前者因此读不到工作区(workspaceAvailable true→false,catalogDriftUnknown 0→154,\n多出一千两百行 unknown 条目),后者会把临时目录路径写进 candidatesDir。\n这两份改在主工作区干净态下重跑,单独成提交。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/c5700568890c95adf58272c1755e20a54f512d77","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-18T18:15:09-07:00","added":[],"removed":[],"modified":["reports/caddy.latest.json","reports/catalog-reconciliation.latest.json","reports/ci-mirror.latest.json","reports/fact-pii.latest.json","reports/gate-flow.latest.json","reports/migration-decs.latest.json","reports/module-imports.latest.json","reports/otel.latest.json"]}],"total_commits":0,"head_commit":{"id":"97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","message":"chore(reports): check:evidence 自身回绑 @ fe9fdca —— 43 份全新鲜,状态由 partial 转 passed\n\n仓里这份还停在 2026-09-18 07:28(绑 a4b3d35),记的是 status=partial、34 新鲜 / 3 过期。\n那三条是 runtime/reports/runtime-acceptance、reports/revocation-sla、reports/mainline-acceptance,\n都因 runtime/test/e2e/identity-profile.test.ts 变更而过期,已在 b90d7a1 那轮收掉;\n只是没人把 check:evidence 自己重跑回绑,证据面的总账一直落后于实况。\n\n本次在干净树上重跑(HEAD fe9fdca,provenance.worktreeDirty=false,门禁 exit 0):\n 43 份已登记,43 份新鲜、0 份过期、0 份输入未提交、0 份无有效绑定、0 份例外\n 0 条告警;10 份未登记作用域,其中 0 份无处置说明\n\n也顺带验了前两个提交没有连带效应:十份零依赖门禁回绑到 07df639 / c570056 之后,\n工作台两份快照等以 reports 为输入的报告仍然新鲜,没有被重新判过期。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","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-18T18:16:11-07:00","added":[],"removed":[],"modified":["reports/evidence-freshness.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":22214,"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-19T09:07:09+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
|
1789780649
|
1789780690
|
0
|
1789780647
|
1789780719
|
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
|
|
24212
|
docs(部署): 登记第二次「重新部署运行」——判据仍指向只重启,但 identity 跑的是旧构 docs(部署): 登记第二次「重新部署运行」——判据仍指向只重启,但 identity 跑的是旧构建...
|
116
|
5
|
platform.yml
|
172
|
5
|
0
|
refs/heads/main
|
51e311bf417385a994296f20da3b9458761bdee8
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe","after":"51e311bf417385a994296f20da3b9458761bdee8","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/97d61aa7117c2f88c4ba5e0bdf4a5b5660f2ecbe...51e311bf417385a994296f20da3b9458761bdee8","commits":[{"id":"51e311bf417385a994296f20da3b9458761bdee8","message":"docs(部署): 登记第二次「重新部署运行」——判据仍指向只重启,但 identity 跑的是旧构建\n\n与 §12 同形态的请求,前置判据同法重算,结论同样是不重建镜像:镜像源 b90d7a1 →\nHEAD 07df639 的 runtime/ 与 stack/ 变更均为零文件,未提交改动不碰运行时输入,\n容器镜像 ID 与 reports/image-digest.json 逐字一致(sha256:fe5570f5cb60…)。\n13 个 stack 容器一个没动。\n\n与 §12.1 的两点差别记在 §18.1 / §18.2:\n- 这次跑了 check:deployed(passed / IMAGE_SOURCE_EQUIVALENT,在 07df639 上),\n 但脚本在脏树上没有落盘,reports/deployed-runtime.latest.json 仍是 dd6de712 那份、\n worktreeDirty=false,未被本轮污染——所以那一行的证据形态是门禁 stdout,不是回绑报告。\n- 这轮重启有实据,不只是「判据说该做的只有启动那半」:identity 的 dist/src/main.js\n 在 17:31 重建过,而在跑的进程是 07:57 起的,跑的是旧构建;web 与工作台的 .next\n 均不落后于源码。停 pid 5209/18658/43950,按 .claude/launch.json 重起。\n\n重启后复验 11 项全绿(§18.3):identity 无凭证 401 / 现签 HS256 令牌 200、\n控制面 /api/platform/{catalog,modules} 200、CORS 预检 204 带 authorization、\n工作台「读取探针」ok 且 database/redis up、常驻容器经 Caddy :58080 与直连 :53001 均 200、\n:3098 transport 为 Connected(D-8 注入生效)、控制台零错误。\n\n§18.4 登记一条未定位的观察:有个不带凭证的客户端每 2 秒打一次 identity 的 /api/users\n(401,失败关闭)。不是本轮重启带出来的——新进程 18:14:46 起、它 18:15:29 就接上了;\n三个浏览器标签页的 network 抓取里都没有这批请求,lsof 只见一条绕过 :3098 代理、\n直连 127.0.0.1:3101 的长连接。未定位到具体页面,该节不作结论。\n\n提交时 HEAD 已被并行会话推到 97d61aa,期间三个提交全是 chore(reports)、\nruntime/ 与 stack/ 零变更,故 §18.1 的判据在新 HEAD 上仍然成立,正文不改。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/51e311bf417385a994296f20da3b9458761bdee8","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-18T18:19:04-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"51e311bf417385a994296f20da3b9458761bdee8","message":"docs(部署): 登记第二次「重新部署运行」——判据仍指向只重启,但 identity 跑的是旧构建\n\n与 §12 同形态的请求,前置判据同法重算,结论同样是不重建镜像:镜像源 b90d7a1 →\nHEAD 07df639 的 runtime/ 与 stack/ 变更均为零文件,未提交改动不碰运行时输入,\n容器镜像 ID 与 reports/image-digest.json 逐字一致(sha256:fe5570f5cb60…)。\n13 个 stack 容器一个没动。\n\n与 §12.1 的两点差别记在 §18.1 / §18.2:\n- 这次跑了 check:deployed(passed / IMAGE_SOURCE_EQUIVALENT,在 07df639 上),\n 但脚本在脏树上没有落盘,reports/deployed-runtime.latest.json 仍是 dd6de712 那份、\n worktreeDirty=false,未被本轮污染——所以那一行的证据形态是门禁 stdout,不是回绑报告。\n- 这轮重启有实据,不只是「判据说该做的只有启动那半」:identity 的 dist/src/main.js\n 在 17:31 重建过,而在跑的进程是 07:57 起的,跑的是旧构建;web 与工作台的 .next\n 均不落后于源码。停 pid 5209/18658/43950,按 .claude/launch.json 重起。\n\n重启后复验 11 项全绿(§18.3):identity 无凭证 401 / 现签 HS256 令牌 200、\n控制面 /api/platform/{catalog,modules} 200、CORS 预检 204 带 authorization、\n工作台「读取探针」ok 且 database/redis up、常驻容器经 Caddy :58080 与直连 :53001 均 200、\n:3098 transport 为 Connected(D-8 注入生效)、控制台零错误。\n\n§18.4 登记一条未定位的观察:有个不带凭证的客户端每 2 秒打一次 identity 的 /api/users\n(401,失败关闭)。不是本轮重启带出来的——新进程 18:14:46 起、它 18:15:29 就接上了;\n三个浏览器标签页的 network 抓取里都没有这批请求,lsof 只见一条绕过 :3098 代理、\n直连 127.0.0.1:3101 的长连接。未定位到具体页面,该节不作结论。\n\n提交时 HEAD 已被并行会话推到 97d61aa,期间三个提交全是 chore(reports)、\nruntime/ 与 stack/ 零变更,故 §18.1 的判据在新 HEAD 上仍然成立,正文不改。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/51e311bf417385a994296f20da3b9458761bdee8","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-18T18:19:04-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":22234,"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-19T09:17: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
|
30
|
1789780811
|
1789780853
|
0
|
1789780811
|
1789780883
|
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
|
|
24213
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 56e6 chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 56e6e57;锚点随批次刷新...
|
76
|
5
|
governance.yml
|
94
|
5
|
0
|
refs/heads/main
|
01d0eabfa71ec061d876d39d4f399d2290530a15
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","after":"01d0eabfa71ec061d876d39d4f399d2290530a15","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb...01d0eabfa71ec061d876d39d4f399d2290530a15","commits":[{"id":"01d0eabfa71ec061d876d39d4f399d2290530a15","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 56e6e57;锚点随批次刷新\n\nRedis 发布时限批次的三级证据,绑定 clean HEAD `56e6e57`(worktreeDirty:false):\n\n· runtime 30/30 步、**776 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 776 = 759 + 本批 17 例(contracts 9 + 两后端各 4),与前置预测一致。\n dependency-resilience / multi-instance / write-capacity 这些真打 Redis 的\n 门禁全过——2 秒时限没有误伤健康链路。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate\n (npm 审计接口 503 重试两次后成功)。\n\n本提交按 C241 把锚点指向父提交 56e6e57;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/01d0eabfa71ec061d876d39d4f399d2290530a15","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-18T18:44:00-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":"56e6e57c22a534a07ac54bc5f8bf9da1c6806a03","message":"chore(reports): 静态 28/28 回绑 @ 00cd95d;数字前置到本批实测值\n\nown-tests 96 → 99、own-test-cases 762 → 779(+3 文件 / +17 例:contracts 9 例判定单测\n与两后端各 4 例黑洞 Redis 验收;C70 只计 git 已跟踪文件,故必须在实现提交落地后才数得到)。\n\ntests-passing 759 → 776 是**预测值**(759 + 17),由下一轮 runtime 实测证实。\n前两批这条路子都验证过:预测被实测原样证实。\n\n锚点按 C241 指向父提交 00cd95d。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/56e6e57c22a534a07ac54bc5f8bf9da1c6806a03","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-18T18:31:04-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":"00cd95da0b4f2694db9528235f69d2f95a6707ab","message":"fix(realtime): Redis 发布加可判责时限 + 批次预算刹车——此前一次 Redis 故障既不可判责也不收敛\n\nB3″ 登记的推迟项里有一条是真缺口,同日单独做掉。**先有证据再动手**:起一个「接受连接但\n永不应答」的 TCP 服务端(C63 已建模的半开/黑洞形态),用与本仓 publisher 完全相同的连接配置\n(maxRetriesPerRequest: null——BullMQ 的要求)打一次 publish,**8 秒后仍然挂着**。\n不是慢,是永远:ioredis 在该配置下无限重试,命令永不 reject。\n\n真正的后果不在「慢」,在它挂在 outbox 领取事务**之内**:\n\n 修复前 修复后\n 单行 publish 无限挂起 2s 抛 REALTIME_REDIS_COMMAND_TIMEOUT\n 该行 attempts 不增(整事务回滚) +1,事务提交\n 批内其余 49 行 一次都没试过 按预算尽量试,剩下留给下一跳\n 连续故障 每秒重开一个必然超时的事务,不收敛 10 跳后进死信,可判责终态\n 运维看到的错误 Prisma 事务超时,**指向数据库** 稳定前缀,指向 Redis\n\n**光加超时不够,这是最容易做漏的一半。** 故障时每行烧掉一个完整时限,一批 50 行 ×2s 远超\n15 秒事务预算——事务照样超时回滚、attempts 照样不增,只是从「挂着」变成「忙着」。\n所以有 realtimeDispatchBudget:每行开工前裁决「还剩不剩得下再试一行」,不够就 break,\n把剩下的留给下一跳,让本事务先把已累加的 attempts 提交掉。**收敛性来自这条刹车,不是超时。**\n\n超时**抛错不吞**:五个 publish 点各有自己的失败语义(dispatcher 累加 attempts 走死信,\n进程内扇出向上传播)。在 helper 里吞掉就变成事件静默丢失,比挂住更糟。\n\n证据:\n· contracts 9 例判定单测——含「超时后底层 promise 迟到 reject 不产生 unhandledRejection」\n 与「15s 预算最多放行 7 行」(关键不是 7,是它 \u003c 50);\n· 两后端各 4 例真实 ioredis 打黑洞服务端验收,**直接测生产类**\n (new EventBus(hungRedis) / new EventBusService(hungRedis, ...))——在测试里另写一份\n publish 只能证明 helper 能用,证明不了生产路径接了它;\n· check:dual-backend 增 12 条 targeted 断言(五个 publish 点 + 两处刹车 + 黑洞用例本身)\n + 1 个受控断线负探针,dualBackendParityNegativeProbes 3 → 4。\n负向实测:摘掉 Fastify 生产 EventBus.publish 的时限 → 该用例挂满 30 秒测试上限后红、\n其余三例仍绿(精确命中);已恢复现场。\n\n顺带调了一个既有断言并注明理由:G16 的「提交后才发投递样本」用 4200 字节邻近窗口,预算刹车\n合法地把两点推远约 600 字节,放宽到 4800。它是邻近性启发式不是语义判据,意图未变;\n我也把预算日志挪到 observeDelivery 之后,尽量少动它的相邻性。\n\ncontracts 升 1.24.0(expand-only),两把锁重签,下游 fixture 源码未改即通过。\n\n证据:typecheck 13/13;pnpm check 28/28。runtime 整轮与报告回绑在下一提交。\n锚点按 C241 指向父提交 94ec469。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/00cd95da0b4f2694db9528235f69d2f95a6707ab","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-18T18:29:12-07:00","added":["apps/api-fastify/test/realtime.redis-timeout.acceptance.test.ts","apps/api-nestjs/test/realtime.redis-timeout.acceptance.test.ts","packages/contracts/src/realtime-redis-timeout.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/dispatcher.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-nestjs/src/dispatcher.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.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/realtime.ts","reports/baseline.json","scripts/check-dual-backend-parity.mjs"]}],"total_commits":0,"head_commit":{"id":"01d0eabfa71ec061d876d39d4f399d2290530a15","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 56e6e57;锚点随批次刷新\n\nRedis 发布时限批次的三级证据,绑定 clean HEAD `56e6e57`(worktreeDirty:false):\n\n· runtime 30/30 步、**776 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 776 = 759 + 本批 17 例(contracts 9 + 两后端各 4),与前置预测一致。\n dependency-resilience / multi-instance / write-capacity 这些真打 Redis 的\n 门禁全过——2 秒时限没有误伤健康链路。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate\n (npm 审计接口 503 重试两次后成功)。\n\n本提交按 C241 把锚点指向父提交 56e6e57;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/01d0eabfa71ec061d876d39d4f399d2290530a15","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-18T18:44:00-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":90814,"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-19T09:13: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
|
36
|
1789782246
|
1789782336
|
0
|
1789782244
|
1789782350
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24214
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 56e6 chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 56e6e57;锚点随批次刷新...
|
76
|
5
|
platform-governance.yml
|
95
|
5
|
0
|
refs/heads/main
|
01d0eabfa71ec061d876d39d4f399d2290530a15
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb","after":"01d0eabfa71ec061d876d39d4f399d2290530a15","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/94ec469fbac4eeda3fb9d0f0545be831e8eeb2cb...01d0eabfa71ec061d876d39d4f399d2290530a15","commits":[{"id":"01d0eabfa71ec061d876d39d4f399d2290530a15","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 56e6e57;锚点随批次刷新\n\nRedis 发布时限批次的三级证据,绑定 clean HEAD `56e6e57`(worktreeDirty:false):\n\n· runtime 30/30 步、**776 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 776 = 759 + 本批 17 例(contracts 9 + 两后端各 4),与前置预测一致。\n dependency-resilience / multi-instance / write-capacity 这些真打 Redis 的\n 门禁全过——2 秒时限没有误伤健康链路。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate\n (npm 审计接口 503 重试两次后成功)。\n\n本提交按 C241 把锚点指向父提交 56e6e57;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/01d0eabfa71ec061d876d39d4f399d2290530a15","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-18T18:44:00-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":"56e6e57c22a534a07ac54bc5f8bf9da1c6806a03","message":"chore(reports): 静态 28/28 回绑 @ 00cd95d;数字前置到本批实测值\n\nown-tests 96 → 99、own-test-cases 762 → 779(+3 文件 / +17 例:contracts 9 例判定单测\n与两后端各 4 例黑洞 Redis 验收;C70 只计 git 已跟踪文件,故必须在实现提交落地后才数得到)。\n\ntests-passing 759 → 776 是**预测值**(759 + 17),由下一轮 runtime 实测证实。\n前两批这条路子都验证过:预测被实测原样证实。\n\n锚点按 C241 指向父提交 00cd95d。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/56e6e57c22a534a07ac54bc5f8bf9da1c6806a03","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-18T18:31:04-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":"00cd95da0b4f2694db9528235f69d2f95a6707ab","message":"fix(realtime): Redis 发布加可判责时限 + 批次预算刹车——此前一次 Redis 故障既不可判责也不收敛\n\nB3″ 登记的推迟项里有一条是真缺口,同日单独做掉。**先有证据再动手**:起一个「接受连接但\n永不应答」的 TCP 服务端(C63 已建模的半开/黑洞形态),用与本仓 publisher 完全相同的连接配置\n(maxRetriesPerRequest: null——BullMQ 的要求)打一次 publish,**8 秒后仍然挂着**。\n不是慢,是永远:ioredis 在该配置下无限重试,命令永不 reject。\n\n真正的后果不在「慢」,在它挂在 outbox 领取事务**之内**:\n\n 修复前 修复后\n 单行 publish 无限挂起 2s 抛 REALTIME_REDIS_COMMAND_TIMEOUT\n 该行 attempts 不增(整事务回滚) +1,事务提交\n 批内其余 49 行 一次都没试过 按预算尽量试,剩下留给下一跳\n 连续故障 每秒重开一个必然超时的事务,不收敛 10 跳后进死信,可判责终态\n 运维看到的错误 Prisma 事务超时,**指向数据库** 稳定前缀,指向 Redis\n\n**光加超时不够,这是最容易做漏的一半。** 故障时每行烧掉一个完整时限,一批 50 行 ×2s 远超\n15 秒事务预算——事务照样超时回滚、attempts 照样不增,只是从「挂着」变成「忙着」。\n所以有 realtimeDispatchBudget:每行开工前裁决「还剩不剩得下再试一行」,不够就 break,\n把剩下的留给下一跳,让本事务先把已累加的 attempts 提交掉。**收敛性来自这条刹车,不是超时。**\n\n超时**抛错不吞**:五个 publish 点各有自己的失败语义(dispatcher 累加 attempts 走死信,\n进程内扇出向上传播)。在 helper 里吞掉就变成事件静默丢失,比挂住更糟。\n\n证据:\n· contracts 9 例判定单测——含「超时后底层 promise 迟到 reject 不产生 unhandledRejection」\n 与「15s 预算最多放行 7 行」(关键不是 7,是它 \u003c 50);\n· 两后端各 4 例真实 ioredis 打黑洞服务端验收,**直接测生产类**\n (new EventBus(hungRedis) / new EventBusService(hungRedis, ...))——在测试里另写一份\n publish 只能证明 helper 能用,证明不了生产路径接了它;\n· check:dual-backend 增 12 条 targeted 断言(五个 publish 点 + 两处刹车 + 黑洞用例本身)\n + 1 个受控断线负探针,dualBackendParityNegativeProbes 3 → 4。\n负向实测:摘掉 Fastify 生产 EventBus.publish 的时限 → 该用例挂满 30 秒测试上限后红、\n其余三例仍绿(精确命中);已恢复现场。\n\n顺带调了一个既有断言并注明理由:G16 的「提交后才发投递样本」用 4200 字节邻近窗口,预算刹车\n合法地把两点推远约 600 字节,放宽到 4800。它是邻近性启发式不是语义判据,意图未变;\n我也把预算日志挪到 observeDelivery 之后,尽量少动它的相邻性。\n\ncontracts 升 1.24.0(expand-only),两把锁重签,下游 fixture 源码未改即通过。\n\n证据:typecheck 13/13;pnpm check 28/28。runtime 整轮与报告回绑在下一提交。\n锚点按 C241 指向父提交 94ec469。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/00cd95da0b4f2694db9528235f69d2f95a6707ab","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-18T18:29:12-07:00","added":["apps/api-fastify/test/realtime.redis-timeout.acceptance.test.ts","apps/api-nestjs/test/realtime.redis-timeout.acceptance.test.ts","packages/contracts/src/realtime-redis-timeout.test.ts"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/dispatcher.ts","apps/api-fastify/src/plugins/events.ts","apps/api-fastify/src/plugins/outbox.ts","apps/api-nestjs/src/dispatcher.ts","apps/api-nestjs/src/events/event-bus.service.ts","apps/api-nestjs/src/events/outbox-dispatcher.service.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/realtime.ts","reports/baseline.json","scripts/check-dual-backend-parity.mjs"]}],"total_commits":0,"head_commit":{"id":"01d0eabfa71ec061d876d39d4f399d2290530a15","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 56e6e57;锚点随批次刷新\n\nRedis 发布时限批次的三级证据,绑定 clean HEAD `56e6e57`(worktreeDirty:false):\n\n· runtime 30/30 步、**776 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 776 = 759 + 本批 17 例(contracts 9 + 两后端各 4),与前置预测一致。\n dependency-resilience / multi-instance / write-capacity 这些真打 Redis 的\n 门禁全过——2 秒时限没有误伤健康链路。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate\n (npm 审计接口 503 重试两次后成功)。\n\n本提交按 C241 把锚点指向父提交 56e6e57;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/01d0eabfa71ec061d876d39d4f399d2290530a15","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-18T18:44:00-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":90814,"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-19T09:13: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
|
8
|
1789782337
|
1789782345
|
0
|
1789782245
|
1789782351
|
|
|
0
|
Edit
Delete
|
|
24215
|
docs(治理): 建宿主协议签收单目录——C-3 附条件的执行面,六份逐域单全部未签收
|
116
|
5
|
platform.yml
|
173
|
5
|
0
|
refs/heads/main
|
b69710a74604d55a435971103dc033025cbc6e6b
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"51e311bf417385a994296f20da3b9458761bdee8","after":"b69710a74604d55a435971103dc033025cbc6e6b","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/51e311bf417385a994296f20da3b9458761bdee8...b69710a74604d55a435971103dc033025cbc6e6b","commits":[{"id":"b69710a74604d55a435971103dc033025cbc6e6b","message":"docs(治理): 建宿主协议签收单目录——C-3 附条件的执行面,六份逐域单全部未签收\n\n立项这件事在本体系里已经被裁过:决策批次-2026-09-16 的 C-3(✅ 采纳)把九个契约域的\n运行宿主裁给上层既有宿主,附条件写死「宿主协议……签收才算准入」,Q01 原文还有两句更硬的\n——「签收前不运行」与「不得以『方便实现』自动新增 M8」。裁决当天的执行顺序 §3 第 4 条\n即为「C-3 宿主协议逐域签收 → Catalog 六项去向」,而建本目录之前,全仓「宿主协议」四字\n只出现在三篇设计文档里,零份签收材料:空着的不是立项,是签收。\n\n本次按十三项最小内容(能力ID / 数据Owner / 运行Owner / 库 / 对外契约 / 鉴权 / 备份 /\nSLO / 值班 / 依赖 / 预算 / 升级退出 / 消费者清单)逐域建单,五份对应 C-3 承接表:\nC15 跨域流程、C16 企业 IM、C17 数据分析、C18 统一体验、C19 成本与容量,状态一律「未签收」。\n每份代填的只有本仓可机器核验的字段(规则文件与行数、域测试、失败关闭夹具例数、Catalog\n登记与 blockers、本域特有约束),宿主侧字段一律空缺;本目录不代任何 Owner 签字,\n不改任何 Catalog 字段——Catalog 去向登记是签收之后的动作,须走 CHG。\n\n三处不能读岔的,逐单复写:\n- C19 的宿主按 C-3 是「复用 C17 选定宿主」,C17 未签收前它的宿主栏无从填起;且 C-15 改案\n 把订阅计量与出账并入本域,范围改写材料 CHG-017 待签,签前须先确认适用哪版范围。\n- C18 的宿主是劈成两半的:企业业务 Shell 归数字员工基座(本单要签的那半),平台自身入口\n 由本仓独立工作台承载(CHG-018 修正,不走宿主签收)。工作台已在本机 dev 跑起来,\n 不构成把 enterprise-experience 读成「已有承接」的理由。\n- C15 是六域里唯一带「无合格宿主则另提运行承接裁决」口子的,那是 Q01 给新建运行承接\n (含本仓模块)留的唯一合法入口,走它要附至少两个宿主方案的成本与迁移影响,不是跳过签收。\n\nC01 注册中心单列为「不适用」:C-3 的承接表只覆盖 C11—C19,注册中心是 C01、责任在\nCatalog Owner / 平台工程,权威状态是获批的 Git 内容,没有「托管到某个上层业务应用」这个选项。\nA-2 附条件里「注册中心项已由 CHG-013 / 014 处理」指的是登记面(code_truth 改指、证据归零),\n不是运行承接裁决。它真正卡的是六条 blocker(DEC-009/010/011/012/031/032)的落地面——\n六条都已 approved,所以不是等裁决,是这些裁决在本域还没有对应实现。\n\n一条五份单共同的前置(机器实测 2026-09-18):六个域在 contracts/ 里已登记的 HTTP 契约与\nFact 都是 0——contracts/contracts/ 的 7 份 OpenAPI 全属七模块,facts.json 对六域一条没有。\n按仓纪律 1「模块新增端口 / Fact 必须先登记 contracts/」,登记对外契约必须发生在签收之前,\n否则宿主签的是一份没有接口定义的协议。\n\n同时在 Q01 的「待改产物 / 责任」后补一段「签收面」指向本目录,避免新目录成为孤儿文档。\n门禁:治理层 check-workspace-consistency 重跑,除在案常驻的 L9 COMPOSE_PROJECT_COLLISION\n外无新增问题;七份新文档的相对链接与锚点逐条实测可达。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/b69710a74604d55a435971103dc033025cbc6e6b","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-18T18:46:22-07:00","added":["docs/能力设计/宿主协议/C01-application-contract-registry.md","docs/能力设计/宿主协议/C15-cross-domain-workflow.md","docs/能力设计/宿主协议/C16-collaboration-messaging.md","docs/能力设计/宿主协议/C17-data-analytics.md","docs/能力设计/宿主协议/C18-enterprise-experience.md","docs/能力设计/宿主协议/C19-cost-capacity.md","docs/能力设计/宿主协议/README.md"],"removed":[],"modified":["docs/能力设计/设计问题收口方案.md"]},{"id":"7dd4429a2d0400fdd2f2e9ec2b93e8cfb6e52609","message":"docs(工作台): 订正实现记录里「回绑」那句 —— 本轮只回绑了 runtime 作用域的两份\n\n21b0821 写记录时那句是「报告回绑单独成提交跟在本提交之后」,写的是打算而不是结果。\n实际只做到一半,记录里现在把一半的边界画出来:naming 与 fork-readiness 已在 21b0821 上\n以 worktreeDirty=false 回绑(edff342);module-imports 的输入集确实被本轮动到,但取证时\n仓根不干净——树里有并行会话正在写的未跟踪产物 docs/能力设计/宿主协议/——按仓根算就是\ndirty,回绑等于把现有 clean 绑定降级,留给干净树上补;caddy 的输入本轮一个都没动,\n不需要跟着走。\n\n也就是说这两项在 21b0821 上的证据形态是门禁 stdout 与退出码,不是回绑报告。记录 §6 改成\n一张处置表,不再是一句笼统的「只在本提交之后单独回绑」。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/7dd4429a2d0400fdd2f2e9ec2b93e8cfb6e52609","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-18T18:46:05-07:00","added":[],"removed":[],"modified":["docs/工作台交互与服务目录完善记录-2026-09-18.md"]},{"id":"edff342c2c4e3a7b11920e51d87c32905d58280b","message":"chore(reports): naming 与 fork-readiness 回绑 @ 21b0821 —— 根级两份这轮拿不到 clean\n\n工作台改版(21b0821)动的是 runtime/apps/workbench,naming 与 fork-readiness 的输入集\n覆盖整个 runtime/,所以这两份必须跟着走,否则 check:evidence 会把它们判成过期。两份都在\nruntime 作用域的干净树上重跑,exit 0、worktreeDirty=false。\n\n同一时刻**没有**回绑的两份,以及为什么:\n- reports/module-imports.latest.json:输入集含工作台(规则 3「工作台不得静态 import 任何\n @juhai/module-*」),确实被 21b0821 动到,但它的 provenance 按仓根算——树里有并行会话\n 正在写的 docs/能力设计/宿主协议/(未跟踪,18:43 起),按仓根算就是 dirty=true。回绑一份\n worktreeDirty=true 的报告等于把现有的 clean 绑定降级,不如留着,等干净树上补。\n- reports/caddy.latest.json:同样只能绑 dirty=true,但它的输入(modules.json、\n caddy-routes.json、两个 Caddyfile)21b0821 一个都没动,本来就不需要跟着走。\n\n本轮这四项门禁在 21b0821 上都跑过 exit 0(module-imports、caddy 的证据形态因此是门禁\nstdout,不是回绑报告)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/edff342c2c4e3a7b11920e51d87c32905d58280b","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-18T18:45:42-07:00","added":[],"removed":[],"modified":["runtime/reports/fork-readiness.latest.json","runtime/reports/naming.latest.json"]},{"id":"21b0821a2898e0e2d6f4660b8c50744600dd96bb","message":"feat(workbench): 服务目录重做与交互完善——三处「设计写了、WB-1 没落」的缺口一并补上\n\n本轮只动 runtime/apps/workbench 的前端代码:读的还是原来那三个管理读面与随构建附带的\n目录快照,不新增接口、不新增数据来源、不新增写操作,因此不改变任何模块的验收等级、\n发布档位与 Catalog 状态。\n\n先补的三处不是新功能,是已签署设计里写了而 WB-1 没实现的:\n- 快照的 conflicts / status 此前被整个忽略,页面只渲染 entries。对外交付设计 §3.1 要求\n 「来源冲突展示冲突及证据,不静默挑选更乐观的结果」,现在冲突块排在条目之前,为空时\n 明写「0 处来源冲突」——不靠「没看见」表示没有。\n- §5.3 的「显示来源、环境和更新时间」此前一处都没有。现在每个区块各自显示取数时刻、\n 可单独重取,页脚给出平台接口地址与快照路径。\n- nonce 一直是生成并随授权请求发出,回调里却从未与 id_token 比对(§8 关键验收场景 2\n 要求 PKCE / state / nonce 都正确)。现在 nonce 与 aud 在建立会话之前校验,任一不符即\n 拒绝、不落 sessionStorage;iss 不符只降级为「主体未知」并说明原因——那是 D-10 的部署\n 配置问题,不是这次登录不合法。顺带收了 expires_in 被丢弃的问题:过期令牌此前会补水成\n 「导航栏显示已登录、每个读面都报缺凭证」。\n\n服务目录从一张静态表重做成可取景的服务中心:搜索、四个筛选、排序、分组、选中条目与是否\n对照运行时整体进 URL(默认值一律不写进去,认不出的参数退回默认而不是把页面打空),筛出来\n的视图因此可以直接贴给别人。五列可排序,层按 P0 / P1 / P2 层序、模块档位按 shape →\nauthority → e2 推进序——代码注释与页面 title 都写明这是固定显示顺序、不是优劣排名。详情\n从行内展开改成宽屏常驻面板 / 窄屏行内,六个区加快照自带的 flags 口径提醒;稳定标识、包名、\ncode_truth、绑定提交与 HTTP 前缀都带复制按钮,复制的是完整值而不是截断显示的短号。快照的\ncounts 原样成摘要条,不用筛选结果重算——那是两个时刻的两件事。\n\n新增的「对照运行时」开关默认关:目录页读的是静态快照,不该因为打开一个页面就去打需要令牌\n的接口;开关进 URL,是因为收到链接的人有权知道这个视图会额外取一份数据。打开后表格多一列\n已装载 / 未装载、详情多一节运行时对照。读面失败时只在表格上方说一次(分类 + 原因 + 重试),\n行内用 —,详情那节指回去——同一条 401 不连同同一个重试按钮摆三遍。\n\n运行信息页给出模块与项目的映射及跳回目录的深链(模块 id identity 与项目标识\nenterprise-idp 不是一回事),查不到映射就不给链接。交互面另有:深色模式真正接上(此前\n.dark 变量是死代码),首帧前由内联脚本应用偏好、不闪一帧浅色;焦点环写成原生 outline 而\n不是 @apply ring-*,焦点环消失是可达性缺陷、不该由主题配置的颜色键决定;方向键只在焦点\n落进表格后接管,全局劫持等于抢走页面滚动;窄屏改为收列而不是横向滚动,上一版的详情被困在\n表格的横向滚动容器里、手机上要左右刮着读。\n\n实测与未闭环见 docs/工作台交互与服务目录完善记录-2026-09-18.md。要点两条:nonce / aud\n校验只有单测级证据,托管登录要人工输口令、本轮没走完整授权码流程;工作台仍无仓内测试装置,\n那些断言未进 pnpm check。门禁在本轮的脏树上跑绿(workbench typecheck / lint / build、\ncheck:module-imports、check:naming、check:fork-readiness、check:caddy),报告回绑单独\n成提交跟在本提交之后。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/21b0821a2898e0e2d6f4660b8c50744600dd96bb","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-18T18:44:46-07:00","added":["docs/工作台交互与服务目录完善记录-2026-09-18.md","runtime/apps/workbench/src/app/callback/layout.tsx","runtime/apps/workbench/src/app/catalog/layout.tsx","runtime/apps/workbench/src/app/login/layout.tsx","runtime/apps/workbench/src/app/runtime/layout.tsx","runtime/apps/workbench/src/components/catalog/catalog-table.tsx","runtime/apps/workbench/src/components/catalog/counts-strip.tsx","runtime/apps/workbench/src/components/catalog/entry-detail.tsx","runtime/apps/workbench/src/components/page-header.tsx","runtime/apps/workbench/src/components/refresh-button.tsx","runtime/apps/workbench/src/components/site-footer.tsx","runtime/apps/workbench/src/components/theme-toggle.tsx","runtime/apps/workbench/src/components/ui/copy-button.tsx","runtime/apps/workbench/src/components/ui/data-list.tsx","runtime/apps/workbench/src/features/platform/catalog-filters.ts","runtime/apps/workbench/src/lib/format.ts","runtime/apps/workbench/src/lib/theme.ts"],"removed":[],"modified":["runtime/apps/workbench/src/app/callback/page.tsx","runtime/apps/workbench/src/app/catalog/page.tsx","runtime/apps/workbench/src/app/globals.css","runtime/apps/workbench/src/app/layout.tsx","runtime/apps/workbench/src/app/login/page.tsx","runtime/apps/workbench/src/app/page.tsx","runtime/apps/workbench/src/app/runtime/page.tsx","runtime/apps/workbench/src/components/app-nav.tsx","runtime/apps/workbench/src/components/state-block.tsx","runtime/apps/workbench/src/components/ui/badge.tsx","runtime/apps/workbench/src/components/ui/card.tsx","runtime/apps/workbench/src/features/auth/api.ts","runtime/apps/workbench/src/features/auth/config.ts","runtime/apps/workbench/src/features/auth/store.ts","runtime/apps/workbench/src/features/platform/hooks.ts","runtime/apps/workbench/src/features/platform/types.ts","runtime/apps/workbench/src/lib/providers.tsx","runtime/apps/workbench/tailwind.config.ts"]},{"id":"ef1f95e091db917900dd98bf11f6385e6b176387","message":"docs(部署): 登记「装载全部模块」——1/7 不是回归,是 :3101 的 profile 只写了 identity\n\n§11.4 与 §18.3 两处记的「已装载 1/7」都是当时的实测,本节不追改,补的是成因,\n而成因只在一条链上:常驻容器 :53001 由 compose 注入七个 profile,一直是 7/7;\n工作台读的那条链末端是裸 dev 进程 :3101,它的 PLATFORM_PROFILES 取自\n.secrets/enterprise-platform-identity-dev.env,值是 PF-07 阶段 identity 单启时的\n出厂值 'identity'。同一块读面,两个运行面给的答案差六个模块。\n\n改动一处且在仓外:该 env 第 28 行扩成七个(原件备份 .bak-20260919-profiles),\n七个 DATABASE_URL_\u003cMODULE\u003e 本来就齐、与容器指同一台 PG(容器内 postgres:5432 =\n本机 127.0.0.1:55470),迁移无须补跑;Redis 逻辑库 dev 用 5、容器用 14,不撞。\n按 .claude/launch.json 停 pid 19008、重起为 39237,:3098 / :3010 未动,\n未重建镜像、13 个 stack 容器一个没动。仓内零改动。\n\n实测(§19.3,作用域 = 本机 dev,证据等级 = 运行态链路):启动日志七模块全装载、\n10 条模块作业句柄注册、RLS enforce 校验通过;/api/platform/modules 直打 :3101 与\n经 :3098 代理均 7 条;浏览器 :3010 总览「已装载 / 已登记模块 7 / 7」。端口提供方\n四项由模块承接,其中 factExport 与 serviceCredential 改前是 fail-closed,\npermission / audit 改前走 local-tenant-scope / local-log 回退。\n\n同节写明三条不得读岔的:credential-shape 与 scope 都是 shape 档形状实现、不是权威实现;\n七个模块只有 identity 有 health 探针;装上 ≠ 有能力 ≠ 环境健康。\n\n§19.4 留下四条:① mode 仍是 local(PLATFORM_PORTS_MODE 未设置、非生产按设计回退),\n与容器的 fail-closed 不同档,要不要一并改未裁;② 两个进程现在连同一批模块库,\n队列虽按 Redis 逻辑库分开、作业也要入队才跑,但从 :3101 入队会写容器在读写的库;\n③ env 文件名 identity-dev 与内容(七模块)已名实不符,只登记;④ 本节证据不绑提交——\n裸进程没有 PLATFORM_SOURCE_SHA,且取证时工作区 dirty(工作台改版 WIP)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/ef1f95e091db917900dd98bf11f6385e6b176387","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-18T18:36:44-07:00","added":[],"removed":[],"modified":["docs/dev部署运行重做记录-2026-09-18.md"]}],"total_commits":0,"head_commit":{"id":"b69710a74604d55a435971103dc033025cbc6e6b","message":"docs(治理): 建宿主协议签收单目录——C-3 附条件的执行面,六份逐域单全部未签收\n\n立项这件事在本体系里已经被裁过:决策批次-2026-09-16 的 C-3(✅ 采纳)把九个契约域的\n运行宿主裁给上层既有宿主,附条件写死「宿主协议……签收才算准入」,Q01 原文还有两句更硬的\n——「签收前不运行」与「不得以『方便实现』自动新增 M8」。裁决当天的执行顺序 §3 第 4 条\n即为「C-3 宿主协议逐域签收 → Catalog 六项去向」,而建本目录之前,全仓「宿主协议」四字\n只出现在三篇设计文档里,零份签收材料:空着的不是立项,是签收。\n\n本次按十三项最小内容(能力ID / 数据Owner / 运行Owner / 库 / 对外契约 / 鉴权 / 备份 /\nSLO / 值班 / 依赖 / 预算 / 升级退出 / 消费者清单)逐域建单,五份对应 C-3 承接表:\nC15 跨域流程、C16 企业 IM、C17 数据分析、C18 统一体验、C19 成本与容量,状态一律「未签收」。\n每份代填的只有本仓可机器核验的字段(规则文件与行数、域测试、失败关闭夹具例数、Catalog\n登记与 blockers、本域特有约束),宿主侧字段一律空缺;本目录不代任何 Owner 签字,\n不改任何 Catalog 字段——Catalog 去向登记是签收之后的动作,须走 CHG。\n\n三处不能读岔的,逐单复写:\n- C19 的宿主按 C-3 是「复用 C17 选定宿主」,C17 未签收前它的宿主栏无从填起;且 C-15 改案\n 把订阅计量与出账并入本域,范围改写材料 CHG-017 待签,签前须先确认适用哪版范围。\n- C18 的宿主是劈成两半的:企业业务 Shell 归数字员工基座(本单要签的那半),平台自身入口\n 由本仓独立工作台承载(CHG-018 修正,不走宿主签收)。工作台已在本机 dev 跑起来,\n 不构成把 enterprise-experience 读成「已有承接」的理由。\n- C15 是六域里唯一带「无合格宿主则另提运行承接裁决」口子的,那是 Q01 给新建运行承接\n (含本仓模块)留的唯一合法入口,走它要附至少两个宿主方案的成本与迁移影响,不是跳过签收。\n\nC01 注册中心单列为「不适用」:C-3 的承接表只覆盖 C11—C19,注册中心是 C01、责任在\nCatalog Owner / 平台工程,权威状态是获批的 Git 内容,没有「托管到某个上层业务应用」这个选项。\nA-2 附条件里「注册中心项已由 CHG-013 / 014 处理」指的是登记面(code_truth 改指、证据归零),\n不是运行承接裁决。它真正卡的是六条 blocker(DEC-009/010/011/012/031/032)的落地面——\n六条都已 approved,所以不是等裁决,是这些裁决在本域还没有对应实现。\n\n一条五份单共同的前置(机器实测 2026-09-18):六个域在 contracts/ 里已登记的 HTTP 契约与\nFact 都是 0——contracts/contracts/ 的 7 份 OpenAPI 全属七模块,facts.json 对六域一条没有。\n按仓纪律 1「模块新增端口 / Fact 必须先登记 contracts/」,登记对外契约必须发生在签收之前,\n否则宿主签的是一份没有接口定义的协议。\n\n同时在 Q01 的「待改产物 / 责任」后补一段「签收面」指向本目录,避免新目录成为孤儿文档。\n门禁:治理层 check-workspace-consistency 重跑,除在案常驻的 L9 COMPOSE_PROJECT_COLLISION\n外无新增问题;七份新文档的相对链接与锚点逐条实测可达。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/b69710a74604d55a435971103dc033025cbc6e6b","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-18T18:46:22-07:00","added":["docs/能力设计/宿主协议/C01-application-contract-registry.md","docs/能力设计/宿主协议/C15-cross-domain-workflow.md","docs/能力设计/宿主协议/C16-collaboration-messaging.md","docs/能力设计/宿主协议/C17-data-analytics.md","docs/能力设计/宿主协议/C18-enterprise-experience.md","docs/能力设计/宿主协议/C19-cost-capacity.md","docs/能力设计/宿主协议/README.md"],"removed":[],"modified":["docs/能力设计/设计问题收口方案.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":22264,"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-19T09:20:11+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
|
1789782547
|
1789783593
|
0
|
1789782545
|
1789783622
|
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
|
|
24216
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 520c chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 520cacc;锚点随批次刷新...
|
76
|
5
|
governance.yml
|
96
|
5
|
0
|
refs/heads/main
|
c015261889aca3b700d1226045d8f66a27c3d431
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"01d0eabfa71ec061d876d39d4f399d2290530a15","after":"c015261889aca3b700d1226045d8f66a27c3d431","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/01d0eabfa71ec061d876d39d4f399d2290530a15...c015261889aca3b700d1226045d8f66a27c3d431","commits":[{"id":"c015261889aca3b700d1226045d8f66a27c3d431","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 520cacc;锚点随批次刷新\n\nB4 三级证据绑定 clean HEAD `520cacc`(worktreeDirty:false):\n\n· runtime 30/30 步、**786 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 786 = 776 + 本批 10 例,与前置预测一致。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate(接口 503 重试后成功)。\n\n**本轮 runtime 的额外含义**:db-credential-separation / tracing / multi-instance /\ndependency-resilience / capacity / write-capacity 六个子门禁**第一次在聚合内跑在非超级用户\n登录上**——此前它们以 production 姿态启动真实入口却连超级用户,RLS 对其不生效。\n`dbCredentialSuperuserStartupRejected: 2` 是两个生产入口在超级用户连接下拒启的机器回执。\n\n本提交按 C241 把锚点指向父提交 520cacc;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/c015261889aca3b700d1226045d8f66a27c3d431","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-18T19:23:25-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":"520cacc00a6da74c376ff46886b4c61dea393ab3","message":"chore(reports): 静态 28/28 回绑 @ 52665a2;数字前置到本批实测值\n\nown-tests 99 → 100、own-test-cases 779 → 789(+1 文件 / +10 例 RLS 启动姿态判定单测;\nC70 只计 git 已跟踪文件,故必须在实现提交落地后才数得到)。\n\ntests-passing 776 → 786 是**预测值**(776 + 10),由下一轮 runtime 实测证实。\n前三批都验证过这条路子:预测被实测原样证实。\n\n锚点按 C241 指向父提交 52665a2。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/520cacc00a6da74c376ff46886b4c61dea393ab3","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-18T19:10:01-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-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.latest.json","reports/product-migrations.latest.json","reports/redis-auth-live.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/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},{"id":"52665a2f60d48062cfe891dafcd7728379524b34","message":"feat(kernel-repin): B4 RLS 启动期姿态探测——顺带修掉验收基座一直跑在超级用户上\n\n开工实测让 B4 第三次校准范围(先「rls 二选一」→ §2 订正「两模块互补」→「双 URL + 启动探测」)。\n**双 URL 那一半不做**:生产编排早有等价的三登录分离(MIGRATION / tenant API / system dispatcher),\nC55/C56 用真库临时 login + 8 个负例验过。语义已覆盖,只差名字;改名要牵动 C55/C56 全部验收面、\n8 个 runner 与生产编排,换不来任何安全收益。登记进迁移手册 §6 分歧账本。\n\n**真正缺的那一件做了。** rls.ts 文件头一直写着「非超级用户生产连接」,但那只是**运维前提**:\n部署时把 URL 填成超级用户,应用照常启动,FORCE RLS 对超级用户不生效,所有 RLS 断言恒绿。\ncheck:db-credential-separation 验的是**供给对不对**,不是**应用会不会拒绝**。\n现在四个入口(两 API 装配点 + 两 dispatcher)在 enforce 姿态下查两个事实——登录不得\nsuperuser/BYPASSRLS、清单内每张租户表已 FORCE RLS,任一不满足即拒启,错误带\n[RLS_RUNTIME_ROLE_UNSAFE] / [RLS_TABLES_NOT_FORCED]。姿态沿用已有的 RLS_CONTEXT_REQUIRED=1,\n不引入第二个开关。\n\n**它当场揪出的第二件事,比第一件更值钱**:加完探测跑第一个 runner 就红了,红的不是生产,\n是本仓自己的验收基座——七个 runner 都以 NODE_ENV=production 启动真实入口,却把共享验收库的\n**超级用户** URL 递给子进程。\"生产入口能跑\"这条证据一直比它看起来的弱:任何只在普通登录下\n才暴露的权限问题,在这些 runner 里结构上看不见。新增 scripts/lib/acceptance-runtime-login.mjs\n幂等供给非超级用户登录(API 走 tenant、dispatcher 走 system,与生产同构),\n**七个全部在新登录下通过**——没有发现只在超级用户下才活得下来的路径,说明 RLS 桥本身是对的,\n这条证据链只是终于名副其实了。\n\ncheck:redis-auth-live 是唯一需要 tenant+system 双成员资格的(它刻意单进程走完\n写库 → in-process dispatcher → Pub/Sub)。为它单开 combined 登录,并在代码里写明\n**它比生产姿态弱且是刻意的**,不构成\"生产也可以合并\"的先例。\n\n**顺带发现一个早已存在的红,判责 C254**:redis-auth 在新登录下仍红;git stash 回到 HEAD\n01d0eab 用超级用户跑一样红,与 B4 无关。根因是 C253 的第四处遗漏——它同样写死基础频道却跑在\nRedis DB 7 上。C253 修了三处,漏它是因为 check:redis-auth 不在 check:runtime 聚合里、修完\n再没跑过,而基线行从 2026-08-26 起一直标着 GREEN。C234 的 agedAcceptanceReports 当时就报了\n24 天陈旧,但「记录不阻断」——**一条不阻断的记录摆在一行 GREEN 旁边,不构成控制**。已修并转绿。\n\n证据:contracts 10 例判定单测;check:db-credentials 负例 8 → 10(新增两个生产入口在超级用户\n连接下拒启的**活证据**);七个 runner 在非超级用户登录下全绿;check:dual-backend 增 11 条\ntargeted 断言 + 1 个受控断线负探针(负探针 4 → 5);pnpm check 28/28;typecheck 13/13。\ncontracts 升 1.25.0(expand-only),两把锁重签。\n\n过程中一次自己的操作失误,如实记:为了给 redis-auth 的红做归因,我 git stash 了整个工作区,\npop 时因未跟踪文件已存在而失败,而我用 \u003e/dev/null 把报错吞了——正是本仓记过的「别用\ncmd \u003e/dev/null \u0026\u0026 echo 掩盖退出码」。已逐文件比对 stash 内容确认无丢失后才 drop。\n\n本批不做:把 agedAcceptanceReports 从「记录」升级为「阻断」——当前 7 份报告 19–24 天陈旧\n(含需 Docker / Xcode 的),一刀切会把整块板子打红。独立立项。\n\nruntime 整轮与报告回绑在下一提交。锚点按 C241 指向父提交 01d0eab。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/52665a2f60d48062cfe891dafcd7728379524b34","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-18T19:07:42-07:00","added":["apps/api-fastify/src/plugins/rls-startup.ts","apps/api-nestjs/src/prisma/rls-startup.ts","packages/contracts/src/rls-startup.test.ts","scripts/lib/acceptance-runtime-login.mjs"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/dispatcher.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-nestjs/src/dispatcher.ts","apps/api-nestjs/src/prisma/prisma.service.ts","deploy/production/compose.yml","docs/migration-playbook.md","docs/planning/内核退回pin立项-2026-09-18.md","docs/product-extension-guide.md","kernel.boundaries.json","kernel.boundaries.lock.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/rls.ts","reports/baseline.json","scripts/check-auth-startup.mjs","scripts/check-capacity-envelope.mjs","scripts/check-db-credential-separation.mjs","scripts/check-dependency-resilience.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-multi-instance.mjs","scripts/check-redis-auth-live.mjs","scripts/check-tracing.mjs","scripts/check-write-capacity.mjs","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"c015261889aca3b700d1226045d8f66a27c3d431","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 520cacc;锚点随批次刷新\n\nB4 三级证据绑定 clean HEAD `520cacc`(worktreeDirty:false):\n\n· runtime 30/30 步、**786 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 786 = 776 + 本批 10 例,与前置预测一致。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate(接口 503 重试后成功)。\n\n**本轮 runtime 的额外含义**:db-credential-separation / tracing / multi-instance /\ndependency-resilience / capacity / write-capacity 六个子门禁**第一次在聚合内跑在非超级用户\n登录上**——此前它们以 production 姿态启动真实入口却连超级用户,RLS 对其不生效。\n`dbCredentialSuperuserStartupRejected: 2` 是两个生产入口在超级用户连接下拒启的机器回执。\n\n本提交按 C241 把锚点指向父提交 520cacc;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/c015261889aca3b700d1226045d8f66a27c3d431","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-18T19:23:25-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":91147,"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-19T09:44: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
|
36
|
1789784611
|
1789784619
|
0
|
1789784609
|
1789784633
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24217
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 520c chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 520cacc;锚点随批次刷新...
|
76
|
5
|
platform-governance.yml
|
97
|
5
|
0
|
refs/heads/main
|
c015261889aca3b700d1226045d8f66a27c3d431
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"01d0eabfa71ec061d876d39d4f399d2290530a15","after":"c015261889aca3b700d1226045d8f66a27c3d431","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/01d0eabfa71ec061d876d39d4f399d2290530a15...c015261889aca3b700d1226045d8f66a27c3d431","commits":[{"id":"c015261889aca3b700d1226045d8f66a27c3d431","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 520cacc;锚点随批次刷新\n\nB4 三级证据绑定 clean HEAD `520cacc`(worktreeDirty:false):\n\n· runtime 30/30 步、**786 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 786 = 776 + 本批 10 例,与前置预测一致。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate(接口 503 重试后成功)。\n\n**本轮 runtime 的额外含义**:db-credential-separation / tracing / multi-instance /\ndependency-resilience / capacity / write-capacity 六个子门禁**第一次在聚合内跑在非超级用户\n登录上**——此前它们以 production 姿态启动真实入口却连超级用户,RLS 对其不生效。\n`dbCredentialSuperuserStartupRejected: 2` 是两个生产入口在超级用户连接下拒启的机器回执。\n\n本提交按 C241 把锚点指向父提交 520cacc;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/c015261889aca3b700d1226045d8f66a27c3d431","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-18T19:23:25-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":"520cacc00a6da74c376ff46886b4c61dea393ab3","message":"chore(reports): 静态 28/28 回绑 @ 52665a2;数字前置到本批实测值\n\nown-tests 99 → 100、own-test-cases 779 → 789(+1 文件 / +10 例 RLS 启动姿态判定单测;\nC70 只计 git 已跟踪文件,故必须在实现提交落地后才数得到)。\n\ntests-passing 776 → 786 是**预测值**(776 + 10),由下一轮 runtime 实测证实。\n前三批都验证过这条路子:预测被实测原样证实。\n\n锚点按 C241 指向父提交 52665a2。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/520cacc00a6da74c376ff46886b4c61dea393ab3","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-18T19:10:01-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-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.latest.json","reports/product-migrations.latest.json","reports/redis-auth-live.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/tracing.latest.json","reports/validation-source.latest.json","reports/write-capacity.latest.json"]},{"id":"52665a2f60d48062cfe891dafcd7728379524b34","message":"feat(kernel-repin): B4 RLS 启动期姿态探测——顺带修掉验收基座一直跑在超级用户上\n\n开工实测让 B4 第三次校准范围(先「rls 二选一」→ §2 订正「两模块互补」→「双 URL + 启动探测」)。\n**双 URL 那一半不做**:生产编排早有等价的三登录分离(MIGRATION / tenant API / system dispatcher),\nC55/C56 用真库临时 login + 8 个负例验过。语义已覆盖,只差名字;改名要牵动 C55/C56 全部验收面、\n8 个 runner 与生产编排,换不来任何安全收益。登记进迁移手册 §6 分歧账本。\n\n**真正缺的那一件做了。** rls.ts 文件头一直写着「非超级用户生产连接」,但那只是**运维前提**:\n部署时把 URL 填成超级用户,应用照常启动,FORCE RLS 对超级用户不生效,所有 RLS 断言恒绿。\ncheck:db-credential-separation 验的是**供给对不对**,不是**应用会不会拒绝**。\n现在四个入口(两 API 装配点 + 两 dispatcher)在 enforce 姿态下查两个事实——登录不得\nsuperuser/BYPASSRLS、清单内每张租户表已 FORCE RLS,任一不满足即拒启,错误带\n[RLS_RUNTIME_ROLE_UNSAFE] / [RLS_TABLES_NOT_FORCED]。姿态沿用已有的 RLS_CONTEXT_REQUIRED=1,\n不引入第二个开关。\n\n**它当场揪出的第二件事,比第一件更值钱**:加完探测跑第一个 runner 就红了,红的不是生产,\n是本仓自己的验收基座——七个 runner 都以 NODE_ENV=production 启动真实入口,却把共享验收库的\n**超级用户** URL 递给子进程。\"生产入口能跑\"这条证据一直比它看起来的弱:任何只在普通登录下\n才暴露的权限问题,在这些 runner 里结构上看不见。新增 scripts/lib/acceptance-runtime-login.mjs\n幂等供给非超级用户登录(API 走 tenant、dispatcher 走 system,与生产同构),\n**七个全部在新登录下通过**——没有发现只在超级用户下才活得下来的路径,说明 RLS 桥本身是对的,\n这条证据链只是终于名副其实了。\n\ncheck:redis-auth-live 是唯一需要 tenant+system 双成员资格的(它刻意单进程走完\n写库 → in-process dispatcher → Pub/Sub)。为它单开 combined 登录,并在代码里写明\n**它比生产姿态弱且是刻意的**,不构成\"生产也可以合并\"的先例。\n\n**顺带发现一个早已存在的红,判责 C254**:redis-auth 在新登录下仍红;git stash 回到 HEAD\n01d0eab 用超级用户跑一样红,与 B4 无关。根因是 C253 的第四处遗漏——它同样写死基础频道却跑在\nRedis DB 7 上。C253 修了三处,漏它是因为 check:redis-auth 不在 check:runtime 聚合里、修完\n再没跑过,而基线行从 2026-08-26 起一直标着 GREEN。C234 的 agedAcceptanceReports 当时就报了\n24 天陈旧,但「记录不阻断」——**一条不阻断的记录摆在一行 GREEN 旁边,不构成控制**。已修并转绿。\n\n证据:contracts 10 例判定单测;check:db-credentials 负例 8 → 10(新增两个生产入口在超级用户\n连接下拒启的**活证据**);七个 runner 在非超级用户登录下全绿;check:dual-backend 增 11 条\ntargeted 断言 + 1 个受控断线负探针(负探针 4 → 5);pnpm check 28/28;typecheck 13/13。\ncontracts 升 1.25.0(expand-only),两把锁重签。\n\n过程中一次自己的操作失误,如实记:为了给 redis-auth 的红做归因,我 git stash 了整个工作区,\npop 时因未跟踪文件已存在而失败,而我用 \u003e/dev/null 把报错吞了——正是本仓记过的「别用\ncmd \u003e/dev/null \u0026\u0026 echo 掩盖退出码」。已逐文件比对 stash 内容确认无丢失后才 drop。\n\n本批不做:把 agedAcceptanceReports 从「记录」升级为「阻断」——当前 7 份报告 19–24 天陈旧\n(含需 Docker / Xcode 的),一刀切会把整块板子打红。独立立项。\n\nruntime 整轮与报告回绑在下一提交。锚点按 C241 指向父提交 01d0eab。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/52665a2f60d48062cfe891dafcd7728379524b34","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-18T19:07:42-07:00","added":["apps/api-fastify/src/plugins/rls-startup.ts","apps/api-nestjs/src/prisma/rls-startup.ts","packages/contracts/src/rls-startup.test.ts","scripts/lib/acceptance-runtime-login.mjs"],"removed":[],"modified":["CLAUDE.md","apps/api-fastify/src/dispatcher.ts","apps/api-fastify/src/plugins/prisma.ts","apps/api-nestjs/src/dispatcher.ts","apps/api-nestjs/src/prisma/prisma.service.ts","deploy/production/compose.yml","docs/migration-playbook.md","docs/planning/内核退回pin立项-2026-09-18.md","docs/product-extension-guide.md","kernel.boundaries.json","kernel.boundaries.lock.json","kernel.downstream.lock.json","kernel.exports.lock.json","kernel.packages.json","kernel.packages.lock.json","packages/contracts/package.json","packages/contracts/src/rls.ts","reports/baseline.json","scripts/check-auth-startup.mjs","scripts/check-capacity-envelope.mjs","scripts/check-db-credential-separation.mjs","scripts/check-dependency-resilience.mjs","scripts/check-dual-backend-parity.mjs","scripts/check-multi-instance.mjs","scripts/check-redis-auth-live.mjs","scripts/check-tracing.mjs","scripts/check-write-capacity.mjs","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"c015261889aca3b700d1226045d8f66a27c3d431","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 520cacc;锚点随批次刷新\n\nB4 三级证据绑定 clean HEAD `520cacc`(worktreeDirty:false):\n\n· runtime 30/30 步、**786 tests / 0 failures**、行为矩阵 **204/204**(地板 204);\n 786 = 776 + 本批 10 例,与前置预测一致。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate(接口 503 重试后成功)。\n\n**本轮 runtime 的额外含义**:db-credential-separation / tracing / multi-instance /\ndependency-resilience / capacity / write-capacity 六个子门禁**第一次在聚合内跑在非超级用户\n登录上**——此前它们以 production 姿态启动真实入口却连超级用户,RLS 对其不生效。\n`dbCredentialSuperuserStartupRejected: 2` 是两个生产入口在超级用户连接下拒启的机器回执。\n\n本提交按 C241 把锚点指向父提交 520cacc;证据新鲜度的 runtime 行同步回绑。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/c015261889aca3b700d1226045d8f66a27c3d431","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-18T19:23:25-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":91147,"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-19T09:44: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
|
8
|
1789784619
|
1789784628
|
0
|
1789784610
|
1789784633
|
|
|
0
|
Edit
Delete
|
|
24218
|
chore(reports): candidate-contracts 回绑 @ 16459e0 — chore(reports): candidate-contracts 回绑 @ 16459e0 —— 9 条探针零豁免...
|
116
|
5
|
platform.yml
|
174
|
5
|
0
|
refs/heads/main
|
6fbebf5285a9a335410c5f884d81314d0394429c
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"b69710a74604d55a435971103dc033025cbc6e6b","after":"6fbebf5285a9a335410c5f884d81314d0394429c","compare_url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/compare/b69710a74604d55a435971103dc033025cbc6e6b...6fbebf5285a9a335410c5f884d81314d0394429c","commits":[{"id":"6fbebf5285a9a335410c5f884d81314d0394429c","message":"chore(reports): candidate-contracts 回绑 @ 16459e0 —— 9 条探针零豁免\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/6fbebf5285a9a335410c5f884d81314d0394429c","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-18T19:55:24-07:00","added":[],"removed":[],"modified":["reports/candidate-contracts.latest.json"]},{"id":"16459e09061655eb29b432aa5a9334b9685cbced","message":"test(contracts): 跨域流程的 plan 补第一条 ACCEPT 用例——最后一条 shape 探针豁免清零\n\ncheck:candidate-contracts 此前带着一条豁免:planWorkflowInstance 取不到 ACCEPT 载荷,\n因为 cross-domain-workflow 的 plan 规则在 28 例夹具里全是反例。查隔壁——\ncollaboration-messaging 的同类规则 P03 是有正例的。所以这不是「夹具只固定失败关闭一侧」\n的设计口径,是这一域缺了一条,而豁免让它看起来像是有意为之。\n\n补 P04-approved-snapshot-plans-an-instance:已批准快照 + 合法请求,载荷直接取自该域单测里\n那条已在跑的 planner 正例(不是新造的场景)。夹具 28 → 29 例(正 4 / 反 25),\ncheck:fixtures 该套件 29/29 失败 0,fixture-coverage 三档仍全为 0。\n\n连带把 C15 契约的探针由 skip 换成真探针(planWorkflowInstance ← plan.request):\n9 条探针全部比对通过、零豁免。门禁单测两处计数同步,并把断言从「豁免恰好是这一条」\n改成「豁免必须为空;再出现必须带理由」——前者会在下次加豁免时静默通过。\n\n数字声明同步:仓根 CLAUDE.md 的 17 套件 706 例 → 707,宿主协议 C15 单与索引底账的夹具数\n同步;check-workspace-consistency CLEAN,L13 无漂移。contracts 测试 416/416。\n\n跑这两道门禁都用 GOV_REPORT_DIR 重定向,仓里在途的 fixtures 报告一个字节未动——\n同日早些时候那条修复第一次真用上。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/16459e09061655eb29b432aa5a9334b9685cbced","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-18T19:55:21-07:00","added":[],"removed":[],"modified":["CLAUDE.md","contracts/SOURCE.md","contracts/candidates/contracts/workflow-orchestration-api.v1.openapi.json","contracts/test/fixtures/cross-domain-workflow.fixtures.json","docs/能力设计/宿主协议/C15-cross-domain-workflow.md","docs/能力设计/宿主协议/README.md","governance/test/check-candidate-contracts.test.mjs"]},{"id":"05497f5a3cad8b4a82d07b81504c06fe6338c972","message":"chore(reports): candidate-contracts 回绑 @ 864231d —— 含 11 个操作 ↔ 参考处理器的双向对账\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/05497f5a3cad8b4a82d07b81504c06fe6338c972","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-18T19:49:18-07:00","added":[],"removed":[],"modified":["reports/candidate-contracts.latest.json"]},{"id":"864231dc64629e58ddd53faf5c38b4f58fdf05f9","message":"feat(contracts): 五份候选契约有了可挂载的参考实现——11 个操作,传输无关、零框架依赖\n\nC-3 把这五个域的运行宿主裁给上层既有宿主、本仓不建模块,所以「完善 HTTP 实现」不能是在\nruntime 里加路由。但「每个宿主各写一遍入参解码与决策映射」必然各写各的:REJECT 被压成 4xx、\nSKIP_DUPLICATE 被当成失败、now 忘了从 ISO 串还原成 Date——每一个都是一次就足以让语义走样。\n把这一段写在 contracts/src/http/,判定与映射同源,宿主实现 = 挂载 + 鉴权 + 持有快照。\n\n本层不做任何入参校验,这是实测后的决定,不是省事。首版写了信封校验(非对象或缺顶层键回 400),\n被夹具 N06-definition-is-not-an-object 当场戳穿——那条用例期望的是 WORKFLOW_DEFINITION_INVALID,\n400 把它盖掉了。随后逐个实测七个规则入口:传非对象 / 空对象 / undefined,一律 REJECT 并带自己的\n原因码,没有一个抛异常。校验层不是多一道保险,是多一套词汇:同一个错两种表达,消费侧必然挑更\n好读的那套,规则的原因码就此架空。五份契约的 400 描述同步改为「宿主的 JSON 解析失败」。\n\n唯一的边界处理是 Date 还原:context.now(体验)与 context.policy.now(成本,嵌深一层)过 HTTP\n是 ISO 串而规则侧是 Date。漏了不会报错,只会让时间判定永远不触发——一条静默放行的路径。\n\n测试拿规则自己的夹具载荷经处理器走一遍:ACCEPT 例仍非 REJECT,REJECT 例 reasons 与夹具逐条一致,\n无快照时 planner 失败关闭仍是 200 REJECT 而非 5xx。contracts 测试 408 → 416/416,\ncheck:generated 无漂移。\n\n门禁加 HANDLER_MISSING / HANDLER_ORPHAN 双向对账。按文本解析 index.ts 而不是 import dist——\n本门禁在 ZERO_DEP_GATES 里,要能在没装依赖的临时检出里重跑,改成 import 就会退化成未构建即\nunavailable,干净回绑随之失效。负向实测:把 assessResourceTags 改名,两条规则各报一次。\n\n未做:catalogs/ 一字未动;本仓不挂路由、不建库、不新增模块,C-3 的「不新增 M8」未被触碰;\n401 / 403 / 503 属宿主责任,不在本层。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/864231dc64629e58ddd53faf5c38b4f58fdf05f9","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-18T19:49:15-07:00","added":["contracts/src/http/collaboration-messaging.ts","contracts/src/http/cost-capacity.ts","contracts/src/http/cross-domain-workflow.ts","contracts/src/http/data-analytics.ts","contracts/src/http/enterprise-experience.ts","contracts/src/http/index.ts","contracts/src/http/result.ts","contracts/test/http-handlers.test.mjs"],"removed":[],"modified":["contracts/SOURCE.md","contracts/candidates/contracts/conversation-message-api.v1.openapi.json","contracts/candidates/contracts/experience-contribution-api.v1.openapi.json","contracts/candidates/contracts/metric-contract-api.v1.openapi.json","contracts/candidates/contracts/usage-record-api.v1.openapi.json","contracts/candidates/contracts/workflow-orchestration-api.v1.openapi.json","contracts/package.json","governance/check-candidate-contracts.mjs","governance/test/check-candidate-contracts.test.mjs"]},{"id":"fb371d6cec3a76db97335f51a352cef8c2d7c7b4","message":"chore(reports): candidate-contracts 回绑 @ fdbefc9 —— 补 rules-entry 后重跑,仍 0 违规\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/fb371d6cec3a76db97335f51a352cef8c2d7c7b4","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-18T19:41:03-07:00","added":[],"removed":[],"modified":["reports/candidate-contracts.latest.json"]}],"total_commits":0,"head_commit":{"id":"6fbebf5285a9a335410c5f884d81314d0394429c","message":"chore(reports): candidate-contracts 回绑 @ 16459e0 —— 9 条探针零豁免\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/enterprise-platform/commit/6fbebf5285a9a335410c5f884d81314d0394429c","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-18T19:55:24-07:00","added":[],"removed":[],"modified":["reports/candidate-contracts.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":22425,"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-19T09:49:06+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
|
1789786674
|
1789786714
|
0
|
1789786673
|
1789786757
|
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
|
|
24219
|
docs(计划): 登记本会话——C-3 宿主协议签收面首次有落点,并附三处自查出的自造缺陷
|
117
|
5
|
governance.yml
|
76
|
5
|
0
|
refs/heads/main
|
078af5fc66585384df768683780239154d06dc7b
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"dea10cf1124b0e7714fe60f395709cda0be55fdb","after":"078af5fc66585384df768683780239154d06dc7b","compare_url":"https://gitea.g-hi.com/luoanwu/platform-governance/compare/dea10cf1124b0e7714fe60f395709cda0be55fdb...078af5fc66585384df768683780239154d06dc7b","commits":[{"id":"078af5fc66585384df768683780239154d06dc7b","message":"docs(计划): 登记本会话——C-3 宿主协议签收面首次有落点,并附三处自查出的自造缺陷\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/078af5fc66585384df768683780239154d06dc7b","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-18T19:41:03-07:00","added":[],"removed":[],"modified":["平台治理/基础设施文档/开发计划.md"]},{"id":"c777303990ce57b7b331c10c8d135b455238797a","message":"docs(基础): 开发环境.md 重写到 2026-09-18 实测——修掉两条已不成立的声明并补端口盘\n\n原文停在 2026-09-04,两条声明已不成立:\n- 「派生仓现存 3 个」——派生仓状态.json 实为 active 0 / archived 0 / missing 1 / retired 18;\n- 路径 `AI数字员工/digital-employee-os` 不存在,实为 `数字员工OS/digital-employee-os`。\n\n补上原文完全没有的本机端口盘(41 个运行容器 / 6 个栈):enterprise-platform-stack\nPG 55470 / Redis 56379 / runtime 53001 / Caddy 58080,ep-delivery-20260917 PG 55481,\nbase-framework PG 5432 / Redis 6379,hi-atelier,deos-local-verify,deos-acceptance-redis 6404。\n新增 §4 工作区一致性门禁一节(当日 CLEAN,14 仓 / 8346 文件 / 4462 链接 / 22 份 compose)。\n\n§5 已知差异按当日实测重写:\n- deos-local-verify 栈不完整——gateway 的 nginx 找不到上游 api-active(该栈无 api 容器),\n 已连续重启 2946 次,当日 docker stop 停下,容器保留可 start 恢复;根因属 OS 层未查。\n- base-framework-app 容器已不存在,当日随 73 个死容器清理,原文那条「看 3500—3502」作废。\n- 7 个上层应用仓仍无 F14 守卫,compose 身份复发只能靠工作区 L9 兜住。\n\n文内每条命令均当场复核过输出与文中声明一致;旧版两条错误声明与初始化经过移入文末「历史记录」,\n不删除。门禁 check-workspace-consistency.mjs 重写后仍 CLEAN(exit 0 / 0 issues)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/c777303990ce57b7b331c10c8d135b455238797a","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-18T19:17:52-07:00","added":[],"removed":[],"modified":["平台治理/基础/开发环境.md"]},{"id":"c894b8ce4445a7e939a0a8d5022dfb526aa3f1a5","message":"docs(决策): N-11 关闭——七个仓补齐 compose 身份,L9 转 CLEAN,并更正两处前置\n\n选项 ① 已执行:七个仓的 apps/api-nestjs/docker-compose.yml 各补\n`name: ${COMPOSE_PROJECT_NAME:-\u003c本仓 package.json name\u003e}`,各仓本地提交(未推远端)。\ndocker compose config 逐份实测 project 名互不相同、卷已变为 \u003cname\u003e_*;\ncheck-workspace-consistency.mjs 由 ISSUES 转 CLEAN(exit 0 / 0 issues)。\n\n两处更正写进条目:\n- 数量是 7 个仓不是 8 个。09-17 清单里的数字员工OS 此后已自行补上 name:,本轮不在名单内。\n- 本条一直把「共用卷里的数据归谁」列为选 ①/② 的前置,实测**该前置是空的**:\n 本机 260 个卷无任何 api-nestjs_*,project=api-nestjs 零命中,这七份 compose 在本机\n 从未以默认推导名起过;已存在的 juhai-knowledge-cloud / juhai-quotation 两个 project 的\n config_files 指向工作区外的另一棵树,与本条无关。故零数据迁移,且该结论只绑本机。\n\n未随本条关闭:选项 ② 的防复发半边。七个仓仍无 F14 守卫,仓内 pnpm check 在冲突状态下\n依旧会绿,复发只能靠工作区 L9 兜住——另行派活。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/c894b8ce4445a7e939a0a8d5022dfb526aa3f1a5","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-18T19:14:16-07:00","added":[],"removed":[],"modified":["平台治理/doc/decisions/待裁决架构事项.md"]}],"total_commits":0,"head_commit":{"id":"078af5fc66585384df768683780239154d06dc7b","message":"docs(计划): 登记本会话——C-3 宿主协议签收面首次有落点,并附三处自查出的自造缺陷\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/platform-governance/commit/078af5fc66585384df768683780239154d06dc7b","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-18T19:41:03-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":11102,"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-19T08:48: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
|
1
|
4
|
1789786714
|
1789786730
|
0
|
1789786684
|
1789786730
|
|
|
0
|
Edit
Delete
|
|
24220
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 43e3 chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 43e3fe5;锚点随批次刷新...
|
76
|
5
|
governance.yml
|
98
|
5
|
0
|
refs/heads/main
|
8419453dedda057cca061637c499e06b345c8db8
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c015261889aca3b700d1226045d8f66a27c3d431","after":"8419453dedda057cca061637c499e06b345c8db8","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/c015261889aca3b700d1226045d8f66a27c3d431...8419453dedda057cca061637c499e06b345c8db8","commits":[{"id":"8419453dedda057cca061637c499e06b345c8db8","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 43e3fe5;锚点随批次刷新\n\n· runtime 30/30 步、786 tests / 0 failures、行为矩阵 204/204,clean HEAD `43e3fe5`。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\n本批只动了两个门禁脚本(check-access-audit 的 envsubst 白名单、check-operations 的 O4\n派生断言),runtime 路径未变,本可不重跑。**仍然重跑了**:这一批讲的就是「陈旧证据不算数」,\n给自己开例外会让整批话失去分量——runtime 证据现在绑在本批 HEAD 上,不是上一批的。\n\n本提交按 C241 把锚点指向父提交 43e3fe5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/8419453dedda057cca061637c499e06b345c8db8","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-18T20:03:50-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":"43e3fe53b3cef4f9941b75a4cc2a132349a37505","message":"fix(gates): C255 access-audit 网关三周起不来 + 陈旧报告全面复验;O4 改为从模板派生\n\nC254 说「聚合外的 runner 会静默腐化」,那就把这句话查实:基线上还有 9 份报告 19–26 天陈旧\n且都标着 GREEN。能本机复验的七份全部重跑,结果分两类——\n\n**一类是本机缺前提,不是回归**:\n· trace-backend 依次缺 grafana/tempo:3.0.3、prom/prometheus:v3.14.0,runner fail-closed 拒跑,\n 行为正确。拉回后实跑通过(Collector→Tempo 入库、双重启持久、告警 3/3)。\n 顺带订正 CLAUDE.md 里 C243 的说法:「本机 Docker 走离线代理,基础镜像拉取一律超时」当日\n 已不成立,pull 正常。\n· 五个 check:*-image runner(postgres / alertmanager / loki / tempo / otel-collector)全绿。\n\n**一类是真回归,判责 C255**:\nC230 给网关模板加了 set_real_ip_from ${REAL_IP_TRUSTED_CIDR},同步了模板 / compose /\n.env.example / O4 断言四处,**唯独漏了 check-access-audit.mjs 自己硬编码的那份\nNGINX_ENVSUBST_FILTER**。变量不被替换,nginx 以\n`host not found in set_real_ip_from \"${REAL_IP_TRUSTED_CIDR}\"` 启动失败——\n该专项自 2026-08-29 起红了三周,而基线行按 08-26 的绿盘一直标着 GREEN。\n讽刺的是 O4 恰有一条「envsubst filter must allow the real_ip trust variable」:\n**它只查 compose,没查自己的测试夹具**。\n\n修法的重点不在补那一个变量,而在别让下一个变量再漏:O4 该断言改为**从模板派生**——\n模板里出现的每个 ${VAR} 必须同时出现在 compose 与 runner 两份白名单里,漏一个即红。\n负向已验证:摘掉变量精确报 `[O4] ... missing template variables: REAL_IP_TRUSTED_CIDR`。\n\n**今天两个 C 号(C254 / C255)是同一个结构**:功能落地时打断了聚合外的 runner,\n而它不再运行,所以没人知道。`agedAcceptanceReports` 每次都如实报了陈旧,\n但「记录不阻断」——一条不阻断的记录摆在一行 GREEN 旁边不构成控制。\n把它升级为阻断仍是独立立项(当前仍有 mobile-android / mobile-ios /\nimage-vulnerabilities 三项本机不可复验)。\n\n证据:trace-backend、access-audit、五个镜像 runner 七份报告全部回绑当日并 status=passed;\nCLAUDE.md 三处新鲜度日期随报告 generatedAt 同步(C132 会持续盯);pnpm check 28/28。\n\n锚点按 C241 指向父提交 c015261。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/43e3fe53b3cef4f9941b75a4cc2a132349a37505","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-18T19:51:02-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/access-audit.latest.json","reports/agent-adapters.latest.json","reports/alertmanager-image.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/loki-image.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/otel-collector-image.latest.json","reports/platform-dependency-provenance.latest.json","reports/postgres-image.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/tempo-image.latest.json","reports/trace-backend.latest.json","reports/validation-source.latest.json","scripts/check-access-audit.mjs","scripts/check-operations.mjs"]}],"total_commits":0,"head_commit":{"id":"8419453dedda057cca061637c499e06b345c8db8","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 43e3fe5;锚点随批次刷新\n\n· runtime 30/30 步、786 tests / 0 failures、行为矩阵 204/204,clean HEAD `43e3fe5`。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\n本批只动了两个门禁脚本(check-access-audit 的 envsubst 白名单、check-operations 的 O4\n派生断言),runtime 路径未变,本可不重跑。**仍然重跑了**:这一批讲的就是「陈旧证据不算数」,\n给自己开例外会让整批话失去分量——runtime 证据现在绑在本批 HEAD 上,不是上一批的。\n\n本提交按 C241 把锚点指向父提交 43e3fe5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/8419453dedda057cca061637c499e06b345c8db8","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-18T20:03:50-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":91576,"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-19T10:23: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
|
36
|
1789787034
|
1789787043
|
0
|
1789787034
|
1789787057
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24221
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 43e3 chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 43e3fe5;锚点随批次刷新...
|
76
|
5
|
platform-governance.yml
|
99
|
5
|
0
|
refs/heads/main
|
8419453dedda057cca061637c499e06b345c8db8
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"c015261889aca3b700d1226045d8f66a27c3d431","after":"8419453dedda057cca061637c499e06b345c8db8","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/c015261889aca3b700d1226045d8f66a27c3d431...8419453dedda057cca061637c499e06b345c8db8","commits":[{"id":"8419453dedda057cca061637c499e06b345c8db8","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 43e3fe5;锚点随批次刷新\n\n· runtime 30/30 步、786 tests / 0 failures、行为矩阵 204/204,clean HEAD `43e3fe5`。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\n本批只动了两个门禁脚本(check-access-audit 的 envsubst 白名单、check-operations 的 O4\n派生断言),runtime 路径未变,本可不重跑。**仍然重跑了**:这一批讲的就是「陈旧证据不算数」,\n给自己开例外会让整批话失去分量——runtime 证据现在绑在本批 HEAD 上,不是上一批的。\n\n本提交按 C241 把锚点指向父提交 43e3fe5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/8419453dedda057cca061637c499e06b345c8db8","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-18T20:03:50-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":"43e3fe53b3cef4f9941b75a4cc2a132349a37505","message":"fix(gates): C255 access-audit 网关三周起不来 + 陈旧报告全面复验;O4 改为从模板派生\n\nC254 说「聚合外的 runner 会静默腐化」,那就把这句话查实:基线上还有 9 份报告 19–26 天陈旧\n且都标着 GREEN。能本机复验的七份全部重跑,结果分两类——\n\n**一类是本机缺前提,不是回归**:\n· trace-backend 依次缺 grafana/tempo:3.0.3、prom/prometheus:v3.14.0,runner fail-closed 拒跑,\n 行为正确。拉回后实跑通过(Collector→Tempo 入库、双重启持久、告警 3/3)。\n 顺带订正 CLAUDE.md 里 C243 的说法:「本机 Docker 走离线代理,基础镜像拉取一律超时」当日\n 已不成立,pull 正常。\n· 五个 check:*-image runner(postgres / alertmanager / loki / tempo / otel-collector)全绿。\n\n**一类是真回归,判责 C255**:\nC230 给网关模板加了 set_real_ip_from ${REAL_IP_TRUSTED_CIDR},同步了模板 / compose /\n.env.example / O4 断言四处,**唯独漏了 check-access-audit.mjs 自己硬编码的那份\nNGINX_ENVSUBST_FILTER**。变量不被替换,nginx 以\n`host not found in set_real_ip_from \"${REAL_IP_TRUSTED_CIDR}\"` 启动失败——\n该专项自 2026-08-29 起红了三周,而基线行按 08-26 的绿盘一直标着 GREEN。\n讽刺的是 O4 恰有一条「envsubst filter must allow the real_ip trust variable」:\n**它只查 compose,没查自己的测试夹具**。\n\n修法的重点不在补那一个变量,而在别让下一个变量再漏:O4 该断言改为**从模板派生**——\n模板里出现的每个 ${VAR} 必须同时出现在 compose 与 runner 两份白名单里,漏一个即红。\n负向已验证:摘掉变量精确报 `[O4] ... missing template variables: REAL_IP_TRUSTED_CIDR`。\n\n**今天两个 C 号(C254 / C255)是同一个结构**:功能落地时打断了聚合外的 runner,\n而它不再运行,所以没人知道。`agedAcceptanceReports` 每次都如实报了陈旧,\n但「记录不阻断」——一条不阻断的记录摆在一行 GREEN 旁边不构成控制。\n把它升级为阻断仍是独立立项(当前仍有 mobile-android / mobile-ios /\nimage-vulnerabilities 三项本机不可复验)。\n\n证据:trace-backend、access-audit、五个镜像 runner 七份报告全部回绑当日并 status=passed;\nCLAUDE.md 三处新鲜度日期随报告 generatedAt 同步(C132 会持续盯);pnpm check 28/28。\n\n锚点按 C241 指向父提交 c015261。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/43e3fe53b3cef4f9941b75a4cc2a132349a37505","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-18T19:51:02-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/access-audit.latest.json","reports/agent-adapters.latest.json","reports/alertmanager-image.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/loki-image.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/otel-collector-image.latest.json","reports/platform-dependency-provenance.latest.json","reports/postgres-image.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/tempo-image.latest.json","reports/trace-backend.latest.json","reports/validation-source.latest.json","scripts/check-access-audit.mjs","scripts/check-operations.mjs"]}],"total_commits":0,"head_commit":{"id":"8419453dedda057cca061637c499e06b345c8db8","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ 43e3fe5;锚点随批次刷新\n\n· runtime 30/30 步、786 tests / 0 failures、行为矩阵 204/204,clean HEAD `43e3fe5`。\n· 静态 28/28。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\n本批只动了两个门禁脚本(check-access-audit 的 envsubst 白名单、check-operations 的 O4\n派生断言),runtime 路径未变,本可不重跑。**仍然重跑了**:这一批讲的就是「陈旧证据不算数」,\n给自己开例外会让整批话失去分量——runtime 证据现在绑在本批 HEAD 上,不是上一批的。\n\n本提交按 C241 把锚点指向父提交 43e3fe5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/8419453dedda057cca061637c499e06b345c8db8","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-18T20:03:50-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":91576,"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-19T10:23: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
|
8
|
1789787043
|
1789787052
|
0
|
1789787034
|
1789787057
|
|
|
0
|
Edit
Delete
|
|
24222
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ dd2d chore(reports): runtime 30/30 + 静态 28/28 回绑 @ dd2dab5;锚点随批次刷新...
|
76
|
5
|
governance.yml
|
100
|
5
|
0
|
refs/heads/main
|
14983b57ae2ab9c0e424700ca11c3f4677984400
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"8419453dedda057cca061637c499e06b345c8db8","after":"14983b57ae2ab9c0e424700ca11c3f4677984400","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/8419453dedda057cca061637c499e06b345c8db8...14983b57ae2ab9c0e424700ca11c3f4677984400","commits":[{"id":"14983b57ae2ab9c0e424700ca11c3f4677984400","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ dd2dab5;锚点随批次刷新\n\n· runtime 30/30 步、786 tests / 0 failures、行为矩阵 204/204,clean HEAD `dd2dab5`。\n· 静态 28/28(含 C256 的时效判定与门禁内自检 9/9)。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\nC256 上线后第一份 governance 报告:staleAcceptanceFreshnessViolations=0,\n两条陈旧源(mobile-android / mobile-ios)都落在已登记且未过期的豁免里——\n**它们仍然是陈旧的,只是不再沉默**:到 2026-12-19 若未解除,门禁会自己红。\n\n本提交按 C241 把锚点指向父提交 dd2dab5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/14983b57ae2ab9c0e424700ca11c3f4677984400","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-18T20:31:52-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":"dd2dab5799d061d69b7158585f1b38cd58a31833","message":"feat(gates): C256 验收时效由「记录」升级为「陈旧即红,除非登记」\n\nC254(redis-auth 红 24 天)与 C255(access-audit 红 3 周)同日连出,形态一模一样:\n功能落地时打断了聚合外的 runner,它不再运行,所以没人知道。\n\n关键不在检测失灵——**两次 C234 的 agedAcceptanceReports 都如实报了陈旧,两次都没人动**。\n问题是它「记录不阻断」:一条不阻断的记录摆在一行 GREEN 旁边,不构成控制。\n\nC234 当初不阻断的理由写在注释里且成立——「强制会把离线 check 变成环境人质」。\n所以这次不是在阻断与不阻断之间二选一,而是把「为什么可以不跑」从沉默变成**登记**:\n\n· 超 14 天即红;\n· 出口是五字段登记(reason / registeredAt / expiresAt / blockedBy / replacementPlan),\n 与 platform-dependency-deviations、framework-criteria 的 missing 登记同口径——\n 半份不算、过期即红、expiresAt 非法即红、**策略文件缺失也红**(缺策略不等于没有时效要求);\n· 豁免会过期,逼人重新面对,而不是永久沉默;\n· 已不陈旧却仍挂着的豁免显形但不阻断(它自己会过期),防豁免只增不减。\n\n当前 2 条登记,都是诚实的环境限制而非拖延:\n mobileAndroidAcceptance —— 缺 JDK/SDK/device,runner 本身 fail-closed 无假绿风险;\n mobileIosAcceptance —— 缺 Xcode 26,现有报告只是无 Xcode 下的 fail-closed 自测,\n 不是 native 证据(G19 早已如实标注)。\n两条均至 2026-12-19,replacementPlan 写明各自的解除条件。\n\n**判定器自检在门禁内自跑**(9 条判据、5 条负向),不是只挂一个人工命令——\n只挂人工命令,它自己就会变成下一个 C254。这批修的就是这个病,不能自己再犯一次。\n\n活证据:摘掉 mobile-ios 豁免 → 精确报「已 24 天未重跑(上限 14 天)且无时效豁免登记」,\nmetric 由 0 变 1;恢复即绿。\n\n棘轮新增三项:staleAcceptanceFreshnessViolations(floor 0)、\nacceptanceFreshnessSelfTestCases(floor 9)、acceptanceFreshnessSelfTestNegatives(floor 5)。\n静态轴仍是 28 步——判定挂在 check:governance 内,没有新增步骤。\n\n证据:pnpm check 28/28;自检 9/9。锚点按 C241 指向父提交 8419453。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/dd2dab5799d061d69b7158585f1b38cd58a31833","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-18T20:19:11-07:00","added":["governance/acceptance-freshness.json","scripts/check-acceptance-freshness.mjs","scripts/lib/acceptance-freshness.mjs"],"removed":[],"modified":["CLAUDE.md","package.json","reports/agent-adapters.latest.json","reports/baseline.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","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"14983b57ae2ab9c0e424700ca11c3f4677984400","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ dd2dab5;锚点随批次刷新\n\n· runtime 30/30 步、786 tests / 0 failures、行为矩阵 204/204,clean HEAD `dd2dab5`。\n· 静态 28/28(含 C256 的时效判定与门禁内自检 9/9)。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\nC256 上线后第一份 governance 报告:staleAcceptanceFreshnessViolations=0,\n两条陈旧源(mobile-android / mobile-ios)都落在已登记且未过期的豁免里——\n**它们仍然是陈旧的,只是不再沉默**:到 2026-12-19 若未解除,门禁会自己红。\n\n本提交按 C241 把锚点指向父提交 dd2dab5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/14983b57ae2ab9c0e424700ca11c3f4677984400","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-18T20:31:52-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":91996,"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-19T11:03:54+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
|
1789788717
|
1789788726
|
0
|
1789788715
|
1789788849
|
group: governance-${{ github.workflow }}-${{ githu group: governance-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: "true"
...
|
governance-governance.yml-refs/heads/main
|
1
|
Edit
Delete
|
|
24223
|
chore(reports): runtime 30/30 + 静态 28/28 回绑 @ dd2d chore(reports): runtime 30/30 + 静态 28/28 回绑 @ dd2dab5;锚点随批次刷新...
|
76
|
5
|
platform-governance.yml
|
101
|
5
|
0
|
refs/heads/main
|
14983b57ae2ab9c0e424700ca11c3f4677984400
|
0
|
0
|
0
|
push
|
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"8419453dedda057cca061637c499e06b345c8db8","after":"14983b57ae2ab9c0e424700ca11c3f4677984400","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/8419453dedda057cca061637c499e06b345c8db8...14983b57ae2ab9c0e424700ca11c3f4677984400","commits":[{"id":"14983b57ae2ab9c0e424700ca11c3f4677984400","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ dd2dab5;锚点随批次刷新\n\n· runtime 30/30 步、786 tests / 0 failures、行为矩阵 204/204,clean HEAD `dd2dab5`。\n· 静态 28/28(含 C256 的时效判定与门禁内自检 9/9)。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\nC256 上线后第一份 governance 报告:staleAcceptanceFreshnessViolations=0,\n两条陈旧源(mobile-android / mobile-ios)都落在已登记且未过期的豁免里——\n**它们仍然是陈旧的,只是不再沉默**:到 2026-12-19 若未解除,门禁会自己红。\n\n本提交按 C241 把锚点指向父提交 dd2dab5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/14983b57ae2ab9c0e424700ca11c3f4677984400","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-18T20:31:52-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":"dd2dab5799d061d69b7158585f1b38cd58a31833","message":"feat(gates): C256 验收时效由「记录」升级为「陈旧即红,除非登记」\n\nC254(redis-auth 红 24 天)与 C255(access-audit 红 3 周)同日连出,形态一模一样:\n功能落地时打断了聚合外的 runner,它不再运行,所以没人知道。\n\n关键不在检测失灵——**两次 C234 的 agedAcceptanceReports 都如实报了陈旧,两次都没人动**。\n问题是它「记录不阻断」:一条不阻断的记录摆在一行 GREEN 旁边,不构成控制。\n\nC234 当初不阻断的理由写在注释里且成立——「强制会把离线 check 变成环境人质」。\n所以这次不是在阻断与不阻断之间二选一,而是把「为什么可以不跑」从沉默变成**登记**:\n\n· 超 14 天即红;\n· 出口是五字段登记(reason / registeredAt / expiresAt / blockedBy / replacementPlan),\n 与 platform-dependency-deviations、framework-criteria 的 missing 登记同口径——\n 半份不算、过期即红、expiresAt 非法即红、**策略文件缺失也红**(缺策略不等于没有时效要求);\n· 豁免会过期,逼人重新面对,而不是永久沉默;\n· 已不陈旧却仍挂着的豁免显形但不阻断(它自己会过期),防豁免只增不减。\n\n当前 2 条登记,都是诚实的环境限制而非拖延:\n mobileAndroidAcceptance —— 缺 JDK/SDK/device,runner 本身 fail-closed 无假绿风险;\n mobileIosAcceptance —— 缺 Xcode 26,现有报告只是无 Xcode 下的 fail-closed 自测,\n 不是 native 证据(G19 早已如实标注)。\n两条均至 2026-12-19,replacementPlan 写明各自的解除条件。\n\n**判定器自检在门禁内自跑**(9 条判据、5 条负向),不是只挂一个人工命令——\n只挂人工命令,它自己就会变成下一个 C254。这批修的就是这个病,不能自己再犯一次。\n\n活证据:摘掉 mobile-ios 豁免 → 精确报「已 24 天未重跑(上限 14 天)且无时效豁免登记」,\nmetric 由 0 变 1;恢复即绿。\n\n棘轮新增三项:staleAcceptanceFreshnessViolations(floor 0)、\nacceptanceFreshnessSelfTestCases(floor 9)、acceptanceFreshnessSelfTestNegatives(floor 5)。\n静态轴仍是 28 步——判定挂在 check:governance 内,没有新增步骤。\n\n证据:pnpm check 28/28;自检 9/9。锚点按 C241 指向父提交 8419453。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/dd2dab5799d061d69b7158585f1b38cd58a31833","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-18T20:19:11-07:00","added":["governance/acceptance-freshness.json","scripts/check-acceptance-freshness.mjs","scripts/lib/acceptance-freshness.mjs"],"removed":[],"modified":["CLAUDE.md","package.json","reports/agent-adapters.latest.json","reports/baseline.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","scripts/governance-report.mjs"]}],"total_commits":0,"head_commit":{"id":"14983b57ae2ab9c0e424700ca11c3f4677984400","message":"chore(reports): runtime 30/30 + 静态 28/28 回绑 @ dd2dab5;锚点随批次刷新\n\n· runtime 30/30 步、786 tests / 0 failures、行为矩阵 204/204,clean HEAD `dd2dab5`。\n· 静态 28/28(含 C256 的时效判定与门禁内自检 9/9)。\n· 依赖 pnpm audit --prod --audit-level high = 0 high / 3 moderate。\n\nC256 上线后第一份 governance 报告:staleAcceptanceFreshnessViolations=0,\n两条陈旧源(mobile-android / mobile-ios)都落在已登记且未过期的豁免里——\n**它们仍然是陈旧的,只是不再沉默**:到 2026-12-19 若未解除,门禁会自己红。\n\n本提交按 C241 把锚点指向父提交 dd2dab5。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/14983b57ae2ab9c0e424700ca11c3f4677984400","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-18T20:31:52-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":91996,"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-19T11:03:54+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
|
1789788726
|
1789788735
|
0
|
1789788716
|
1789788850
|
|
|
0
|
Edit
Delete
|