docs(GOV-007): 封存开发库 Schema 门禁验证结果

This commit is contained in:
2026-08-13 13:16:59 +08:00
parent d827bfadb1
commit 70f020f87c
9 changed files with 75 additions and 80 deletions
@@ -4,49 +4,27 @@
```text ```text
Repository: /Users/citrons/Documents/Codex/2026-08-12/wo-x/a-share-analysis Repository: /Users/citrons/Documents/Codex/2026-08-12/wo-x/a-share-analysis
Indexed: 8/13/2026, 12:44:53 PM Indexed: 8/13/2026, 1:13:21 PM
Indexed commit: 2c502eb Indexed commit: d827bfa
Current commit: 2c502eb Current commit: d827bfa
Status: ✅ up-to-date Status: ✅ up-to-date
``` ```
## Git 已跟踪变更摘要 ## 最终实现
```text ```text
AGENTS.md | 2 +- d827bfadb1fc0a7d768eefbf87b46ba26ac612d6
1 file changed, 1 insertion(+), 1 deletion(-) fix(GOV-007): 收紧 Schema 基线安全门禁
``` ```
## Git 工作区摘要 该提交已推送到 `origin/main`,实时远程查询结果与本地提交一致。
## 实现范围摘要
```text ```text
MM AGENTS.md 30 files changed, 1835 insertions(+), 18 deletions(-)
M CHANGELOG.md
M README.md
M VERSION
M docs/features/GOV-007-development-schema-baseline/design.md
A docs/features/GOV-007-development-schema-baseline/gitnexus/comparison.md
A docs/features/GOV-007-development-schema-baseline/gitnexus/detected-changes.md
A docs/features/GOV-007-development-schema-baseline/gitnexus/impact-plan.md
A docs/features/GOV-007-development-schema-baseline/implementation-plan.md
A docs/features/GOV-007-development-schema-baseline/manifest.yaml
A docs/features/GOV-007-development-schema-baseline/prd.md
A docs/features/GOV-007-development-schema-baseline/qa/test-results.md
A docs/features/GOV-007-development-schema-baseline/qa/visual-qa.md
A docs/features/GOV-007-development-schema-baseline/release-notes.md
A docs/features/GOV-007-development-schema-baseline/requirements.md
A docs/features/GOV-007-development-schema-baseline/review/code-review.md
A docs/features/GOV-007-development-schema-baseline/review/standards-review.md
A docs/features/GOV-007-development-schema-baseline/rollback.md
A docs/features/GOV-007-development-schema-baseline/test-plan.md
M docs/governance/code-development-standards.md
M docs/governance/development-workflow.md
M docs/index.md
M package.json
A tools/database/fixtures/mysql57-schema-expected.sql
A tools/database/fixtures/mysql57-schema-input.sql
A tools/database/schema-baseline.mjs
A tools/database/schema-baseline.test.mjs
M tools/governance/finish.mjs
M tools/governance/start.mjs
``` ```
最终索引为 879 节点、1062 关系、23 条流程。新增流程集中在 Schema
生成、校验、N/A 运行时一致性和发布门禁,不包含市场业务、HTTP、RabbitMQ
或生产数据库流程。
@@ -8,10 +8,11 @@
## 开发后 ## 开发后
- 基线提交:`2c502ebbec25e45ac2980c08ed288ace194b7a04`(先独立提交并推送 v0.0.5 N/A 基线)。 - N/A 基线提交:`2c502ebbec25e45ac2980c08ed288ace194b7a04`,已独立推送。
- 索引:837 节点、997 关系、17 流程。 - 最终实现提交:`d827bfadb1fc0a7d768eefbf87b46ba26ac612d6`,已推送 `origin/main`。
- 暂存区:23 文件、179 符号、17 条流程,risk=critical。 - 索引:879 节点、1062 关系、23 条流程,状态 up-to-date。
- 最终修复变更检测为 HIGH,涉及 13 条 Schema 生成、验证与治理门禁流程。
## 结论 ## 结论
新增关系和流程全部来自 GOV-007 Schema 安全门禁及其测试,没有引入市场业务、HTTP、RabbitMQ 或页面流程。风险从 LOW 提升到 critical 是因为新的 `governance:start` 前置门禁属于关键开发路径且整个模块首次加入;对应流程已用失败测试、修复测试、远程实测和独立 Review 覆盖。 新增关系和流程全部来自 GOV-007 Schema 安全门禁及其测试,没有引入市场业务、HTTP、RabbitMQ 或页面流程。风险提升是因为 `schema:verify` 和 `governance:start` 属于关键开发路径;对应流程已用红绿测试、23 项 Schema 回归、远程实测和独立终审覆盖。
@@ -1,11 +1,11 @@
# GitNexus 暂存区变更检测 # GitNexus 暂存区变更检测
- 检测日期:2026-08-13 - 检测日期:2026-08-13
- 检测范围:staged - 检测范围:最终实现提交前的 unstaged 修复
- 变更文件:23 - 变更文件:3
- 变更符号:179 - 变更符号:17
- 受影响流程:17 - 受影响流程:13
- GitNexus 风险:critical(已按关键门禁完成专项验证) - GitNexus 风险:high(已按关键门禁完成专项验证)
## 受影响流程 ## 受影响流程
@@ -15,9 +15,11 @@
- 清单、SHA-256 与目录文件集合验证。 - 清单、SHA-256 与目录文件集合验证。
- MySQL 5.7 双客户端、服务端和字符规则验证。 - MySQL 5.7 双客户端、服务端和字符规则验证。
- 当前发布版本本地校验。 - 当前发布版本本地校验。
- N/A 基线与当前固定开发环境开关的一致性校验。
- 顶层数据修改/装载、疑似凭据、连接串和生产主机扫描。
- 已提交、已推送、远程分支和远程标签严格校验。 - 已提交、已推送、远程分支和远程标签严格校验。
- CLI 生成/验证和 `governance:start` 入口。 - CLI 生成/验证和 `governance:start` 入口。
## 风险解释 ## 风险解释
GitNexus 以“新增模块的全部 17 条流程均在本次变更中”为依据给出 critical,而非发现了业务市场分析、生产数据库或跨服务调用回归。本功能本身是开发前关键门禁,因此该风险等级按关键路径处理:执行 20 项 Schema 行为测试、既有 13 项治理回归测试、真实 Gitea `ls-remote` 校验、三轮独立代码 Review 和完成门禁。任何 Review Important 项未关闭前不发布。 GitNexus 的 HIGH 结论来自安全扫描和 N/A 校验位于 13 条生成、验证及治理门禁流程,而非发现市场业务、生产数据库或跨服务回归。该风险已用 23 项 Schema 行为测试、既有 13 项治理回归测试、真实 Gitea `ls-remote` 校验和独立最终 Review 覆盖。最终 Review 无未关闭问题。
@@ -34,11 +34,11 @@
- 消费:设计规格中固定的环境、版本、Schema 范围和禁止覆盖规则。 - 消费:设计规格中固定的环境、版本、Schema 范围和禁止覆盖规则。
- 产出:后续实现必须满足的公开函数行为和固定 SQL 输入/输出。 - 产出:后续实现必须满足的公开函数行为和固定 SQL 输入/输出。
- [ ] 编写配置测试,分别证明非 `development`、非 `a_share_analysis_dev`、非 MySQL 5.7、错误字符集和错误排序规则被拒绝。 - [x] 编写配置测试,分别证明非 `development`、非 `a_share_analysis_dev`、非 MySQL 5.7、错误字符集和错误排序规则被拒绝。
- [ ] 运行 `node --test tools/database/schema-baseline.test.mjs`,确认因实现模块不存在而失败。 - [x] 运行 `node --test tools/database/schema-baseline.test.mjs`,确认因实现模块不存在而失败。
- [ ] 编写命令构造测试,手工断言参数包含 `--no-data`、`--routines`、`--triggers`、`--events`,且密码字符串不出现在参数中。 - [x] 编写命令构造测试,手工断言参数包含 `--no-data`、`--routines`、`--triggers`、`--events`,且密码字符串不出现在参数中。
- [ ] 编写固定 SQL 样本测试,手工断言时间注释、`DEFINER` 和表级当前自增值被删除,列级 `AUTO_INCREMENT` 以及表、视图、触发器、例程和事件定义完整保留。 - [x] 编写固定 SQL 样本测试,手工断言时间注释、`DEFINER` 和表级当前自增值被删除,列级 `AUTO_INCREMENT` 以及表、视图、触发器、例程和事件定义完整保留。
- [ ] 编写产物测试,证明清单和校验文件的 SHA-256 与 SQL 一致、不同内容的既有目录被拒绝、未启用 MySQL 时只有 `manifest.yaml` 而没有 `schema.sql`。 - [x] 编写产物测试,证明清单和校验文件的 SHA-256 与 SQL 一致、不同内容的既有目录被拒绝、未启用 MySQL 时只有 `manifest.yaml` 而没有 `schema.sql`。
### 任务 2:实现纯函数和文件产物 ### 任务 2:实现纯函数和文件产物
@@ -51,12 +51,12 @@
- 产出:`assertSafeDevelopmentConfiguration(config)`、`assertMysql57Metadata(metadata)`、`buildMysqldumpArguments(config)`、`normalizeSchemaSql(sql)`、`buildCapturedArtifacts(metadata, sql)`、`buildNotApplicableArtifacts(metadata)`、`persistBaselineArtifacts(target, artifacts)`、`verifyBaselineDirectory(target, expectedRelease)`。 - 产出:`assertSafeDevelopmentConfiguration(config)`、`assertMysql57Metadata(metadata)`、`buildMysqldumpArguments(config)`、`normalizeSchemaSql(sql)`、`buildCapturedArtifacts(metadata, sql)`、`buildNotApplicableArtifacts(metadata)`、`persistBaselineArtifacts(target, artifacts)`、`verifyBaselineDirectory(target, expectedRelease)`。
- [ ] 实现最小配置与元数据校验,使安全边界测试通过。 - [x] 实现最小配置与元数据校验,使安全边界测试通过。
- [ ] 实现参数数组构造;连接密码只允许由子进程环境传递,不进入参数。 - [x] 实现参数数组构造;连接密码只允许由子进程环境传递,不进入参数。
- [ ] 实现确定性 SQL 规范化和敏感内容扫描,使固定样本逐字节匹配期望文件。 - [x] 实现确定性 SQL 规范化和敏感内容扫描,使固定样本逐字节匹配期望文件。
- [ ] 实现 SHA-256、平面可审计清单、标准 checksum 文件和目录校验。 - [x] 实现 SHA-256、平面可审计清单、标准 checksum 文件和目录校验。
- [ ] 采用同目录临时目录加原子改名写入;目标已存在时仅允许逐字节相同内容复用,其他情况报错。 - [x] 采用同目录临时目录加原子改名写入;目标已存在时仅允许逐字节相同内容复用,其他情况报错。
- [ ] 运行 Schema 测试,确认所有测试转绿;再运行既有治理、MySQL 与环境基线测试,确认没有回归。 - [x] 运行 Schema 测试,确认所有测试转绿;再运行既有治理、MySQL 与环境基线测试,确认没有回归。
### 任务 3:实现真实入口但不连接数据库 ### 任务 3:实现真实入口但不连接数据库
@@ -71,11 +71,11 @@
- 消费:固定路径 `deploy/env/development/api.env`;文件不存在且仓库模板明确 `MYSQL_ENABLED=false` 时允许生成不适用记录。 - 消费:固定路径 `deploy/env/development/api.env`;文件不存在且仓库模板明确 `MYSQL_ENABLED=false` 时允许生成不适用记录。
- 产出:`npm run schema:baseline` 与 `npm run schema:verify`,版本自动从最近语义化版本标签解析。 - 产出:`npm run schema:baseline` 与 `npm run schema:verify`,版本自动从最近语义化版本标签解析。
- [ ] 测试命令行拒绝额外参数,证明不能传入 production env、数据库名或任意 env 路径。 - [x] 测试命令行拒绝额外参数,证明不能传入 production env、数据库名或任意 env 路径。
- [ ] 测试未启用 MySQL 的入口不会调用数据库执行器,并为最近发布标签创建可验证不适用记录。 - [x] 测试未启用 MySQL 的入口不会调用数据库执行器,并为最近发布标签创建可验证不适用记录。
- [ ] 测试启用分支只构造固定 `mysql`/`mysqldump` 参数,并在客户端/服务端版本或数据库字符规则不符时阻断。 - [x] 测试启用分支只构造固定 `mysql`/`mysqldump` 参数,并在客户端/服务端版本或数据库字符规则不符时阻断。
- [ ] 实现固定配置加载、最近标签与标签提交解析、回环主机检查、mysql/mysqldump 双客户端和服务端元数据检查、真实导出执行路径;本次验证不调用该路径。 - [x] 实现固定配置加载、最近标签与标签提交解析、回环主机检查、mysql/mysqldump 双客户端和服务端元数据检查、真实导出执行路径;本次验证不调用该路径。
- [ ] 运行 `npm run schema:baseline` 为 `v0.0.5` 生成 `not_applicable` 清单,并运行 `npm run schema:verify` 验证;确认不存在 `schema.sql`。 - [x] 运行 `npm run schema:baseline` 为 `v0.0.5` 生成 `not_applicable` 清单,并运行 `npm run schema:verify` 验证;确认不存在 `schema.sql`。
### 任务 4:接入版本开发前门禁与治理规范 ### 任务 4:接入版本开发前门禁与治理规范
@@ -94,10 +94,10 @@
- 消费:`assertCurrentReleasedBaselinePublished(repositoryRoot)`。 - 消费:`assertCurrentReleasedBaselinePublished(repositoryRoot)`。
- 产出:治理开始命令只有在上一已发布版本 Schema 基线有效时才继续 GitNexus 开发前流程。 - 产出:治理开始命令只有在上一已发布版本 Schema 基线有效时才继续 GitNexus 开发前流程。
- [ ] 先写失败测试:基线缺失或失效时 `governance:start` 的前置检查拒绝继续,有效 N/A 或真实基线时允许继续。 - [x] 先写失败测试:基线缺失或失效时 `governance:start` 的前置检查拒绝继续,有效 N/A 或真实基线时允许继续。
- [ ] 在 `start.mjs` 刷新 GitNexus 之前调用严格发布验证,检查 Git 跟踪、工作区、origin 分支和远程标签;不自动生成、不覆盖基线。 - [x] 在 `start.mjs` 刷新 GitNexus 之前调用严格发布验证,检查 Git 跟踪、工作区、origin 分支和远程标签;不自动生成、不覆盖基线。
- [ ] 文档明确顺序为“生成并验证基线 → 中文提交 → 推送 Gitea → 治理开始”,以及首次启用 MySQL 时必须从真实开发库导出。 - [x] 文档明确顺序为“生成并验证基线 → 中文提交 → 推送 Gitea → 治理开始”,以及首次启用 MySQL 时必须从真实开发库导出。
- [ ] 代码规范增加 Schema 仅结构、MySQL 5.7 完整对象范围、确定性规范化、禁止生产数据库和禁止直接改共享表的规则。 - [x] 代码规范增加 Schema 仅结构、MySQL 5.7 完整对象范围、确定性规范化、禁止生产数据库和禁止直接改共享表的规则。
### 任务 5:验证、Review 与发布 ### 任务 5:验证、Review 与发布
@@ -110,12 +110,12 @@
- 产出:可追溯的 `v0.0.6` 治理版本。 - 产出:可追溯的 `v0.0.6` 治理版本。
- [ ] 执行 Schema、治理、MySQL、环境测试,执行 `git diff --check`、敏感信息扫描和适用构建检查。 - [x] 执行 Schema、治理、MySQL、环境测试,执行 `git diff --check`、敏感信息扫描和适用构建检查。
- [ ] 执行 `npx gitnexus analyze` 与变更检测,保存开发前后差异和风险结论。 - [x] 执行 `npx gitnexus analyze` 与变更检测,保存开发前后差异和风险结论。
- [ ] 完成代码 Review 与开发规范符合性 Review;两份报告必须包含独立一行 `最终结论:passed`。 - [x] 完成代码 Review 与开发规范符合性 Review;两份报告必须包含独立一行 `最终结论:passed`。
- [ ] 执行 `npm run governance:finish -- GOV-007 development-schema-baseline` 并保存证据。 - [x] 执行 `npm run governance:finish -- GOV-007 development-schema-baseline` 并保存证据。
- [ ] 使用中文 Conventional Commit 提交并立即推送 `origin/main`,回填实现提交和远程 SHA。 - [x] 使用中文 Conventional Commit 提交并立即推送 `origin/main`,回填实现提交和远程 SHA。
- [ ] 封存最终验证结果,提交并推送;创建带注释标签 `v0.0.6` 并只精确推送该标签。 - [x] 封存最终验证结果,提交并推送;创建带注释标签 `v0.0.6` 并只精确推送该标签。
## 计划自审 ## 计划自审
@@ -14,5 +14,5 @@ gitnexus_after: gitnexus/after.md
gitnexus_comparison: gitnexus/comparison.md gitnexus_comparison: gitnexus/comparison.md
code_review: review/code-review.md code_review: review/code-review.md
standards_review: review/standards-review.md standards_review: review/standards-review.md
implementation_commit: pending implementation_commit: d827bfadb1fc0a7d768eefbf87b46ba26ac612d6
release: v0.0.6 release: v0.0.6
@@ -5,7 +5,7 @@
## 最新结果 ## 最新结果
- Schema 基线测试:20/20 passed。 - Schema 基线测试:23/23 passed。
- 治理测试:5/5 passed。 - 治理测试:5/5 passed。
- MySQL 兼容基线:2/2 passed。 - MySQL 兼容基线:2/2 passed。
- 环境与部署基线:6/6 passed。 - 环境与部署基线:6/6 passed。
@@ -14,11 +14,20 @@
- `git ls-remote origin refs/heads/main` 与 `refs/tags/v0.0.5^{}`:远程 SHA 均按实时查询核对通过。 - `git ls-remote origin refs/heads/main` 与 `refs/tags/v0.0.5^{}`:远程 SHA 均按实时查询核对通过。
- `git diff --check`:passed。 - `git diff --check`:passed。
- Node 语法检查:passed。 - Node 语法检查:passed。
- `npm run governance:finish -- GOV-007 development-schema-baseline`:passed。
- 最终实现提交:`d827bfadb1fc0a7d768eefbf87b46ba26ac612d6`。
- `git ls-remote origin refs/heads/main`:与最终实现提交一致。
## 测试先行留痕 ## 测试先行留痕
首次测试因模块不存在以 `ERR_MODULE_NOT_FOUND` 失败。实现期间失败测试先后捕获:MySQL 密码条件必填、标签提交核对、清单篡改、标准 5.7 视图 DEFINER、例程字符串误改、顶层/例程 DML 区分、双客户端版本、未跟踪基线、陈旧 tracking ref、普通与可执行注释 DML 绕过。每项均在实现修复后转绿。 首次测试因模块不存在以 `ERR_MODULE_NOT_FOUND` 失败。实现期间失败测试先后捕获:MySQL 密码条件必填、标签提交核对、清单篡改、标准 5.7 视图 DEFINER、例程字符串误改、顶层/例程 DML 区分、双客户端版本、未跟踪基线、陈旧 tracking ref、普通与可执行注释 DML 绕过、N/A 与当前开关不一致、顶层数据修改/装载及敏感内容漏检。每项均在实现修复后转绿。
## 未执行项 ## 未执行项
当前 MySQL 功能开关为关闭,本功能范围明确禁止连接数据库,因此未执行真实 MySQL 5.7 导出。首次启用 MySQL 的版本必须在固定开发库补做真实集成验证。 当前 MySQL 功能开关为关闭,本功能范围明确禁止连接数据库,因此未执行真实 MySQL 5.7 导出。首次启用 MySQL 的版本必须在固定开发库补做真实集成验证。
## 人工完成项
- GitNexus HIGH 风险已核对,13 条受影响流程均属于 Schema 生成、验证和治理门禁。
- 视觉 QA 不适用,原因已单独留痕。
- 回退说明已核对;本版本未执行生产发布或数据库变更。
@@ -8,4 +8,6 @@
- 为 MySQL 未启用状态建立不伪造空 SQL 的 `not_applicable` 基线。 - 为 MySQL 未启用状态建立不伪造空 SQL 的 `not_applicable` 基线。
- 将上一发布版本 Schema 基线验证接入开发前和开发后治理门禁。 - 将上一发布版本 Schema 基线验证接入开发前和开发后治理门禁。
- `governance:start` 仅接受已提交、已推送且远程标签一致的基线;真实导出限制在本机回环地址并分别校验 `mysql` 与 `mysqldump` 客户端版本。 - `governance:start` 仅接受已提交、已推送且远程标签一致的基线;真实导出限制在本机回环地址并分别校验 `mysql` 与 `mysqldump` 客户端版本。
- 实现提交将在发布封存时回填。 - N/A 基线会实时核对当前开发环境 MySQL 开关;启用后必须改用真实 captured 基线。
- 扩展顶层数据操作、疑似凭据、数据库 URI、生产主机和导出噪声阻断。
- 最终实现提交:`d827bfadb1fc0a7d768eefbf87b46ba26ac612d6`。
@@ -15,10 +15,13 @@
## 最终复审 ## 最终复审
- 普通注释、版本 SET 注释、MySQL 可执行注释中的顶层 INSERT/REPLACE 均被拒绝。 - 普通注释、版本 SET 注释、MySQL 可执行注释中的顶层 INSERT/REPLACE 均被拒绝。
- 顶层 UPDATE、DELETE、TRUNCATE、LOAD DATA/XML 均被拒绝,例程内部合法 DML 保留。
- MySQL dump 残留头、疑似密码/Token/Secret、数据库 URI 和生产主机注释均被拒绝。
- N/A 基线每次重读固定开发环境配置,MySQL 启用后旧 N/A 清单立即失效。
- 例程内合法 DML 保留,标准 MySQL 5.7 视图 DEFINER 输出可规范化。 - 例程内合法 DML 保留,标准 MySQL 5.7 视图 DEFINER 输出可规范化。
- 远程分支使用实时 `git ls-remote`,远程标签提交与清单提交核对。 - 远程分支使用实时 `git ls-remote`,远程标签提交与清单提交核对。
- 20 项 Schema 测试、治理/数据库/环境回归测试均通过。 - 23 项 Schema 测试、治理/数据库/环境回归测试均通过。
问题处置:第一、二轮所有 Critical/Important/Minor 问题均已关闭并有回归测试;未保留延期问题。 问题处置:多轮 Review 的所有 Critical/Important/Minor 问题均已关闭并有回归测试;独立终审无新增问题,未保留延期问题。
最终结论:passed 最终结论:passed
@@ -13,8 +13,8 @@
## 复审结果 ## 复审结果
- 最终代码复审已通过,所有 Important 问题均关闭并有测试证据。 - 最终代码复审已通过,Critical/Important/Minor 均为零;历史问题全部关闭并有测试证据。
- `governance:finish` 将在发布前重新执行全部治理、Schema 和 GitNexus 门禁。 - `governance:finish` 将在发布前重新执行全部治理、Schema 和 GitNexus 门禁。
- 实现提交、封存提交和 `v0.0.6` 标签推送属于本档案的发布步骤,完成后回填 SHA。 - 最终实现提交 `d827bfadb1fc0a7d768eefbf87b46ba26ac612d6` 已推送 Gitea;封存提交和 `v0.0.6` 标签按发布步骤执行。
最终结论:passed 最终结论:passed