| event_payload |
{"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"}}... |