| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"0000000000000000000000000000000000000000","after":"4bcef1bbfffbca2968adef922ca60afb8d4d5bfd","compare_url":"https://gitea.g-hi.com/","commits":[{"id":"4bcef1bbfffbca2968adef922ca60afb8d4d5bfd","message":"docs(governance): record clean three-tier evidence SHAs and provenance blind spot\n\n三级证据现均 worktreeDirty=false,分别绑定 9c7586e/1ea36ef/4b8055e\n(相邻 commit 只差 reports/*.latest.json,源码逐字相同)。\n\n同时记录一个继承自源仓的治理盲区:governance-report 对 runtime/UI 报告\n只校验 gitSha 格式合法,不校验等于当前 HEAD——证据新鲜度只靠人工纪律,\n无机器守卫。判断三级状态须实际比对各报告 provenance.gitSha 与 HEAD。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/training-framework/commit/4bcef1bbfffbca2968adef922ca60afb8d4d5bfd","author":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-15T20:56:20-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/append-only.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json"]},{"id":"9c7586eee8910f54f7805c411fa9a742b77fbfd5","message":"chore(reports): bind UI acceptance evidence to clean commit\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/training-framework/commit/9c7586eee8910f54f7805c411fa9a742b77fbfd5","author":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-15T20:55:43-07:00","added":[],"removed":[],"modified":["reports/ui-acceptance.latest.json"]},{"id":"4b8055e04b7dd0b4943fa712a7663ee4e11ec194","message":"chore(reports): bind runtime acceptance evidence to clean commit\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/training-framework/commit/4b8055e04b7dd0b4943fa712a7663ee4e11ec194","author":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-15T20:55:21-07:00","added":[],"removed":[],"modified":["reports/runtime-acceptance.latest.json"]},{"id":"1ea36ef0c0c09a93e20594dc31f10a4beef7877e","message":"chore(reports): refresh static gate evidence on clean tree\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/training-framework/commit/1ea36ef0c0c09a93e20594dc31f10a4beef7877e","author":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-15T20:55:00-07:00","added":[],"removed":[],"modified":["reports/append-only.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json"]},{"id":"67310efba607e03c717fc0d3bb3c50b3f880427c","message":"feat(recruitment): 前端作战台 + 3 个浏览器用例,三级门禁全绿\n\n前端(apps/web):\n- RecruitmentPanel 招商作战台挂上首页:线索列表/创建/推进/转换、商机卡、\n 岗位切换器、看板(在途/高质量成交/阶段门拦截)\n- 动作按钮不硬编码 17 态,从 GET /api/opportunities/machine 的\n states[state].on 渲染;证据表单由 contracts 的 GATE_REQUIREMENTS 驱动,\n 后端加一项要求前端自动多一格\n- 阶段门反馈分两种:gate-blocked(缺证据 + missing[])与 role-blocked(403)\n- lib/api.ts 增招商调用层,动作接口带 x-actor-role 头\n\n浏览器级验收(4 → 7 用例),把招商域证据等级从「真实 DB API」推到「浏览器交互」:\n- 线索 → 分配 → 接通 → 转商机,验证 CONVERTED 冻结\n- 阶段门:空证据提交被服务端拦下、UI 显示 missing[]、状态不动;补齐后放行\n- 回款门:SALES 填齐同样证据仍被 403,切 FINANCE 才通过\n (证据完全相同、唯一变量是岗位——锁死「角色门独立于证据门」)\n\n棘轮上调(只涨不降):uiTestsPassed 4 → 7\n\n文档:CLAUDE.md 证据段与蓝图状态同步为「一期已落地」,并写明未覆盖项\n(Fastify 侧 UI 属 G17 既有缺口、Interaction 录入页、看板外读模型)。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/training-framework/commit/67310efba607e03c717fc0d3bb3c50b3f880427c","author":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-15T20:53:03-07:00","added":["apps/web/src/components/RecruitmentPanel.tsx"],"removed":[],"modified":["CLAUDE.md","apps/web/e2e/acceptance.spec.ts","apps/web/src/app/page.tsx","apps/web/src/lib/api.ts","docs/domain/recruitment-blueprint.md","reports/append-only.latest.json","reports/baseline.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-acceptance.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/ui-acceptance.latest.json","reports/validation-source.latest.json"]}],"total_commits":0,"head_commit":{"id":"4bcef1bbfffbca2968adef922ca60afb8d4d5bfd","message":"docs(governance): record clean three-tier evidence SHAs and provenance blind spot\n\n三级证据现均 worktreeDirty=false,分别绑定 9c7586e/1ea36ef/4b8055e\n(相邻 commit 只差 reports/*.latest.json,源码逐字相同)。\n\n同时记录一个继承自源仓的治理盲区:governance-report 对 runtime/UI 报告\n只校验 gitSha 格式合法,不校验等于当前 HEAD——证据新鲜度只靠人工纪律,\n无机器守卫。判断三级状态须实际比对各报告 provenance.gitSha 与 HEAD。\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/training-framework/commit/4bcef1bbfffbca2968adef922ca60afb8d4d5bfd","author":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"committer":{"name":"ailaoluo","email":"luoguoguo@gmail.com","username":""},"verification":null,"timestamp":"2026-08-15T20:56:20-07:00","added":[],"removed":[],"modified":["CLAUDE.md","reports/append-only.latest.json","reports/contract-consumers.latest.json","reports/docs-truth.latest.json","reports/dual-backend-parity.latest.json","reports/governance-docs.latest.json","reports/governance.latest.json","reports/migrations.latest.json","reports/naming.latest.json","reports/order-concurrency-guard.latest.json","reports/runtime-governance.latest.json","reports/schema-sync.latest.json","reports/validation-source.latest.json"]},"repository":{"id":75,"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":"training-framework","full_name":"luoanwu/training-framework","description":"","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":27,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/training-framework/languages","html_url":"https://gitea.g-hi.com/luoanwu/training-framework","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/training-framework","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/training-framework.git","clone_url":"https://gitea.g-hi.com/luoanwu/training-framework.git","original_url":"","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-08-16T12:03:11+08:00","updated_at":"2026-08-16T12:03:35+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":true,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}... |