Files
a-share-analysis/docs/features/GOV-012-node-schema-exporter/development-summary.md
T

2.8 KiB
Raw Blame History

GOV-012 开发总结

原始开发需求

将 Schema 版本基线从本机 mysql/mysqldump 子进程迁移为 Node.js 22.x 与 mysql2 直接读取 MySQL 5.7.x,保留历史格式兼容、恢复开发门禁,并满足安全、性能、可追溯和 Gitea 推送规范。

需求与范围变化

  • 原计划使用 MySQL 5.7 VIEW_TABLE_USAGE 读取视图依赖;真实 5.7.42 不提供该表,增加仅针对 ER_UNKNOWN_TABLE 的 information_schema.VIEWS 定义解析回退。
  • 原计划空库 exporter 返回会话 SET;实际 format v3 空库必须返回空 SQL,修正为 captured_empty。
  • GOV-012 不接入 HTTP/OpenAPI、Web、Redis、RocketMQ、API、Scheduler 或 Worker 运行时。

实际完成需求

  • 新增 mysql2 单连接导出器:元数据校验、目录读取、视图排序、六类 SHOW CREATE、确定性渲染、并发漂移检测、超时/大小/对象上限和错误脱敏。
  • schema-baseline.mjs 支持 format v3、异步 exporter 注入、原子文件操作故障注入、CLI 异步入口,并永久只读兼容 v1/v2。
  • 更新当前开发规范、开发流程、README、设计和测试计划;真实开发库生成并推送 v0.0.9 captured_empty 清单。

修复缺陷

  • 拒绝 MariaDB 伪装版本。
  • 严格校验触发器时机、事件和执行顺序。
  • 防止目录、元数据和 SHOW CREATE 直接 API 泄露数据库错误。
  • 保留 EXPORT_TIMEOUT 语义,避免包装器降级为普通查询错误。
  • 防止全局正则改写例程字符串中的 AUTO_INCREMENT,并拒绝导出定义中的主机信息。
  • 兼容真实 MySQL 5.7.42 缺少 VIEW_TABLE_USAGE 的目录差异。

未完成与延期项

  • glob high 依赖风险按用户批准的范围例外保留为独立治理欠项,未在 GOV-012 中升级前端测试依赖。
  • GOV-012 尚未合并到 main、发布 v0.0.10 或封存 v0.0.10 基线;这些是后续 Task 8/9 的发布步骤。
  • MCP GitNexus 传输故障仍待工具环境恢复,不影响已保存的 CLI/静态替代证据。

关键提交

  • 06466f3、8e954a3、54fd928、7e9d906、dc8ad7d
  • c11de09、3d12c83、874796a、afd186c、f1c412b
  • 58026ae、16bde94、11edeb0

验证证据

  • npm run test:schema-baseline:52/52;npm run test:governance:10/10;npm run test:mysql-baseline:2/2。
  • npm run test:environment-baseline:10/10;contracts:3/3;boundaries:16/16;deployment:6/6。
  • pnpm lint、pnpm typecheck、Prettier、npm run schema:verify 均通过。
  • 真实 development MySQL 5.7.42 连接成功,a_share_analysis_dev 五类对象均为 0,v0.0.9 manifest 已提交并推送。
  • 发布 v0.0.10 标签已推送;发布后 v0.0.10 captured_empty manifest 已按标签提交校验并推送 main。