| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"f3d2cfe8c6567a9f343080ec659543e412c4e688","after":"85a263fb1667d12318daa5601f7e6e23284c5dfd","compare_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/compare/f3d2cfe8c6567a9f343080ec659543e412c4e688...85a263fb1667d12318daa5601f7e6e23284c5dfd","commits":[{"id":"85a263fb1667d12318daa5601f7e6e23284c5dfd","message":"chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 402f502(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=402f502、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\nfork-readiness 报告的 frameworkCriteriaRegisteredMissing 由 3 降为 2(F14 转 implemented),\ndeclared 仍 14、交叉核对 verified。\n\n未跑运行态:本批只改 compose 顶层 name / 宿主端口参数化与门禁脚本,未动任何应用运行代码,\nruntime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。compose 的实际效果要到下次\ndocker compose up 才体现——改名时两个 project 下均无容器与卷,不存在需要迁移的运行态。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/85a263fb1667d12318daa5601f7e6e23284c5dfd","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-18T15:55:42-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},{"id":"402f502bec6d503e2e6c8b1319b0862eb2b9ed03","message":"feat(governance): 落地框架 F14——compose 身份派生自包名,本仓退出 L9 的 project 共用\n\n框架判据 F14 由 missing 转 implemented。这是三条 missing 里唯一不阻塞于「内核退回 pin」\n立项本身的,故先做。\n\n**问题(工作区 L9 的本仓实证):** compose 在没有顶层 name / -p / COMPOSE_PROJECT_NAME 时\n按**文件所在目录名**推导 project。开发基座在每个派生仓里都住在 apps/api-nestjs/,于是所有仓\n推导出同一个 project `api-nestjs`,共用具名卷与容器名——后 up 者接管先起者。一致性门禁实测\n本机 8 个仓共用该 project,本仓是其中之一。这与 F3(测试库名前缀)、F12(RLS 组角色名)同族:\n**集群级资源的身份必须派生自 package.json name**。\n\n两处实体修复:\n apps/api-nestjs/docker-compose.yml 补 name: ${COMPOSE_PROJECT_NAME:-digital-employee-os}\n redis 宿主端口 \"6379:6379\" → \"${REDIS_PORT:-6379}:6379\"\n (postgres 那条原本就已参数化)\n deploy/production/compose.yml 默认值 deos-production → digital-employee-os-production\n (原值既非包名派生身份、也非其 digital-employee-os-* 子命名)\n\n**改名零中断**:动手前实测两个 project 下均无容器与卷(docker ps -a / volume ls 按\ncom.docker.compose.project 标签查,皆空)。我先前提过「要挑运维窗口」——实测之后这个顾虑\n不成立,如实更正。\n\n门禁实现与框架有一处口径差异,已登记在门禁注释与 framework-criteria.json:\n**本仓限定扫 git 跟踪的 compose**,框架按目录黑名单遍历全仓。理由是本仓有 gitignored 的\ntmp/ops-config/compose.local.yml(本机运维配置,随时重建),扫未跟踪的本地状态会让门禁在\n别人 clone 后得出不同结论——**不可复现的判据比没有判据更糟**。\n\n三条负向探针实活验证,非只读代码推断:去掉顶层 name、端口写死、身份写成别的仓(api-nestjs),\n各自如期转红,还原后复验绿。\n\n效果:工作区一致性门禁 L9 的共用仓数 **8 → 7,本仓出列**(其余 7 仓是各自 Owner 的事)。\n框架判据覆盖:implemented 10(+F14)、missing 2(F8 / F11,均阻塞于内核退回 pin 立项)、\nimplemented-elsewhere 1、not-applicable 1。\n\n静态整轮 28/28。本批未改运行代码,runtime 仍绑 df72512。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/402f502bec6d503e2e6c8b1319b0862eb2b9ed03","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-18T15:53:53-07:00","added":[],"removed":[],"modified":["CLAUDE.md","apps/api-nestjs/docker-compose.yml","deploy/production/compose.yml","framework-criteria.json","scripts/check-fork-readiness.mjs"]}],"total_commits":0,"head_commit":{"id":"85a263fb1667d12318daa5601f7e6e23284c5dfd","message":"chore(reports): F14 落地的二十八份静态证据 回绑 @ 402f502,刷新快照锚点\n\n本批次最后一个提交,按 C241 同时刷新快照锚点到 402f502(声明落后 0,本提交自身使实测\n落后 1,在 +1 自指窗内)。\n\n二十八份 reports/*.latest.json 全部 clean 绑定(gitSha=402f502、worktreeDirty:false)。\n静态整轮 28/28 步骤全部通过(退出码 0)。\n\nfork-readiness 报告的 frameworkCriteriaRegisteredMissing 由 3 降为 2(F14 转 implemented),\ndeclared 仍 14、交叉核对 verified。\n\n未跑运行态:本批只改 compose 顶层 name / 宿主端口参数化与门禁脚本,未动任何应用运行代码,\nruntime 证据仍绑 df72512(733 / 204-204 / 零违规)且未失效。compose 的实际效果要到下次\ndocker compose up 才体现——改名时两个 project 下均无容器与卷,不存在需要迁移的运行态。\n\n工作区内三份 reports/ui-*.latest.json 的改动早于本批次,未提交也未还原。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/digital-employee-os/commit/85a263fb1667d12318daa5601f7e6e23284c5dfd","author":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"committer":{"name":"juhailaoluo pro","email":"hillao@juhailaoluodeMacBook-Pro.local","username":""},"verification":null,"timestamp":"2026-09-18T15:55:42-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/agent-adapters.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/fixtures.latest.json","reports/fork-readiness.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/kernel-admission.latest.json","reports/kernel-boundaries.latest.json","reports/kernel-downstream.latest.json","reports/kernel-extensions.latest.json","reports/kernel-packages.latest.json","reports/list-bounds.latest.json","reports/llm-eval.latest.json","reports/migrations.latest.json","reports/mobile-export.latest.json","reports/naming.latest.json","reports/operations.latest.json","reports/platform-dependency-provenance.latest.json","reports/product-acceptance.latest.json","reports/product-migrations.latest.json","reports/report-transaction-lock.latest.json","reports/rls.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/statemachine-write-guard.latest.json","reports/validation-source.latest.json"]},"repository":{"id":76,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"digital-employee-os","full_name":"luoanwu/digital-employee-os","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":88985,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os/languages","html_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/digital-employee-os","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/digital-employee-os.git","clone_url":"https://gitea.g-hi.com/luoanwu/digital-employee-os.git","original_url":"","website":"","stars_count":0,"forks_count":1,"watchers_count":1,"branch_count":3,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-20T14:46:28+08:00","updated_at":"2026-09-19T06:49:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}... |