| content |
{"Commits":[{"Sha1":"d6cd4a22a {"Commits":[{"Sha1":"d6cd4a22a8e7f05efcad973f2e172cb78685f52d","Message":"docs(infra): record fixed-source foundation checks and isolated recovery evidence\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-19T20:10:31-07:00"},{"Sha1":"f21273eb769fb352a2653bf300acb12d17a5bdf2","Message":"feat(infra): align fixed stack history and add isolated foundation acceptance\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-19T20:09:31-07:00"},{"Sha1":"365bd40c3c32d3748a8a8fb0eaf9f2fbcd152874","Message":"merge: 合入 claude/db-sys-role-optin-20261018,保留主线生成报告待整体验证\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-19T08:58:10-07:00"},{"Sha1":"b10d46f077f5df7ff4778fd75764b72f07e5543c","Message":"merge: 收纳模型中心最终发布历史并保留主线后续验收记录\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-19T08:54:17-07:00"},{"Sha1":"ec9071dc615f86bc97f495125d68100d5e0b0e46","Message":"feat(stack): db.sh 只为登记 systemRole 的模块建 _sys 登录角色(04 完善计划第 24 项)\n\n背景:18 个模块里只有 identity 的源码读系统连接串 DATABASE_SYSTEM_URL_IDENTITY\n(runtime/modules/identity/src/persistence/database-url.ts、http/common/tenant-scope.ts),\n它经 \u003cdb\u003e_sys 登录角色进 NOLOGIN 组 platform_identity_system,身份迁移\n20260923120000_identity_tenant_rls 的 system_access 策略写 TO 这个组。其余 17 个模块的\n\u003cdb\u003e_sys 有 CONNECT 和口令、没有任何表权限、也没人连(04 层《授权模型核对-2026-10-11》§2.3)。\n本提交是 04 完善计划第 24 项「数据库授权收紧」的第一半:未用的 _sys 不再创建,db.sh 按模块声明\nsystem 需求。stack/compose.yaml 第 270 行的 DATABASE_SYSTEM_URL 是内核库(kernel-db.sh)的,不动。\n\n行为变化:\n- runtime/modules.json:identity 条目加 \"systemRole\": true(无 JSON Schema、无测试拒绝未知字段)。\n- stack/provision/db.sh:模块列表一并解析 systemRole。登记的模块保持原行为(建 \u003cdb\u003e_sys LOGIN、\n 建 \u003c库族\u003e_system NOLOGIN 组、GRANT 组 TO sys、GRANT CONNECT);未登记的模块不建 _sys、不建组,\n 改为幂等收紧 SQL:DO $$ IF EXISTS \u003cdb\u003e_sys THEN ALTER ROLE … NOLOGIN; REVOKE CONNECT … $$\n (不 DROP,避免对象依赖失败);已存在的组角色留着不动(集群级、可能被别的环境引用)。\n 头注释、--dry-run 首行与末尾 echo 改为如实口径;三类口令仍一并要求且必须互不相同。\n- governance/check-modules.mjs 新增对等规则 SYSTEM_ROLE_PARITY(lib/module-system-role-parity.mjs,\n 纯函数):模块 src 下非测试 .ts(跳过 node_modules / dist / test)出现 DATABASE_SYSTEM_URL_\n ⇔ 登记 systemRole === true;systemRole 出现须为布尔(SYSTEM_ROLE_INVALID)。头注释与成功摘要同步。\n- governance/lib/module-database-plan.mjs 把 systemRole 带进计划;prepare-module-databases.mjs\n 只为这些模块输出 DATABASE_SYSTEM_URL_\u003cM\u003e(否则输出会指向不再存在的角色),roles 摘要改为如实口径。\n- 测试:新增 governance/test/module-system-role-parity.test.mjs(正反例 + 真实登记逐模块对等);\n module-databases.test.mjs 的 dry-run 断言按新口径(18 库;只有 identity 出现 _sys 与\n platform_identity_system;其他模块出现 NOLOGIN 收紧语句;37 个 LOGIN / 1 个 NOLOGIN 组;\n 三个口令占位符仍都出现);module-database-plan.test.mjs 钉住 systemRole 只有 identity。\n- 文档:stack/README.md、docs/runbook.md(三处)、仓根 CLAUDE.md「stack 与门禁的对照关系」一句、\n runtime/apps/api-nestjs/.env.example 的角色计数与口径改为「18 个库 + 37 个 LOGIN 角色 + 1 个\n NOLOGIN 系统组;_sys 只给登记 systemRole 的模块(现为 identity)」。带日期的历史记录不改。\n\n老环境重跑的效果:`db.sh \u003cenv\u003e` 重跑即把 17 个模块已存在的 \u003cdb\u003e_\u003cenv\u003e_sys 收为 NOLOGIN 并收回\nCONNECT;identity 的 _sys 与 platform_identity_system 不变;已存在的其他 \u003c库族\u003e_system 组角色保留。\ndry-run(dev):18 CREATE DATABASE、37 条 ALTER ROLE … LOGIN、1 个 CREATE ROLE … NOLOGIN、\n17 条 ALTER ROLE … NOLOGIN 收紧、组角色只出现 platform_identity_system。\n\n门禁(本 worktree,无 runtime / contracts 安装,不连真库):\n- bash stack/provision/db.sh dev --dry-run:通过,计数如上。\n- pnpm test:1023 项,1021 通过 / 1 失败 / 1 跳过;唯一失败 permission-service-candidate.test.mjs\n 是环境原因(require ajv 经 contracts/node_modules,本 worktree 未装),同一测试在主检出 9/9 通过,\n 且不引用本次改动的任何文件。\n- pnpm check:modules:把主检出的 @juhai/kernel platform-ports.d.ts 临时放到被忽略的\n runtime/node_modules 后通过(18 个模块;system 登录角色只给 1 个登记 systemRole 的模块 identity),\n 跑完已删除;无该文件时门禁按既有逻辑先报「未找到已安装的 @juhai/kernel」。\n- pnpm check:doc-claims、check:stub-surface、check:caddy:通过。\n- reports/*.latest.json 已恢复,本提交不带报告,合入时按仓纪律回绑。\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-10-18T20:42:24-07:00"}],"HeadCommit":{"Sha1":"d6cd4a22a8e7f05efcad973f2e172cb78685f52d","Message":"docs(infra): record fixed-source foundation checks and isolated recovery evidence\n","AuthorEmail":"hillao@juhailaoluodeMacBook-Pro.local","AuthorName":"juhailaoluo pro","CommitterEmail":"hillao@juhailaoluodeMacBook-Pro.local","CommitterName":"juhailaoluo pro","Timestamp":"2026-10-19T20:10:31-07:00"},"CompareURL":"luoanwu/infra/compare/194a697d0567bcdb7c0533c70fbf1d6965037a10...d6cd4a22a8e7f05efcad973f2e172cb78685f52d","Len":22}... |