| content |
{"Commits":[{"Sha1":"890186f6c {"Commits":[{"Sha1":"890186f6ced6dcb9f3ed0cf8181953c468022255","Message":"chore(reports): 静态门禁与聚合报告回绑 @ bf81e72\n\n在 clean bf81e72 上一次 check:governance 运行:naming / schema-sync / validation-source / contract-consumers / dual-backend-parity / statemachine-write-guard / fork-readiness / app-manifest / migrations / database-rls / os-product-layer / governance-docs / docs-truth / runtime-governance 与 governance 聚合共享同一 runId。\n\n聚合棘轮仍红,两项均早于 A1—A3 存在:osProductLayerViolations 0→1(O18:OS 宿主 UI 报告相对当前产品验收与 OS Web 源已陈旧);reportProvenanceViolations 0→6(runtime / UI / 双后端行为等验收报告源码指纹仍属 d338bf1)。本提交只记录事实,不放宽基线。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-26T07:07:11-07:00"},{"Sha1":"bf81e722bdb0bee4347e23613d3f787ad187b39c","Message":"feat(auth): 企业 IdP 令牌 profile——按租户 issuer 白名单与 JWKS、at+jwt、单值 aud、tenant_id 绑定 issuer、scope 收窄、租户头一致性(G23 / 控制面接入蓝图 A3,关 H3)\n\n- @repo/auth 新增 AUTH_TOKEN_PROFILE=enterprise-idp,与既有 local-jwt 互斥并存:issuer 白名单由 PLATFORM_IDENTITY_BASE_URL(IdP 规范 origin,不带路径)+ PLATFORM_IDENTITY_TENANT_SLUGS_JSON 派生为 {origin}/t/{slug};每租户 issuer 一份 {issuer}/oauth2/jwks 缓存,启动强制发现、周期刷新、最大陈旧窗口,任一租户刷新失败整体不替换;未验签 payload 的 iss 只在白名单内路由。校验 RS256、typ=at+jwt、单值 aud(字符串或恰一元素数组)、sub/jti/sid/grant_id/scope 必需、iat 不在未来、tenant_id 必须等于 issuer 对应租户、actor_type 若存在必须 human(403)、x-tenant-id / 实时 ?tenantId= 若存在必须一致(401 TENANT_HEADER_MISMATCH);角色只经 AUTH_SCOPE_ROLES_JSON 显式收窄;撤销沿用权威快照(可选)。与 AUTH_JWT_ISSUER / AUTH_JWKS_URL / 静态密钥互斥,非 RS256、非 TLS、带路径 origin、畸形映射均拒绝启动。两后端接线零改动:startRemoteJwksRefresh / authenticateHttp / authenticateRealtime 按 profile 分派,HTTP / SSE / WS 同口径;authenticate* 增加 nowSeconds 测试时钟 seam\n- @repo/contracts 新增 platform-identity.ts:tenant ↔ IdP slug 映射校验 / 解析与租户 issuer 派生单源(slug 规则取契约 v1 issuer pattern);enterprise-fact-publisher 改为消费该单源(A2 出站与 A3 入站共用一份映射)\n- 测试:控制面《企业 IdP 访问令牌契约》夹具复制件(2 正向 / 10 负向,packages/auth/src/__fixtures__,标明来源)逐条驱动 + HR 侧规则 7 例,auth 包 45/45;NestJS auth.enterprise-idp.http.test.ts 2/2(生产装配 + 隔离 PostgreSQL 62 迁移)与 local-jwt JWKS 回归 1/1;Fastify 同名 2/2 与回归 1/1;contracts 2/2;publisher 11/11。变异探针(禁用 typ 检查)使夹具 neg-id-token-as-access-token 与 HR 规则用例准确红\n- turbo.json 登记 AUTH_TOKEN_PROFILE、AUTH_SCOPE_ROLES_JSON;CLAUDE.md 真源地图 / G23 与蓝图 §10 回灌\n\n本地证据(2026-09-26):双后端 typecheck、lint;naming / validation / contract-consumers / dual-backend / write-guard / fork-readiness / governance-docs / docs-truth 通过。真实企业 IdP、逐次 introspection 与 dev / 生产验收仍为 0。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-26T07:06:43-07:00"},{"Sha1":"21a33f1f621387b11f6ee8b53a58bdeca4e2106e","Message":"chore(reports): 静态门禁与聚合报告回绑 @ 0beede4\n\n在 clean 0beede4 上一次 check:governance 运行:naming / schema-sync / validation-source / contract-consumers / dual-backend-parity / statemachine-write-guard / fork-readiness / app-manifest / migrations / database-rls / os-product-layer / governance-docs / docs-truth / runtime-governance 与 governance 聚合共享同一 runId;appManifestViolations=0、appManifestChecks=14。\n\n聚合棘轮仍红,两项均早于 A1/A2 存在:osProductLayerViolations 0→1(O18:OS 宿主 UI 报告相对当前产品验收与 OS Web 源已陈旧,需重跑宿主 UI 验收);reportProvenanceViolations 0→6(runtime / UI / 双后端行为等验收报告源码指纹仍属 d338bf1,需重跑真实 DB 与浏览器验收)。本提交只记录事实,不放宽基线。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-26T06:27:51-07:00"},{"Sha1":"0beede4f795c180c0591e4877873763707e62797","Message":"feat(facts): 出站令牌按租户取——client_credentials 服务身份与静态令牌租户绑定,凭据失败不消耗死信配额(G23 / 控制面接入蓝图 A2,关 H2)\n\n- packages/enterprise-fact-publisher:PlatformFactCredentialProvider 成为出站令牌单源,publisher 按 envelope.tenant_id 取令牌、绝不跨租户复用。createClientCredentialsProvider 向企业 IdP POST {PLATFORM_IDENTITY_BASE_URL}/t/{tenantSlug}/oauth2/token(client_secret_basic,grant_type/audience/scope 表单,与控制面 identity MachineIdentity.issue 契约对齐),每租户缓存、到期前刷新、同租户并发合并、失败冷却,非 localhost 强制 TLS;createTenantBoundStaticCredential 让 PLATFORM_FACT_TOKEN 只服务其 tenant_id/tenantId 声明的租户,NODE_ENV=production 禁止。两种模式互斥,同时配置或都缺失均拒绝启动;ten_… → slug 映射经 PLATFORM_IDENTITY_TENANT_SLUGS_JSON 由 IdP Owner 给出,缺映射失败关闭\n- 双后端 relay:PlatformCredentialError(PLATFORM_CREDENTIAL_UNAVAILABLE/REJECTED/TENANT_UNMAPPED/TENANT_UNBOUND)不递增 attempts、不进死信,按 ENTERPRISE_FACT_CREDENTIAL_RETRY_MS(默认 30s)重排并写 last_error_code;事实本身的发布失败仍走指数退避与十次死信;dispatcher/plugin 传入 credentialRetryMs\n- 测试:publisher 单测 11 例;NestJS/Fastify enterprise-fact-relay 各 12 例(新增凭据失败不消耗配额并恢复后同 fact_id 投递、多租户各用本租户令牌且未映射租户失败关闭),隔离 PostgreSQL 空库 62 迁移首次部署后通过;变异探针(破坏凭据分类)使两条新用例准确红。跨仓 e2e 的 HS256 演示令牌带 tenantId,静态绑定路径保持兼容;platform-fact-delivery.acceptance 改用 createTenantBoundStaticCredential\n- turbo.json 登记全部新环境变量(C23);README、enterprise-fact-delivery.md、platform-shared-dev.md、蓝图 §10 与 CLAUDE.md 真源地图 / G23 回灌\n\n本地证据(2026-09-26):双后端 typecheck、lint;naming/validation/contract-consumers/dual-backend/write-guard/fork-readiness/governance-docs/docs-truth 通过。真实企业 IdP 签发、slug 映射输入与 dev/生产传输仍为 0;全量 check:runtime 与控制面跨仓 e2e 本轮未重跑。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-26T06:27:20-07:00"}],"HeadCommit":{"Sha1":"890186f6ced6dcb9f3ed0cf8181953c468022255","Message":"chore(reports): 静态门禁与聚合报告回绑 @ bf81e72\n\n在 clean bf81e72 上一次 check:governance 运行:naming / schema-sync / validation-source / contract-consumers / dual-backend-parity / statemachine-write-guard / fork-readiness / app-manifest / migrations / database-rls / os-product-layer / governance-docs / docs-truth / runtime-governance 与 governance 聚合共享同一 runId。\n\n聚合棘轮仍红,两项均早于 A1—A3 存在:osProductLayerViolations 0→1(O18:OS 宿主 UI 报告相对当前产品验收与 OS Web 源已陈旧);reportProvenanceViolations 0→6(runtime / UI / 双后端行为等验收报告源码指纹仍属 d338bf1)。本提交只记录事实,不放宽基线。\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-09-26T07:07:11-07:00"},"CompareURL":"luoanwu/juhai-ai-hr-system/compare/849a0460c229611a1afa4b798be51fbc72408273...890186f6ced6dcb9f3ed0cf8181953c468022255","Len":4}... |