78 KiB
Scert 整改任务执行清单
2026 年 9 月 28 日:项目生命周期与审计(20:21 开始,20:47 同步)
需求确认:继续 P0-06/P0-07,补齐项目创建、资料修改和空项目删除的正式入口;项目不是用户分组。创建仅允许当前有效超级管理员,修改沿用项目管理员实时权限;删除仍遵守默认项目与域名、服务器、成员引用保护,不自动删除业务资源或成员,不清理现有业务数据。名称允许重名,标识由服务端生成且不可修改。所有成功变更与审计同事务,失败记录不泄露请求正文。
- 核对上一批提交
61652f0与干净工作区;浏览器工具问题不阻止本批源码整改。 - 已确认本批权限、引用及事务审计需求;修改前任务检查点
dcede93已提交推送,行为正确性仍须后续测试证明。 - [~] 项目生命周期仓储、实时判权、事务审计及失败回滚已有实现;首轮局部测试通过,随后补充的跨数据库回滚及非事务引擎边界尚待运行,不以 HTTP 层检查代替仓储实时授权。
- [~] 项目创建、编辑、删除 API、失败审计及真实应用接线首轮通过,包含非法字段、确认、引用、缓存和审计失败回滚;新增会话验证后停用/降权及请求取消审计测试尚待执行。
- [~] 页面已接入创建、编辑、二次确认删除与能力提示;局部组合式逻辑及模板回归通过,完整前端与真实浏览器尚未验证。
- [~] 首轮仓储/HTTP/应用组合共 136 个叶子通过、5 条条件跳过,退出 0;项目页面与生命周期专项 35 项通过、0 失败、0 跳过,退出 0。完整回归、MySQL 双版本、竞态及构建尚待执行;PostgreSQL 当前实库和生产验收仍单独保留。
- [~] 已同步总清单顶部及 P0-06/P0-07 的实际进行中状态;模型和验证记录待本批实现及测试后更新,本次只提交进度文档,不夹带未验证代码、运行包、业务库、凭据或日志。
20:47 证据:artifacts/project-lifecycle-20260928/api-first.jsonl 与 frontend-first.log。首轮结果仅证明执行时的候选及对应测试范围;此后新增测试尚未执行,全部源码仍在工作区,未发布部署。旧批次正式包与回归结果不得套用于当前代码。
原始 44 项及其验收标准不缩减。删除引用冲突必须明确提示且不产生部分删除,授权能力提示不能替代服务端每次检查。
2026 年 9 月 28 日:项目页面浏览器验证(19:57 开始,20:15 同步实际进展)
需求确认:使用已提交的项目入口与成员页面,在最新正式构建上验证实际页面、权限操作和布局;不以 SSR 代替浏览器,不扩大为生产验收。正式首次初始化必须经过临时 HTTPS 身份核对、数据库验证、DNS 权限验证和管理证书配置,不通过手工改库或关闭 TLS 校验绕过。
- 19:57 核对基线
a11315d已提交推送、工作区干净且未启动 Scert;后续构建采用已推送的干净检查点5f9af32,主程序于 20:02:26 启动。初始未启动状态不再代表当前运行状态。 - 已有正式脚本构建 Windows 服务端与 Web 成功,运行副本位于独立目录;发布清单 10 个产物、压缩包内 9 个文件、实际运行的主程序及 4 个 Web 文件均校验一致,版本命令退出 0。
- 临时 HTTPS 指纹与可信本机日志一致,主机名校验通过;核对后仅对该临时入口接受浏览器证书例外,未关闭全局 TLS 校验、未安装根证书。浏览器已到达真实的未认证初始化入口。
- 浏览器验证公开状态返回 200,受保护配置返回 401,无效令牌兑换返回 401,之后配置仍为 401;响应包含禁止缓存保护。未兑换真实令牌或创建业务数据。
- 首次初始化后端专项 128 个叶子通过、0 失败、4 条平台条件跳过,退出码 0;三条符号链接权限和一条 Unix 文件权限条件未满足,不能作为对应边界实机通过。
- [!] 浏览器文件工具拒绝访问 Scert 工作区中的一次性地址文件,原因是工具配置的工作区范围不包含当前项目。未尝试绕过;尚未取得合法初始化会话,数据库、DNS 与管理入口证书步骤未执行。
- 验证管理员与普通项目管理员入口、角色授予撤销、分页、撤权拒绝及桌面布局。
- 已按真实范围同步总清单、开发清单、基础规格、审查记录及支持矩阵第二十五节;没有发现并修复新的产品源码问题,未运行的验收不勾选。
证据目录仍为 artifacts/project-members-ui-20260928/,新增正式发布完整性记录及初始化专项日志;浏览器响应另作脱敏记录,不保存真实令牌。运行包、日志、数据库和凭据均不进入源码提交。后续先恢复当前项目专用工具的正常文件访问配置,继续合法初始化;该工具阻塞不阻止项目生命周期、资源授权等后续源码整改。
原始 44 项及验收标准不变。若本机生产式初始化的外部前置条件未满足,明确记录相应缺口并继续其他可执行整改,不将替代环境测试写成完整端到端通过。
2026 年 9 月 28 日:项目入口与成员页面(19:17 开始,19:54 回归完成,等待复审)
需求确认:承接现有成员接口,提供当前账户可见项目的入口和成员管理页面;普通用户担任项目管理员时也必须能够进入,不放开整个管理员控制台,不暴露无权限的项目或全站账户目录。保留原始 44 项范围,本批子项不等于 P0-07 整项完成。
- 核对真实工作区、成员接口、账户可见性和普通用户工作台;上一批结果只作为基线。
- 保存本批任务清单;修改前检查点
af77981已提交推送,命令行认证失败后经 Git 专用工具成功推送。 - 新增服务端过滤的可见项目分页接口,实时检查账户状态与项目角色,不写死默认项目;项目和成员响应禁止缓存,最后修改后的专项与完整回归已通过。
- 新增独立拆分的项目成员页面,接入管理员导航和普通用户工作台;账户建议沿用已有可见性边界,未知账户使用明确的账户 ID,不开放全站搜索。账户页补充可分享的账户 ID。
- 支持每页 5、10、15、30 位成员、多角色授予/撤销、冲突刷新和撤权清空;切换项目、分页及卸载后的旧响应隔离已覆盖正式前端测试。
- 前端完整回归 198 项通过、0 失败、0 跳过;包含真实 Vue 模板渲染而非浏览器测试,前端生产构建通过。首轮导航测试三处失败保留,不覆盖历史日志。
- 最后源码专项 83 个叶子通过、4 条外部 MySQL 条件跳过;完整后端 1700 个叶子通过、54 条条件跳过,均无失败。静态检查、模块校验及双平台构建退出码均为 0;证据使用新建的最终日志,不以缓存保护修改前的记录代替。
- MySQL 5.7/8.0 三轮成员/目录组合各 195 个叶子通过、0 失败、0 跳过,退出码均为 0;含 SQLite 用例,不称纯 MySQL 测试。
- 最后源码三轮专项竞态 249 个叶子通过、0 失败、12 条外部 MySQL 条件跳过,退出码 0;不称全仓库或实库竞态通过,不用上一批记录替代。
- 同步总清单 P0-07 对应说明、执行清单、模型、开发清单、审查记录、基础规格与第二版接口交接,补齐支持矩阵第二十四节及最终候选哈希;旧批次明确标为历史,不再用顶部新增记录掩盖对应条目的过时说明。提交和推送状态以 Git 记录为准,产物及隔离数据库不纳入提交。
- 本批真实浏览器验收、项目创建编辑、完整资源隔离、排队任务重判、PostgreSQL 当前实库、Linux 原生和生产验收仍保留待办。
2026 年 9 月 28 日:项目成员接口与分页(19:10 同步,本批回归通过,等待复审)
本批于 18:42 进入实施,接续 bf10eb5,不再重复数据库驱动选型;原始 44 项及验收标准不缩减。源码修改前检查点为 4618670,接口实现与修复候选已随 3857dac 提交推送,随后增加正式边界测试并重跑回归。不清理业务库,不新增辅助验收脚本。
- 确认需求:接入现有成员事务仓储,操作者只取服务端验证的会话;用户分组和全局管理员角色不隐式授予项目权限。
- 增加成员列表分页与授予/撤销接口;同一用户的多个项目角色合并显示,列表不返回邮箱、密码摘要或分组,应用实际接线测试通过。
- 成员查询在读取数据的 SQL 内判权;专项验证跨项目、会话验证后撤权/停用均拒绝,合法空列表与未授权区分处理。
- 成功变更沿用事务审计,失败请求补充有界审计;验证取消请求仍记录失败、审计存储故障不伪报持久化,不记录请求正文或原始数据库错误。
- 首轮审计失败误报 409 已通过精确唯一键冲突分类修复;最后专项 62 个叶子通过、3 条实库条件跳过,退出码 0,首轮失败证据保留。
- MySQL 5.7/8.0 三轮成员组合各 171 个叶子通过、0 失败、0 跳过;含 SQLite 和错误分类用例,两个版本依次执行。
- 完整后端 1679 个叶子通过、53 条条件跳过;Windows 独立程序历史备份/升级/成员恢复路径、静态检查、模块校验与双平台构建通过,顺序进程退出码 0。
- 仓储、HTTP 与应用接线三轮成员专项竞态 186 个叶子通过、0 失败、9 条外部 MySQL 条件跳过,退出码 0;不称全仓库或实库竞态通过。
- 同步总清单、模型、接口交接及支持矩阵第二十三节,说明错误、分页和授权边界;Smail 参考接口文档保持原样。
- 成员管理页面、项目入口、全部业务资源授权及排队任务重判继续后续交付;本批接口通过不等于完整权限隔离或生产验收。
2026 年 9 月 28 日:数据库最终候选(18:36,回归完成,等待复审)
- 确认继续解决运行时和迁移阻塞,不删减原 44 项;源码修改前检查点
0edde01已推送。 - 读取 5.7 初始化日志与 8.0 崩溃证据,确认两次内存分配失败;按可执行程序和隔离数据目录核验并停止两个残留测试进程,保留全部文件,不影响本机其他数据库服务。
- 核查官方 WAL-reset 修复说明和驱动版本源码,选择
sqlite v1.59.0/libc v1.75.7,实测引擎 3.53.4;旧 v1.40.1 测试降为中间证据。 - 最后源码取消查询与 WAL 完整性专项各 10 次通过,共 30 个叶子;服务并发关闭另重复 30 次通过。最终专项文件为
sqlite-verified.jsonl,初版sqlite-final.jsonl仅为中间证据。 - 在资源受限机器上以
GOMAXPROCS=2、go test -p 1依次完成 MySQL 5.7/8.0 三轮原组合,各 531 个叶子通过、0 失败、0 跳过,退出码均为 0;不降低 TLS、不减少用例,包含 SQLite 用例。 - 最终完整后端 1635 个叶子通过、52 条条件跳过;Windows 独立程序历史备份/升级/成员恢复通过,静态检查、模块校验和双平台构建成功,最终顺序进程退出码为 0;Linux 仅交叉构建。
- 最终三轮扩大竞态
race-final.jsonl:831 个叶子通过、0 失败、15 条外部 MySQL 条件跳过,退出码为 0;不使用旧驱动的 828 个叶子通过数替代,也不把普通 MySQL 实库组合称为竞态验证。 - [!] 旧索引元数据不一致根因未关闭;保留失败证据及生产门禁,不以重跑成功宣称修复。
- 成员 Web/API、失败请求审计、全部业务入口与任务重判、PostgreSQL 当前实库及生产验收继续后续实施。
当前证据目录仍为 artifacts/runtime-migration-20260928/;最终批次为 backend-final.jsonl、mysql57-final.jsonl、mysql80-final.jsonl、sqlite-verified.jsonl、service-close-final.jsonl 与 race-final.jsonl,不覆盖旧失败记录。具体运行结果见支持矩阵第二十二节。原始 44 项状态不升级,下方章节按各自时间保留为历史。
2026 年 9 月 28 日:运行时与迁移回归(13:05 同步,双版本实库仍有阻塞)
本节是 13:05 的历史快照,当前进度以首节为准。彼时事务审计源码已保存到检查点 83a3ada,不是正式验收发布;以下实现、失败和待办按当时状态保留,不覆盖最新结果。
- 确认本次进度同步需求:核对实际源码状态、日志与进程退出码,同步总清单和执行清单,不用历史通过结果代替当前验证。
- 新增正式 SQLite 取消查询文件释放回归,旧驱动复现失败;候选
modernc.org/sqlite v1.40.1下 direct/prepared 各 10 次通过,服务并发关闭连续 30 次通过,等待复审。 - Windows 构建与当前完整后端通过:1634 个叶子通过、0 失败、52 项条件跳过;后续静态检查和模块校验成功,顺序进程退出码为 0。
- 扩大范围三轮竞态累计 828 个叶子通过、0 失败、15 项条件跳过,进程退出码为 0;跳过项不计通过。
- [!] MySQL 5.7 三轮组合累计 530 个叶子通过、1 个失败、0 跳过,包含 SQLite 用例;成员迁移重试测试有一次隔离实例初始化失败,进程退出码为 1,不能用后两轮通过覆盖失败。
- [!] MySQL 8.0 组合已完成 247 个叶子通过,但数据库包发生运行时内存分配失败,组合进程退出码为 1;中断用例不算通过,三轮完整验证未完成。
- [~] 已强化预期 MySQL 故障码 1644、消息及历史索引字段顺序断言。旧 Error 1280 与索引元数据不一致根因仍未关闭,重复未复现不能标记修复完成。
- 定位初始化和内存分配失败、复核索引异常,确认最终驱动选择,对最终候选完成双版本与完整回归,再同步其他专项文档并提交源码。
- 接入成员 Web/API、分页、失败审计、全部资源入口授权及任务重判;完成 PostgreSQL 当前实库、Linux 原生与生产验收。
最新证据目录:artifacts/runtime-migration-20260928/,核对文件为 sqlite-cancel-after.jsonl、service-close-after.jsonl、backend.jsonl、race.jsonl、mysql57-after.jsonl、mysql80-after.jsonl;相关进程退出码均已取回。旧失败日志保留,不创建辅助验收脚本,不清业务库、不进行远端部署。
原始 44 项仍为:[✓] 0、[x] 3、[~] 27、[!] 3、[ ] 11。上述子项结果不升级 P0-05/P0-06/P0-07/P1-09 总项,生产部署验收未通过。
2026 年 9 月 28 日:项目成员变更事务审计(12:48 同步,验证存在阻塞)
上一批成员基础及最终验证已提交并推送为 b3909d8。本批继续 P0-07/P1-09,不把仓储能力当作完整项目管理界面或业务隔离。
- 确认需求:成功授予/撤销必须记录项目、实际操作者、目标账户、角色、动作及时间;权限变更与审计同事务提交,审计失败必须回滚权限变更。
- 已将既有授权谓词、成员写入和成功审计接入同一事务;保留实时账户与项目管理员校验,不依赖会话中的缓存角色。审计失败或未实际写入时回滚,MySQL 成员表和审计表不是 InnoDB 时拒绝变更,不自动迁移历史表引擎。源码仍未提交,实现完成待复审。
- 已补充正常变更、重复与拒绝操作、审计故障回滚、自我撤权、历史保留、取消上下文、存储边界及并发重复操作用例;最新仓储专项 41 个叶子通过、0 失败、3 项条件跳过。
- 最新三次竞态累计 123 个叶子通过、0 失败、9 项条件跳过;随后静态检查和模块校验成功,顺序进程退出码为 0。
- [!] MySQL 5.7 最新专项 176 个叶子通过、1 个失败、0 跳过(包含 SQLite 用例);
TestHistoryScopeMySQLMigrationRetry/version报索引idx_audit_project_history的 Error 1280,根因未确认。顺序进程退出码为 1,MySQL 8.0 最新验证未启动,不能以早期验证代替。 - [!] 本批中间版本完整后端 1630 个叶子通过、1 个失败、52 项条件跳过;
TestDesktopConcurrentTransitionAndIdempotentClose关闭后 SQLite 文件仍占用。最新独立重复 10 次中 8 次通过、2 次失败,退出码为 1,后续构建及最新完整回归未执行。不得跳过此测试或用上一批 1623 个通过替代当前证据。 - 将本批实现、真实测试结果和两个阻塞同步至总清单与本执行清单;未将任何总项提升为完成或复审通过。
- 修复并复核两个阻塞,完成最后修复后的双版本实库及完整后端验证,再统一同步其他专项文档、提交并推送本批源码。
- 成员管理 Web/API、分页、失败请求审计、资源授权入口及任务重判继续后续接入;当前不新增对外路由。
证据目录:artifacts/project-member-audit-20260928/。本次核对 targeted-verified.jsonl、race-verified.jsonl、mysql57-verified.jsonl、service-close-repeat.jsonl 及中间版本的 backend.jsonl;进程退出码已取回。不存在最新 mysql80-verified.jsonl 或 backend-verified.jsonl 的通过证据。P0-05/P0-06/P0-07/P1-09 保持 [~],全部 44 项及其验收标准不变;生产部署验收未通过。
2026 年 9 月 28 日:项目成员与实时判权(已完成子项待复审)
修改前检查点 4f1900d 已推送。需求沿用 P0-06/P0-07:项目成员独立于用户分组,支持六类项目角色;普通管理员不自动获得所有项目权限;普通用户不能读取完整私钥。系统级权限仍由有效超级管理员承担。
- 核对原始范围和当前模型,确认不向旧用户或默认项目自动授予成员权限。
- 第 14 号迁移、成员授予/撤销及实时判权实现;多项目、多角色、禁用账户、未知操作默认拒绝。仅有效超级管理员拥有系统级跨项目能力,普通用户仍不能读取完整私钥。
- 两项目隔离、撤权和降权、父记录引用、迁移失败重试通过;MySQL 5.7/8.0 各 242 个叶子通过、0 失败/跳过(命令同时包含 SQLite 用例)。
- 复现并修复本批 SQLite 负行号误拒绝、扩展唯一索引替换可删除关联账户、空邮箱被误当唯一冲突三个边界;保留失败证据
replacement-before.jsonl和empty-email-before.jsonl,最后修复后重新执行全部本批验证。 - 最终完整后端 1623 个叶子通过、0 失败、51 项条件跳过;Windows 独立产品程序包含历史备份升级与新增成员多角色的备份恢复,恢复后重新验证授权和跨项目拒绝。
- 三次竞态合计 633 个叶子通过、0 失败、18 项条件跳过;
go vet ./...和go mod verify退出码为 0。最终证据为*-verified.jsonl,原*-final.jsonl只作最后空邮箱修复前的中间证据,详见支持矩阵第二十一节。 - 接入所有业务资源入口、资源真实项目解析、排队任务执行/取消/重试重判;当前基础模块不代表 Web/API 已隔离。
- 同步总清单、执行清单、模型、基础规格、开发清单、审查记录、支持矩阵和运维边界;本批代码与文档同批提交。P0-05/P0-06/P0-07 总项继续保持
[~]。
成员管理 Web/API、角色变更审计和所有业务调用链仍未交付;不开放不完整的项目管理入口。删除有成员的项目或账户必须先显式撤销关系,不能用删除身份再重建的方式继承旧权限。已有历史用户与用户分组不自动回填项目角色。
本批仅操作隔离测试库;不清理生产业务数据,不创建辅助验收脚本,不将新表或单项测试代替完整生产验收。
2026 年 9 月 28 日:任务/审计范围快照(本批实现与回归完成,等待复审)
修改前检查点 5237e8d 已推送。当前批次接续模式 12,不改写旧迁移,不删除历史任务,不给已删除资源伪造默认项目,不伪造操作者。
- 已实现三库模式 13 及历史回填;任务、审计保存范围快照,管理证书使用明确系统范围,未知历史保留未知。
- 已实现业务任务从实际域名项目创建、尝试关联校验及历史读取;HTTP 操作者取自服务端会话,工作流审计关联实际任务。
- 当前专项重测通过:
HistoryScope|TaskAPI|AuditLogResponse|SQLiteBusinessUpgradePreservesDependentObjects,覆盖仓储、数据库、接口三包;未配置外部 MySQL 的条件用例不算实库通过。 - 补充资源删除/项目变更后新尝试拒绝、历史孤儿读取、HTTP 与工作流任务和身份关联断言;正常管理续期必须有开始和收尾审计,故障注入场景只校验实际可写入记录,不强行要求被拒绝的开始审计存在。
- 正式回归复现登录初版身份漏记/错记及自身账户更新后身份丢失;修复为本次已验证身份或写入前身份快照,登录失败不冒用旧 Cookie。改密审计保留实际身份,后续请求仍拒绝旧会话。
- MySQL 5.7/8.0 专项各 135 个叶子通过;完整后端 1514 个叶子通过、49 项条件跳过;三次竞态共 258 个叶子通过、6 项条件跳过;最新 Windows 程序两条备份恢复路径、静态检查和模块校验通过。日志及统计边界见支持矩阵第二十节。
- 同步总清单、执行清单、模型与接口字段、基础规格、开发清单、审查记录、支持矩阵及运维边界;本节与源码同批提交。
- 剩余资源关联、项目成员授权和撤权重判、跨项目越权验证、PostgreSQL 当前实库、Linux 原生与生产门禁。
范围快照没有项目外键,不用于授权,也不保证任意直接 SQL 写入的正确性。回填会正常执行既有更新触发器;若触发器拒绝,迁移失败,不绕过触发器。P0-05、P0-06、P0-07 仍为 [~]。
2026 年 9 月 28 日:资源归属与替换约束复核
已提交的第 11 号迁移(源码 7284958)
- 域名、服务器保存
project_id、owner_id、created_by、updated_by;历史资源回填默认项目,未知所有者和操作者保留空值,不编造历史身份。 - HTTP 从服务端会话填写归属,拒绝客户端伪造归属字段;普通更新保留项目、所有者和创建者,仅更新操作者。原 CLI 更新保持原归属,不重新开放已停用业务入口。
- 绑定替换在同一事务校验域名、服务器及项目一致性;失败保留旧绑定。MySQL/PostgreSQL 新增外键;SQLite 不重建业务表,以触发器保护引用且保留原有对象。
- 重新读取上一批最终日志:后端 1432 个叶子通过、含父项 1562 条,0 失败、47 项条件跳过;竞态三次共 114 个叶子通过、6 项条件跳过。不能把无测试文件包的 skip 事件算作测试跳过。
- 上一批 MySQL 5.7.44/8.0.45 专项各 37 个叶子通过、0 失败、0 跳过;每条命令包含 SQLite 用例,不能称为 37 个纯 MySQL 用例。Windows 独立程序含普通项目的资源和绑定备份恢复通过;当时程序是未提交源码构建,不称干净发行包。
本轮新增修复(修改前检查点 cad238a)
- 正式回归复现 20 个失败叶子:递归触发器关闭时,主键或隐藏行号冲突可通过
UPDATE OR REPLACE/INSERT OR REPLACE删除被引用行;外键开关不能消除此缺口。保留artifacts/resource-replacement-20260928/before.jsonl。 - 新增第 12 号迁移;SQLite 增加目标行替换保护和插入后引用检查,防止隐式删除绕过。MySQL/PostgreSQL 沿用外键,仅统一模式登记;不改写第 11 号历史迁移。
- 专项覆盖四种连接开关组合、十类替换、正常编辑、无引用替换及负行号后自动插入;版本登记故障、触发器重名及既有无效引用必须完整回滚并可修复重试。
- 修复源码已提交为
92c844f;完整后端 1480 个叶子通过、47 项条件跳过,三次竞态共 255 个叶子通过、6 项条件跳过,MySQL 双版本专项各 83 个叶子通过且无跳过。独立 Windows 产品程序两条路径均通过;构建来自当批未提交工作区,不称干净发行包。最终证据见支持矩阵第十九节。 - 同步合并清单、基础规格、开发清单、关系模型、测试记录、支持矩阵和运维说明;保留历史批次,不用新结果覆盖旧失败记录。
- 任务、尝试与审计的项目关系继续实施;管理证书任务目前使用
management-certificate特殊资源 ID,必须明确系统范围,不能伪造业务域名满足外键。历史已删除资源的任务和审计需要保留且区分未知归属,不自动删除。 - PostgreSQL 当前实库、完整资源成员授权、Web/API 越权、Linux 原生、完整发行包、服务重启和生产门禁。
本轮优先封堵已复现的数据完整性缺口,再接下一批任务/审计关联。P0-06、P0-07、P0-05 总项均不提升;原始 44 项及验收要求不变。
2026 年 9 月 28 日:项目根实体最终验证结果
本节更新下方启动阶段记录;详细命令与限制见《构建版本与数据库支持矩阵》第十八节。
- 项目根实体、三库第 10 号迁移与仓储实现;默认项目保护、资料保留和错误语义专项通过。
- SQLite 历史模式 0~10 的升级覆盖(模式 1~10 含代表性业务),项目迁移失败回滚和重试通过;三套迁移目录、登记和嵌入检查通过。
- MySQL 5.7.44、8.0.45 各 8 个叶子用例通过,0 失败、0 跳过;包含严格 TLS 实连下的项目 CRUD 和 DDL 部分成功后的重试。
- 54 个项目/迁移叶子用例连续 3 次竞态检测通过;外部 MySQL 用例在该命令中条件跳过,已由上述实库专项分别执行。
- 最终后端全量 1409 个叶子通过,含父项 1535 条通过记录,0 失败、46 项条件跳过;静态分析与模块校验通过。
- 当批 Windows 产品程序通过 2 条独立 CLI 恢复路径,核对默认项目与普通项目、历史业务、凭据及证书;不是完整发行包或实机服务验收。
- PostgreSQL 原生项目实库验证;全部资源归属回填、关联约束、项目成员权限、Web/API、Linux 原生运行及完整生产门禁。
P0-06、P0-07 均保持 [~]。当前完成的是项目根实体,不是统一项目资源模型或权限隔离;不更改原始 44 项范围。
2026 年 9 月 28 日:P0-06 项目根实体实施
- 重新核对干净工作区和 P0-06/P0-07 原始要求;修改前检查点
adb7d7f已推送。 - 新增项目模型、三库
0010_projects.sql、统一登记与嵌入、项目 SQL 仓储;旧迁移文件未改写。 - 本地专项验证项目校验、CRUD、默认项目保护、中文及四字节字符、取消上下文、缺失对象、重复写入、关闭重开,以及 SQLite 迁移回滚重试和历史业务保留。
- [~] 完整后端与 MySQL 5.7/8.0 隔离实库回归正在执行,证据目录
artifacts/project-model-20260928/;跳过项不算通过。 - PostgreSQL 实库专项、资源项目字段与历史回填、关联及引用删除约束、项目成员权限、接口越权、Web 页面和生产验收。
需求确认、实体关系与后续验收条件见《项目资源关联模型.md》。本批只建立项目根实体,未将现有资源视为已经分配到默认项目;P0-06/P0-07 和全部 44 项范围不缩减,均不提升为整项完成。
本清单依据《Scert整改合并优化清单.md》建立,用于跟踪实际代码整改、自动化验证、隔离环境验证和生产验收。
当前日期:2026 年 9 月 27 日
状态定义:
[ ]未开始;[~]进行中;[x]已完成,等待复审;[✓]复审通过;[!]暂缓或存在阻塞。
一、执行规则
- 代码实现、自动化测试、隔离环境验证和生产验收分开记录。
- 构建成功、接口返回 HTTP 200 或单元测试通过,不直接等同于生产验收通过。
- 真实 DNS、ACME、HTTPS、SSH 主机指纹、备份恢复和远程部署必须保留可复核证据。
- 不使用
-k、--insecure、跳过 SSH 主机指纹或强制 IP TLS 的方式替代正式验证。 - 不将密码、RAM 密钥、Token、私钥、真实证书或 Cookie 写入代码、文档、日志和 Git。
- 每个任务完成后先标记为
[x],复审和对应范围的验收证据齐全后才能标记为[✓]。
逐项规格入口:《整改任务规格与验收约定.md》。P0/P1/P2/P3 分别见《基础整改任务规格.md》《核心能力任务规格.md》《运维验收任务规格.md》《增强能力任务规格.md》,共 44 项;每项具备全部原定字段及独立六阶段状态。汇总状态、原始清单状态与规格同步更新;原始清单的需求和验收标准仍保留为基准,不随局部实现缩减。
二、当前基线证据
| 项目 | 当前事实 | 证据或命令 | 结论 |
|---|---|---|---|
| Git 工作区 | main 与 Scert/main 同步,工作区干净 |
git status --short --branch |
已建立基线 |
| 后端模块 | backend/go.mod 声明 Go 1.26.6,模块内实际使用 go1.26.6 |
在 backend 执行 go version、go env GOVERSION GOTOOLCHAIN |
GOTOOLCHAIN=auto;根目录的 1.26.2 不代表后端构建版本 |
| Node.js | v24.19.0 |
node --version |
已记录 |
| npm | 11.17.0 |
npm.cmd --version |
已记录 |
| Vue | 锁文件实际版本 3.5.41 |
frontend/package-lock.json |
已记录 |
| Vite | 锁文件实际版本 6.4.3 |
frontend/package-lock.json |
已记录 |
| 数据库驱动 | SQLite、MySQL、PostgreSQL 均有代码和迁移目录 | backend/internal/database/ |
正式支持范围仍需确认 |
| SSH | 已有主机指纹、密钥部署和安全测试代码 | backend/internal/deployment/ |
远程实机仍需复核 |
| 生产门禁 | 现有文档明确正式验收尚未全部通过 | doc/生产部署与运维说明.md |
不能宣称生产放行 |
三、P0 基础整改和阻塞项
| 编号 | 状态 | 任务 | 当前问题 | 下一步交付 | 验证证据 |
|---|---|---|---|---|---|
| P0-01 | [x] | 明确产品范围 | 正式发布仅含 Web/服务端,桌面源码保留;CLI 已收敛且实际 Windows 产物验证通过 | 等待最终复审;Windows/Linux 实机安装仍归对应验收项 | 双平台归档及 SHA256、独立克隆、命令树及实际退出码 |
| P0-02 | [x] | 建立完整任务清单 | 44 项逐项规格、原始编号名称、字段、六阶段、引用和汇总状态核对通过 | 等待最终复审,随实现同步状态和证据 | 四份规格、统一验收约定及 fab98d1 独立克隆 |
| P0-03 | [x] | 整理源码、构建产物和部署产物 | 全仓库及子目录规则、目录说明、正式回归和独立克隆构建校验通过 | 等待最终复审,后续提交继续执行边界检查 | 正式 Go 回归、完整索引、双平台 33 项清单及解包校验 |
| P0-04 | [~] | 统一开发和构建版本 | 精确工具链、安装策略、发布前后校验、系统清单及固定换行已实现,双独立克隆和完整自动化通过 | Linux 原生构建与双平台实际运行环境记录,不以交叉编译替代 | 94237b8、175 项前端测试、后端完整回归、4 个 Web 文件一致、33 项清单和解包校验 |
| P0-05 | [~] | 确认数据库正式支持矩阵 | 保留 MySQL/SQLite 既有证据;修复历史模式带数据升级,增加事务回滚和独立 Windows 程序备份恢复 | 继续旧发行包实际数据升级、完整发行包、真实服务重启、Linux 原生和取消边界;其余数据库及生产门禁不缩减 | fd2810b SQLite 专项 71 个叶子用例;27 个升级/恢复用例连续 3 次竞态检测通过;支持矩阵第十七节 |
| P0-06 | [~] | 建立统一领域模型 | 已有域名、证书、任务、服务器等实体,项目和部署关联仍需审查 | 补齐资源关系图、外键/归属和任务关联 | 模型文档、迁移检查、接口测试 |
| P0-07 | [~] | 增加项目级权限和资源隔离 | 用户组和角色已有实现,项目级资源边界未闭环 | 为证书、DNS、服务器、任务和审计补齐项目归属及越权测试 | 权限矩阵、接口越权测试 |
| P0-08 | [~] | 完善凭据和主密钥生命周期 | 已有凭据存储与测试,轮换、恢复、删除和失效证据不完整 | 补齐创建、轮换、恢复、删除、脱敏和不可恢复边界 | 安全测试、日志审查、恢复演练 |
| P0-09 | [~] | 强化 SSH 主机身份验证 | 已有指纹校验和安全测试,人工确认、更新与远程公钥部署需逐项复核 | 完成指定服务器上的密码部署、公钥登录和指纹复核 | 指纹、授权文件、公钥登录日志 |
| P0-10 | [~] | 统一任务、部署和回滚事务模型 | 部署事务已有实现,不代表所有长操作、项目关联和八类状态已经实现 | 将申请、部署、回滚、重试统一关联任务记录 | 事务测试、失败回滚证据 |
| P0-11 | [!] | 建立生产验收门禁 | 现有自动化证据不能替代 DNS、HTTPS、ACME 和远程验收 | 固化准入清单、证据目录和阻塞规则 | 生产验收记录逐项复核 |
| P0-12 | [~] | 完成备份和恢复方案 | 已有 CLI 备份恢复,自动备份、列表、下载、确认和审计仍需逐项核查 | 补齐完整备份能力并进行隔离恢复演练 | 隔离数据库恢复报告 |
四、P1 核心产品能力
| 编号 | 状态 | 任务 | 当前判断 | 主要验收 |
|---|---|---|---|---|
| P1-01 | [~] | 统一证书中心 | 已有证书申请、导入和列表能力,统一详情和状态仍需复审 | 申请、导入、续期、部署、回滚 |
| P1-02 | [~] | 证书详情和版本管理 | 已有证书相关模型,版本、SAN 和历史展示需复核 | 版本切换、SAN 变化、旧证书保留 |
| P1-03 | [~] | ACME 和 DNS 管理 | 已有多 DNS Provider 和 DNS 账户能力,真实授权范围需复核 | Production/Staging、DNS-01、泛域名、CNAME |
| P1-04 | [~] | 任务中心 | 已有任务和执行记录基础,取消、重试和日志展示需复核 | 长任务、失败重试、取消、执行历史 |
| P1-05 | [~] | 续期策略 | 已有续期相关代码,重复申请保护和调度验收需补齐 | 到期阈值、锁、幂等、失败保留旧证书 |
| P1-06 | [~] | 服务器和部署目标中心 | 已有服务器管理和 SSH 密钥展示 | 服务器归属、验证、密钥登录、部署目标 |
| P1-07 | [~] | 多服务器部署策略 | 已有部署客户端和回滚测试 | 多目标顺序、失败回滚、部分成功状态 |
| P1-08 | [~] | 通知中心 | 已有 Smail 系统账户发信接入方向 | 成功、失败、重试、脱敏和系统账户调用 |
| P1-09 | [~] | 审计中心 | 已有审计仓储和接口基础 | 登录、密码、凭据、证书和部署危险操作 |
| P1-10 | [ ] | 证书监控仪表盘 | 页面和监控口径尚未完成复审 | 到期、失败、部署状态、异常统计 |
| P1-11 | [~] | 备份恢复页面 | CLI 和文档已有,Web 操作和权限需补齐 | 备份列表、恢复确认、审计和失败保护 |
| P1-12 | [~] | API 契约和权限矩阵 | 已有后端接口说明文档,需与实际路由同步 | 接口字段、角色、项目和错误码一致 |
五、P2 Web、运维和验收
| 编号 | 状态 | 任务 | 当前判断 | 主要验收 |
|---|---|---|---|---|
| P2-01 | [~] | 统一 Web 页面结构 | 已按页面拆分,仍需逐页检查一页完整显示和中文布局 | 桌面页面、响应式、导航和空状态 |
| P2-02 | [~] | 统一中文显示和错误信息 | 已有中文界面,需扫描 HTML 实体和英文残留 | 页面、接口、日志错误信息 |
| P2-03 | [~] | 长操作任务化 | 部分部署/证书操作已有任务基础 | 页面不阻塞、刷新可恢复、任务状态可追踪 |
| P2-04 | [~] | 幂等和重复操作保护 | 已有部分锁和事务测试 | 重复提交、并发操作、幂等键 |
| P2-05 | [~] | 日志、指标和追踪 | 有日志和任务记录,Request ID/脱敏需复核 | 请求 ID、任务 ID、敏感信息审查 |
| P2-06 | [~] | 接口和前端测试 | 已有后端及前端测试,覆盖面需按清单补齐 | 全量测试、关键页面、越权和失败路径 |
| P2-07 | [~] | 升级、降级、卸载和回滚 | 已有安装器和发布说明,实机闭环未完成 | 升级、降级、卸载、失败恢复 |
| P2-08 | [!] | Windows Service 实机验收 | 当前证据不足以标记通过 | 安装、启动、升级、卸载和日志 |
| P2-09 | [!] | Linux systemd 实机验收 | 有 unit 和历史测试,当前版本需重新核对 | 安装、启动、重启、日志、Nginx、回滚 |
| P2-10 | [~] | 安全基线 | 已有 SSH、凭据和数据库安全测试,仍需完整门禁 | TLS、Cookie、CSRF、越权、路径和命令注入 |
六、P3 后续增强
| 编号 | 状态 | 功能 |
|---|---|---|
| P3-01 | [ ] | 多租户支持 |
| P3-02 | [ ] | API Token 管理 |
| P3-03 | [ ] | Webhook 事件订阅 |
| P3-04 | [ ] | 更多 DNS Provider 插件 |
| P3-05 | [ ] | 证书标签和批量操作 |
| P3-06 | [ ] | 多实例高可用 |
| P3-07 | [ ] | 分布式任务队列 |
| P3-08 | [ ] | Prometheus 指标接口 |
| P3-09 | [ ] | OpenAPI 自动生成 |
| P3-10 | [ ] | 移动端适配 |
七、本轮执行记录
2026-09-27:建立整改执行基线
- 已检查
main分支和工作区,当前无未提交代码变更。 - 已确认 Go、Node.js、npm 和前端锁文件实际版本。
- 已确认数据库代码同时包含 SQLite、MySQL 和 PostgreSQL 适配,但正式支持矩阵尚未统一。
- 已发现桌面二进制和桌面前端构建入口仍在 Git 索引中,暂不直接删除,列入 P0-03 复审。
- 已补强
.gitignore,覆盖桌面构建产物、部署暂存目录、发布/证据目录和本地数据库/密钥文件。
八、下一轮优先顺序
- 继续 P0-04 工具链固定、锁文件安装策略及构建机/运行机版本记录;独立安装仍有 esbuild 脚本批准策略警告,不自动批准绕过审查。
- 继续 P0-05 三数据库正式版本矩阵、真实迁移和恢复验证,明确非跳过证据。
- 推进 P0-06/P0-07 领域模型和项目隔离;用户分组不能替代项目权限。
- 继续定位 SSH 公钥自动部署实机失败阶段,完成密码安装和密钥登录双路径验收。
- 将生产验收门禁与当前远程部署、DNS、HTTPS 和 ACME 证据逐项对应;P0-01/P0-02/P0-03 保持待最终复审,不重做已取得的同提交证据。
2026-09-27:自动化基线验证
| 验证项 | 命令 | 结果 |
|---|---|---|
| 后端单元和集成测试 | go test -p 1 -count=1 -timeout=3m ./... |
通过 |
| 后端静态检查 | go vet -p=1 ./... |
通过 |
| Go 模块完整性 | go mod verify |
通过 |
| 前端测试 | npm.cmd test |
150 项通过,0 失败 |
| 前端生产构建 | npm.cmd run build |
通过 |
| 前端生产依赖审计 | npm.cmd audit --omit=dev --audit-level=high |
0 个漏洞 |
以上结果仅证明当前代码在本地自动化层通过,不替代 Windows Service、Linux systemd、真实 DNS、ACME、HTTPS、SSH 和备份恢复验收。
2026-09-27:P0-03 生成物索引清理
- 已确认
desktop/scripts/build-frontend.mjs从根目录frontend/dist重新构建并复制桌面资源。 - 已将
desktop/desktop.exe和desktop/frontend/dist/index.html从 Git 索引移除;本地文件仍保留,未物理删除。 deploy/tests/install-linux-test.py保留为可复用测试代码。- 本项仍需在独立克隆中验证正式发布包和生成物边界;按 P0-01 的范围调整,不再以桌面构建作为正式门禁。
2026-09-27:P0-04、P0-05、P2-07 版本和迁移保护
- 纠正工具链误报:
backend模块内实际为 Go1.26.6,GOTOOLCHAIN=auto。没有降低模块版本要求。 - 新增《构建版本与数据库支持矩阵》,区分本地代码检查、SQLite 实测和外部数据库实机验收。
- 新增迁移目录/嵌入/版本登记一致性检查,以及七类反例测试。
Migrate拒绝新版数据库和不连续的迁移历史,避免旧程序误用更新后的数据库。- 数据库定向测试通过:五类异常历史拒绝后原数据不变;SQLite 从 0~9 版本升级并重复执行通过。
- 仅使用测试临时库,没有访问或清空外部业务数据库。三种数据库兼容性不能据此标记全部通过。
2026-09-27:P0-01 正式发布范围收敛
- 依赖:原始整改清单 P0-01,已推送的
8b33282作为修改前检查点;未删除桌面源码或本地生成物。 - 涉及文件:
build/build-release.ps1、backend/internal/releasearchive/verify_test.go、根目录及各模块 README、生产和历史测试文档。 - 正式发布已移除 Wails 调用和桌面打包;清单新增
delivery_scope=[web,server],兼容字段desktop_requested=false。 - 旧参数
SkipDesktop仅警告并兼容,显式设假也不能恢复桌面构建;传入DesktopDirectory在构建前报错。 - 保留路径扫描、Go
-trimpath、文件及归档 SHA256、拒绝覆盖旧输出、源码提交和脏状态记录。 - 已通过 PowerShell 语法解析、
go test -count=1 -timeout=3m ./internal/releasearchive ./cmd/scert-release、git diff --check。 - 发布范围验证已完成,证据见下节;这仍是构建层验证,不代表 Windows/Linux 实机安装验收。
- 历史业务 CLI 的执行入口及最终产物检查已由后续批次完成,见本节末尾的范围验收记录。
2026-09-27:双平台和独立克隆发布验证
- 源码提交:
25fd4cf,已推送。默认双平台构建成功,manifest.json的source_dirty=false、delivery_scope=[web,server]、desktop_requested=false、路径检查通过。 - 输出:
build/release-scope-20260927-25fd4cf/。清单共 33 项(31 个包内文件、2 个归档),逐项文件长度和 SHA256 匹配。 - 真实解包核对:Windows 9 个文件、8 条包内校验和;Linux 22 个文件、21 条包内校验和。解包内容与清单一致,无桌面产物。
DesktopDirectory反例返回退出码 1,且没有创建输出目录。- 独立克隆:
build/checkout-scope-20260927-25fd4cf/。执行npm.cmd ci --no-audit --no-fund、npm.cmd test,150 项通过;显式-SkipDesktop:$false构建双平台通过,33 项清单的长度和 SHA256 再次匹配。 - 独立克隆保留
desktop/main.go,不包含desktop/desktop.exe或桌面 dist。跟踪清单没有.runtime、node_modules、dist、可执行文件、数据库或私钥后缀文件;克隆工作区仍干净。 npm ci提示 esbuild 的安装脚本尚未列入批准清单,但命令、前端测试及构建均退出成功;未自动批准额外脚本。可复现安装策略仍归 P0-04 后续审查。
2026-09-27:CLI 运维范围收敛
- 依赖 P0-01 正式范围;涉及
backend/internal/cli/root.go、根命令/范围/运维测试、README 和《命令行运维范围说明》。 domain、server、ssh-key、renew、deploy不再注册业务实现;仅保留隐藏的中文迁移提示,返回错误,不解析或回显旧凭据参数。- 保留初始化、服务启动、状态、证书诊断、DNS 诊断、配置、日志、备份恢复及系统服务运维;服务端自动续期未更改。
- 新增命令树白名单和 11 类旧入口拒绝测试;用无效配置和模拟凭据证明拒绝先于配置读取,配置内容不变且没有新增运行数据。
- CLI 定向测试、后端全量
go test -p 1 -count=1 -timeout=3m ./...和go vet -p=1 ./...已通过。使用测试临时目录,没有清空或连接生产数据库。 - 本批实际 Windows 可执行文件的帮助和旧入口退出码已在后续干净发布包中验证;Linux 安装及服务运行仍需独立实机验证。
2026-09-27:CLI 实际产物复核修正
d90ddaa已推送并完成干净工作区双平台构建,产物位于build/release-scope-20260927-d90ddaa/。- 实际 Windows 可执行文件的默认帮助仅显示运维命令;旧
domain add返回退出码 1,没有执行旧业务。 - 实测发现框架先输出英文
Error:,入口随后又输出中文错误,造成重复提示。已设置根命令SilenceErrors=true,由Execute统一输出中文错误;新增无重复输出断言。 - 修正后 CLI 和发布模块定向测试及静态检查通过;最终复核使用修正后的
885478a干净发布包,没有用之前的二进制代替。
2026-09-27:P0-01 范围验收记录
| 验收点 | 当前证据 | 结论 |
|---|---|---|
| 正式范围只有 Web 和服务端 | 根 README、构建/部署说明、当前执行清单和历史范围声明一致;无额外 CI 或发布入口调用 Wails | 本地复核通过 |
| 桌面历史源码保留 | 桌面目录及开发说明仍在;原本机桌面二进制和 dist 未物理删除 | 符合不删除要求 |
| 双平台实际发布包 | build/release-scope-20260927-885478a/;源码 885478a7e0dfc3832cdd094ed388891c41062eb9,source_dirty=false |
构建层通过 |
| 清单及归档一致 | 33 项长度和 SHA256 一致;Windows 解包 9 文件/8 校验项,Linux 22 文件/21 校验项,均无桌面产物 | 构建层通过 |
| Linux 可执行权限 | 归档内 scert、scert-admin、scert-nginx、scert-storage 和安装器均为 0755 |
归档层通过,不代表 Linux 已运行 |
| 实际 CLI 帮助 | 从最终 Windows ZIP 解出的 scert.exe help 返回 0,仅公开运维入口 |
本机执行通过 |
| 实际旧 CLI 拒绝 | domain、server、ssh-key、renew、deploy 均返回 1;仅一条中文错误,无模拟凭据回显,无运行目录创建 |
本机执行通过 |
| 自动化回归 | 最终应用代码通过后端全量测试、全量 vet 和 go mod verify;前端独立克隆 150 项通过,源码未再修改 |
本地自动化通过 |
| 归档测试范围 | Linux 测试改用 scert-storage,不再要求桌面;Windows 测试逐项核查实际平台文件,不再仅判断 Web 入口存在 |
发布模块测试和 vet 通过 |
P0-01 标记 [x] 已完成,等待复审,不标记生产放行。整体 44 项整改未完成:P0-02 执行规格、P0-03 全仓库边界、三数据库实机验证、项目权限、统一任务、备份页面及生产门禁等仍需继续。上述输出均在忽略目录内,没有提交二进制、运行数据或辅助测试脚本。
2026-09-27:P0-02/P0-03 规格与产物边界验收记录
本批从北京时间约 17:40 开始,基线 96883b3;修改前已推送中文检查点 61b8cac。实现提交为 fab98d1069c29729959c031ce6cf112512751017,随后仅更新本批证据与状态。没有 SSH、真实 DNS、生产数据库清理或浏览器操作,也没有删除工作区既有文件、添加临时辅助验收脚本。
| 验证项 | 实际结果 | 边界 |
|---|---|---|
| 44 项执行规格 | P0 12、P1 12、P2 10、P3 10;编号和名称与原始清单一致,每项有 12 个必需字段及独立六阶段 | 规格齐全不代表 44 项功能完成 |
| 结构和引用 | 显式依赖编号、既有文件路径、汇总状态核对通过;拟新增路径明确标注 | 使用只读核对,没有生成辅助脚本 |
| 目录及忽略边界 | 新增发布、证据、测试及辅助目录说明;通用二进制、归档、缓存、补丁、数据库旁路和私钥规则;公共 CA 和迁移仍保留 | 忽略规则不是内容级秘密扫描器 |
| 正式边界回归 | source_boundary_test.go 在隔离 Git 仓库核对根/子目录规则和所有受跟踪路径,屏蔽调用者 Git 配置 |
不依赖 .git/info/exclude,不把已有被跟踪产物自动放过 |
| 后端完整回归 | go test -p 1 -count=1 -timeout=3m ./...、go vet -p=1 ./...、go mod verify 均通过 |
当前 Windows 主机自动化,不是 Linux 平台专用代码实机测试 |
| 边界测试开销 | 改为一次空字节分隔的批量 Git 查询;发布模块完整回归约 2.48 秒,独立克隆约 3.75 秒 | 保持相同路径及索引断言,避免逐文件启动 Git 的约 32 秒开销 |
| 独立克隆 | git clone --no-local --no-hardlinks 到 build/checkout-boundary-20260927-fab98d1/,当前提交及规格齐全 |
不共享源仓库硬链接或专属排除配置 |
| 干净前端安装与测试 | 克隆内 npm.cmd ci --no-audit --no-fund 成功,npm.cmd test 150/150 通过,0 跳过 |
esbuild 安装脚本批准策略警告仍属 P0-04,不自动放行 |
| 双平台候选 | 克隆内正式脚本输出至 release/boundary-20260927-fab98d1/,Web、Windows amd64、Linux amd64 构建和路径检查通过 |
source_dirty=false,范围为 web/server,无桌面产物 |
| 实际清单与解包 | 33 项 manifest 长度/SHA256 一致;Windows 9 文件/8 校验项,Linux 22 文件/21 校验项全部一致,无额外包内文件 | 本批没有将包部署到远端运行 |
| 构建后源码边界 | 独立克隆安装依赖、构建和解包后 git status --short 为空,发布及证据输出由仓库规则忽略 |
没有二进制、归档、数据库、密钥进入本批提交 |
本批将 P0-02、P0-03 标记为 [x] 已完成,等待复审。连同 P0-01,共 3 项处于待复审状态,不标为 [✓]。其余任务及全部生产门禁继续保留,整体整改目标尚未完成。
2026-09-27:P0-04 固定工具链、安装策略与重复构建记录
本批北京时间约 18:12 开始。先核查当前工作区,没有待提交改动;修改前检查点 5fdb5e4,主要实现 410ce75;发现换行差异后检查点 510a854,修复后最终候选为 94237b8e7da37f6242fa115aaf60fef0a88392c2。所有代码提交已推送,后续仅补充本批证据文档。
本批没有 SSH、真实 DNS、浏览器、生产数据库清理或外部数据库连接;只使用正式构建入口和正式回归。没有增加临时辅助验收脚本,没有删除既有发布包和证据目录。npm ci 按正式安装语义重建对应克隆的前端依赖目录。
| 验证项 | 实际证据 | 边界 |
|---|---|---|
| 精确工具链 | 模块内 Go 1.26.6;Node 24.19.0、npm 11.17.0;Vue 3.5.41、Vite 6.4.3、插件 5.2.4 |
不升级依赖图,只固定已有版本并检查声明与锁文件一致 |
| 安装策略 | .npmrc 与正式命令均显式禁用安装脚本;构建包含开发及平台可选依赖 |
esbuild 安装警告不再被误当作脚本未执行的证明 |
| 真实安装正反对照 | 离线本地依赖和根项目的生命周期标记在正式安装下均不出现,主动放行对照能出现;环境尝试关闭限制仍被命令行覆盖 | 使用正式 Node 回归中的隔离夹具,不是对生产服务的攻击测试 |
| 嵌套 npm 回归 | 首次完整测试暴露用户级白名单被 npm 导出后导致项目安装拒绝;修复为仅隔离子进程该变量,随后 175 项全部通过 | 未改用户 npm 配置,未开启脚本绕过错误 |
| 发布前拒绝 | 版本、锁文件、策略、外部 esbuild、Go 覆盖等拒绝回归;实际 PowerShell 入口拒绝后未创建发布目录 | 前端 175 项中含 25 项工具链回归,0 跳过 |
| 换行问题与修复 | 410ce75 在 CRLF 克隆中产生不同 Web 哈希;.gitattributes 固定文本 LF,正式 Go 测试实际签出 true/false/input 三种配置且保护二进制原样 |
没有用终端脚本批量改写中文源码或重写主工作区 |
| 最终候选完整回归 | 94237b8 独立克隆中 go test -p 1 -count=1 -timeout=3m ./...、go vet -p=1 ./...、go mod verify 均通过;前端 175/175 通过 |
PostgreSQL 真实测试未显式启用,跳过的数据库集成门禁不算实机通过 |
| 双独立克隆 | 分别用 core.autocrlf=true/false 与 --no-local --no-hardlinks 创建;两份均按新策略干净安装 |
不共享源仓库硬链接或专属排除配置;构建机和工具缓存相同,不称两台独立机器 |
| 前端重复构建 | 两份克隆输出共 4 个文件,路径与 SHA256 全部一致;5 份依赖/策略输入哈希也全部一致 | 不宣称带时间戳的全部发布归档逐字节一致 |
| 构建机证据 | Windows 11 Home China,系统 10.0.26200,amd64,PowerShell 5.1.26100.9444 |
manifest 不含用户名、主机名或本地绝对路径;Linux 原生构建尚未验证 |
| 最终候选清单 | source_dirty=false,dependency_install=npm-ci,dependency_scripts=disabled;33 项长度和 SHA256 全部正确 |
正式范围仅 Web/服务端,没有桌面产物 |
| 实际解包 | Windows 9 文件/8 条包内校验,Linux 22 文件/21 条包内校验;逐项与 manifest 一致且无额外文件 | 包已解出但未在远端或 Windows Service 中安装运行 |
| 源码边界 | 两份克隆安装、构建和解包后 Git 工作区均干净 | 构建产物及证据没有进入源码提交 |
最终候选与证据路径:
build/checkout-toolchain-lf-20260927/
release/toolchain-94237b8/
artifacts/toolchain-94237b8/
build/checkout-toolchain-lf-control-20260927/frontend/dist/
P0-04 保持 [~] 进行中;代码实现与自动化阶段标 [x],Windows 隔离构建证据已齐,但 Linux 原生构建、双平台实际运行系统及最终复审未齐。不得据此宣称 44 项整改或生产部署验收完成。下一批继续 P0-05 的真实数据库版本、迁移与恢复矩阵;不清空现有共享 MySQL 服务中的业务库。
2026-09-27:P0-05 双版本 MySQL 隔离迁移与编码修复
本批北京时间约 18:39 开始,修改前检查点 fd4929c,代码候选 ee9ac857a9855fd1993deb3b03498ca921a5b559,均已推送。使用本机 MySQL 程序启动全新独立实例,没有连接、停止或清空原有 MySQL57/MySQL80 服务,没有 SSH、DNS、浏览器或生产部署操作;没有新增临时辅助脚本。
首次 MySQL 5.7.44 实测在第 7 号迁移报 1064。实际原因是嵌入 SQL 文件头存在 UTF-8 BOM,原解析器将其直接发给数据库,也使字段重入匹配失败。修复仅在解析入口去掉文件头编码标记,保留 SQL 字面量内部字符;没有批量改写迁移文件和中文。新增两项常规编码回归及正式隔离实库测试。
| 验证项 | 本批结果 | 证据边界 |
|---|---|---|
| MySQL 5.7.44 | ee9ac85:48 项子测试通过,0 失败、0 跳过;包测试约 29.8 秒 |
Windows 本机独立真实数据库,不是远端生产实例 |
| MySQL 8.0.45 | 同候选:48 项子测试通过,0 失败、0 跳过;包测试约 42.8 秒 | 单独初始化与验证,没有以 5.7 代替 8.0 |
| 空库及历史升级 | 0~9 共 10 个起点,重复迁移无报错 | 历史结构由仓库旧迁移构造,不声称覆盖全部历史程序导出的生产库 |
| 迁移中断重入 | 9 份迁移共 29 个语句边界逐一落盘后重入,包括 DDL 全部执行但版本号未写入 | 模拟已落盘的中间状态,不是电源故障或操作系统崩溃演练 |
| 结构和数据 | 每条成功路径的表引擎、字符集、字段、默认值、索引与全新迁移快照一致;中文哨兵和用户、域名、服务器关联保留 | 不替代所有应用业务或权限 API 回归 |
| 连接安全 | 严格 TLS;不可信 CA、错误主机名、明文连接均被对应校验拒绝;业务账户无跨库及账户表权限 | 测试注册的 TLS 信任不等于正式配置、证书轮换及连接 UI 已验收 |
| 异常迁移历史 | 缺首项、缺中间项、零、负数和新版历史全部拒绝,保留数据、不创建业务表 | 不删除迁移记录绕过版本检查 |
| 冷重启 | 正常停止独立数据库,重新启动并重新打开应用连接后,数据和结构一致 | 不等于 Windows Service、systemd 或在线断线恢复验收 |
| 环境收尾 | 所有本测试启动的数据库已正常退出;原服务仍运行,进程号未变;随机监听已关闭,bootstrap 文件为空 | 数据目录和日志留在被忽略的产物目录,未删除既有文件或提交产物 |
| 常规回归 | 同候选 go test -p 1 -count=1 -timeout=3m ./...、go vet -p=1 ./...、go mod verify 全部通过 |
常规测试默认跳过外部实库门禁;MySQL 以本批两份显式运行日志为准,PostgreSQL 未启用;前端未改,本批未重跑前端 |
开发阶段曾在保留旧连接池后重启数据库,首次迁移收到 invalid connection。此项作为在线断线恢复待办保留,没有用自动重试掩盖 SQL 执行结果不确定性。最终冷重启用例明确关闭并重新打开应用连接,不将其算成该待办通过。TLS 反向测试也修正了错误码假设:账户的 REQUIRE SSL 可先返回认证拒绝,测试同时检查全局安全传输开关及严格证书错误类型,没有放宽加密要求。
正式命令在 backend/ 执行,设置各版本独立的 SCERT_MYSQL_TEST_BIN 和共用产物根 SCERT_MYSQL_TEST_ROOT,然后运行 go test -count=1 -v -timeout=8m -run '^TestMySQLRealMigrations$' ./internal/database。每次运行自行新建数据目录与随机端口,完整参数见《构建版本与数据库支持矩阵.md》。最终非跳过日志:
artifacts/mysql-matrix-20260927/mysql57-ee9ac85.log
artifacts/mysql-matrix-20260927/mysql80-ee9ac85.log
P0-05 从 [!] 调整为 [~],并未标记完成;P0-04 剩余门禁和全部 44 项原始范围保持不变。下一步需继续处理在线数据库连接恢复、MySQL 备份恢复及完整业务初始化,再补 PostgreSQL 当前候选和 SQLite 并发锁证据。
2026-09-27:P0-05 Windows MySQL 在线连接恢复
整改前检查点 f0a9475;实现候选 9cf3a3b。新增正式 Go 回归首先在未修复代码的 MySQL 5.7.44 重现:保留应用池、重启独立数据库后,第一条业务写入返回 invalid connection。没有用额外健康请求、重开应用池或业务重试绕过问题。
[x]根因与修复:Windows 驱动空闲检查缺位;在业务发送前增加单次最多 2 秒的复用探测,失败淘汰连接。Linux 不增加额外往返;查询、写入及提交错误保持原样。[x]安全边界单测:探测截止时间、取消、失败关闭、仅在写入前替换连接,以及查询、写入、提交不确定时不自动重放。[x]双版本隔离实库:每个版本原有 48 项迁移及安全测试,加 7 项连接恢复、预编译、参数转换和事务测试,合计 55 项通过,0 失败、0 跳过。[x]后端回归:go test -p 1 -count=1 -timeout=3m ./...、go vet -p=1 ./...、go mod verify通过;Linux 数据库测试包交叉编译通过。本批没有改前端,未重跑前端测试。[ ]尚缺:Linux 实库恢复、真实网络提交确认丢失演练、MySQL CLI 备份恢复、正式 Web 初始化和业务回归;不能用上述测试替代服务部署验收。
实现、命令、行为成本及更完整的覆盖边界见《构建版本与数据库支持矩阵.md》第六节。最终日志位于 artifacts/mysql-matrix-20260927/mysql57-9cf3a3b.log、mysql80-9cf3a3b.log,测试产物不提交。共享 MySQL 服务不在测试操作范围。
本批只关闭 Windows 隔离环境中已复现的首次请求故障,不把 P0-05 或全部 44 项标记完成。下一批继续 MySQL 备份恢复的实库一致性与失败回滚门禁。
2026-09-27:P0-05 MySQL 基本备份恢复与指定失败回滚
共享夹具重构 07429ad 已通过双版本原有 55 项回归;本批修改前检查点 ac205e2,产品修复及正式测试候选 7bfd400。
[x]修复前实证:MySQL 5.7.44 禁用空闲连接时,跨语句会话变量丢失,恢复返回 1048;DECIMAL 被导出为十六进制字面量,基本恢复返回 1264。两者都先由正式 Go 测试复现。[x]修复:恢复全过程使用同一连接,出错即返回,不通过换连接重放;根据列类型将 DECIMAL 保存为精确文本,二进制数据仍用十六进制字面量,不经浮点转换。[x]新增 10 项双版本实库子测试:固定会话;两种空闲连接配置下的基本恢复、出错停止、提前取消;同进程正式备份恢复命令成功、SQL 导入失败、证书恢复失败。验证中文与特殊字符、二进制、DECIMAL、NULL、微秒时间、自增、外键,以及数据库、配置、加密凭据和证书文件的恢复或回滚。[x]候选最终复测:5.7.44、8.0.45 各 65 项子测试通过,0 失败、0 跳过;8 个本批实例已退出,端口关闭,初始化口令文件清空,共享 MySQL 进程不变。[x]后端全量go test -count=1 ./...、go vet ./...、go mod verify通过;Linux CLI 测试包交叉编译通过,未执行 Linux 实库。前端未修改,未重跑。[ ]下一步:MySQL 并发写入下一致性快照、视图/触发器/生成列等对象完整性、官方工具互操作、独立发行命令及真实网络故障验证。历史 DECIMAL 备份没有自动修复,不能把新备份的回归结果用于旧档案。
正式测试和 JSON 证据命令见《构建版本与数据库支持矩阵.md》第七节;产物位于 artifacts/mysql-restore-session-20260927/,不提交。测试只创建独立 loopback 实例,未清理共享数据库,也没有新增辅助脚本。P0-05 仍为 [~],44 项目标保持原范围。
2026-09-27:P0-05 MySQL 跨表快照与备份失败边界
跨表快照修复 8d742fe 已提交并通过双版本回归。本批约 19:48 开始,修改前检查点 79d7042,产品与测试候选 73df576,均已推送。
[x]跨表快照:两种空闲连接配置下,用第二张表的真实写锁控制并发边界;修复前备份恢复出从未真实存在的(0,1),修复后恢复为同一快照的(0,0)。所有 InnoDB 表共享只读可重复读事务。[x]取消故障实证:首表已导出、第二张表等待元数据锁时取消,原实现返回取消错误后,首表 DDL 仍超过 5 秒被阻塞;两种目标文件状态均复现。修复为备份专用会话设置 5 秒的单次元数据锁等待上限,不修改数据库全局配置。[x]新增 10 项实库用例:拒绝 MyISAM/视图;中途取消、SQL 中断、锁超时各覆盖目标文件不存在与已存在;临时文件冲突;发布重命名失败。检查错误类别、不发布残缺备份、保留既有文件、清理本次临时文件及失败后释放首表元数据锁。[x]最终候选复测:Windows MySQL 5.7.44、8.0.45 各 77 项子测试通过,0 失败、0 跳过。全量后端测试、go vet ./...、go mod verify通过;Linux CLI 测试包交叉编译通过,未在 Linux 运行。前端未修改,未重跑。[x]收尾:本批目录中 18 个隔离实例均退出,已记录端口无监听,初始化口令文件为空;共享 MySQL 进程保持不变。测试数据、随机测试密钥及日志仅留在忽略目录,不提交。[ ]后续:对象完整性、官方工具互操作、独立发行命令、Linux 实库与正式业务初始化;继续 PostgreSQL、SQLite 剩余矩阵及全部 44 项整改。
证据为 artifacts/mysql-backup-boundaries-20260927/mysql57-73df576.jsonl 和 mysql80-73df576.jsonl;命令和限制见《构建版本与数据库支持矩阵.md》第八节。这里验证的是指定锁等待和文件失败场景,不宣称任意查询取消都立即释放服务器资源,也不把临时拒绝视图等对象视为完整支持。P0-05 继续标记 [~],不作生产放行。
2026-09-27:P0-05 特殊列互操作与官方存储对象恢复
待提交代码审查已完成:f260b22 保留并修复 4 个有价值的源码和正式测试文件,无无用待提交文件被删除。本轮约 20:19 开始,检查点 6707059,恢复修复与正式测试候选 e6e6719,均已推送。
[x]特殊列:生成列不再写入计算结果,不可见列的非默认实际值不再遗漏,仅生成列表保留行数;修复扫描越界,用真实结构元数据比较,双版本官方工具双向验证通过。[x]存储对象恢复:先由真实官方导出文件复现 1064,再实现DELIMITER客户端拆句;保留复合语句、字符串和可执行版本注释,拒绝词法格式错误的部分执行。[x]正式对象用例:核对两个触发器的顺序与执行结果,核对过程、函数的定义、参数、权限上下文与实际调用,核对禁用事件的元数据并在独立实例显式启用后验证实际调度;源库没有被目标事件修改。[x]失败边界:不足权限返回数据库原始错误,不提升权限或继续后续例程;格式错误预检阻止此前建表语句执行。没有降低 TLS,也没有启用函数信任开关。[x]最终回归:MySQL 5.7.44、8.0.45 分别 85、87 个叶子用例通过,0 失败、0 跳过。后端全量测试、vet、模块校验通过;Linux 测试包仅交叉编译,前端未修改。[x]收尾:本批 22 个隔离实例退出,测试端口无监听,初始化口令文件为空;共享 MySQL 进程不变,产物没有提交。[ ]后续:自有导出对触发器、例程、事件、视图的完整性及有效权限检查;更多 SQL 模式、跨账户定义者、跨库引用和已启用事件恢复期间的调度隔离;独立发行 CLI、Linux 实库、PostgreSQL、SQLite 与正式业务部署。
证据:artifacts/mysql-pending-review-20260927/review-mysql57.jsonl、review-mysql80.jsonl;本轮为 artifacts/mysql-stored-programs-20260927/mysql57-review.jsonl、mysql80-review.jsonl。权限、官方工具选项、SQL 模式差异和准确计数口径见支持矩阵第九、十节。
已重新核对原始需求及执行清单,44 个任务编号全部保留。P0-05 仍为 [~],没有把某个导入方向通过等同于完整备份恢复或生产放行。
2026-09-27:P0-05 自有触发器备份、权限及文档进度同步
修改前检查点 d7f6ac1;实现与正式测试 3f6d5b8 已提交推送。本批从 20:42 开始,最终双版本复测于 21:45 结束,中间包含非持续执行时间,不把墙钟间隔当成测试耗时。
[x]实库复现:自有备份遗漏触发器;无TRIGGER权限时对象被隐藏,旧实现仍报告成功并覆盖已有备份。[x]导出修复:保存原始触发器定义和定义者,按真实执行顺序导出;保留 SQL 模式、字符集和排序规则,先恢复表数据再创建触发器。[x]权限预检:覆盖全局、库级、表级、精确授权遮蔽、启用及嵌套角色、未启用角色、动态权限与部分撤销。无可证明权限时失败并保留旧备份;歧义通配组合仍保守失败,后续需完善。[x]正式验证:Scert 与官方客户端分别恢复四个触发器,比较元数据并实际执行;覆盖名称与执行顺序相反、审计副作用、Latin-1 正文、分隔符冲突和创建时不同数据库排序规则。[x]最终专项:Windows MySQL 5.7.44 / 8.0.45 分别通过 97 / 104 个叶子用例,0 失败、0 跳过;后端全量测试、vet、模块校验通过;Linux 仅交叉编译。前端未修改、未重测。[x]测试收尾:累计 51 个独立实例退出,记录的测试端口无监听,初始化口令文件为空;共享 MySQL 进程未动。测试数据、随机密钥、日志和二进制不提交。[x]文档进度同步:原始清单只更新状态和进度说明,不修改需求与验收标准;执行清单、基础规格、支持矩阵、历史开发清单、审查记录和生产运维说明同步指向本批证据。[ ]后续:例程、事件、视图、完整对象清单权限、其他 SQL 模式、复杂授权组合、定义者迁移、独立发行命令、Linux 实库、PostgreSQL、SQLite 及正式业务部署。
证据目录:artifacts/mysql-native-triggers-20260927/,最终结果为 mysql57-final.jsonl、mysql80-final.jsonl;详见支持矩阵第十一节。全部 44 项范围不变,P0-05 保持 [~],本批不作生产放行。
2026-09-27:P0-05 自有存储过程与函数备份
实现前检查点 db7d132、未完成实现保存点 c4051c9 已推送。本批在保存点上修复 5.7 Latin-1 注释乱码,接续触发器子任务,全部 44 项和原验收标准不变。
[x]在独立 MySQL 5.7 实例复现例程遗漏,以及权限不足时仍成功覆盖原备份;复现证据为artifacts/mysql-native-routines-20260927/mysql57-before.jsonl。[x]增加原始例程定义导出、同名替换、创建元数据与编码保留;复用触发器的存储对象读写逻辑,先恢复数据和例程,再创建触发器。[x]增加完整例程可见权限检查;5.7 检查mysql.proc完整读取权限,8.0 检查有效SHOW_ROUTINE或全局SELECT,拒绝把隐藏对象当作不存在。[x]修复 5.7 注释双重编码,保留 8.0 声明头处理;增加字符集往返检查和错误上下文,五种无效元数据均明确拒绝且不写回部分转换结果。[x]正式回归覆盖两种恢复入口、重复恢复、输入输出参数、Latin-1 名称/注释/正文、元数据一致性、角色和部分撤销。最终 Windows 5.7.44 / 8.0.45 全专项分别通过 110 / 121 个叶子用例,0 失败、0 跳过;对应含父项记录为 125 / 136。[x]后端全量回归、vet、模块校验和 Linux CLI 测试包交叉编译通过;常规回归有 32 个条件测试跳过,不替代实库证据。前端未修改、未重测。[x]专项目录累计 90 个独立实例退出、167 个记录端口无监听、90 份初始化口令文件为空,共享 MySQL 进程未动;测试产物均不提交。[x]支持矩阵第十二节、基础规格、原始清单进度说明、历史开发清单、审查记录和生产运维说明同步更新;最终证据为artifacts/mysql-native-routines-20260927/mysql57-verified.jsonl、mysql80-verified.jsonl。[ ]事件、视图、完整表清单权限、其他 SQL 模式及剩余数据库/平台/生产门禁继续整改。
2026-09-27:P0-05 自有事件备份与恢复安全
[x]原始事件定义、定义者、计划、时区、启停状态及创建会话属性导出;数据、例程、触发器和外键检查先于事件恢复。[x]全局、库级、角色、部分撤销和授权遮蔽的 EVENT 可见权限检查;无权限空库也明确拒绝。[x]恢复前检查 PROCESS 权限、工作线程及调度状态;产品不修改全局调度器、不终止线程、不自动扩权。维护窗口仍由管理员保证。[x]Latin-1 事件名称与注释编码、无效元数据、已到期事件及恢复警告保护;失败保留既有备份。[x]修正旧触发器测试精确授权漏 EVENT,以及官方存储对象测试只等第一条事件更新的竞态,不放宽产品校验或原有业务断言。[x]最终源码3625e8b:Windows MySQL 5.7.44 / 8.0.45 完整专项分别 139 / 155 个叶子用例通过,含父项记录为 159 / 175,0 失败、0 跳过;后端无缓存全量测试、vet、模块校验通过。[x]最终证据为artifacts/mysql-native-events-20260927/mysql57-commit-final.jsonl、mysql80-commit-final.jsonl;对应测试端口无监听,初始化口令文件均为空,三个共享 MySQL 进程未动。源码、正式 Go 测试和运维文档已提交推送,产物不提交。[x]支持矩阵第十三节及关联任务文档同步进度;Windows 隔离证据不替代 Linux 实库或生产放行,全部 44 项范围不变。[~]下一子任务:视图自有备份与恢复,先复现现状并核对依赖、定义者、字符集、权限与官方工具互操作。[ ]完整表清单、其他编码/SQL 模式、跨库和跨服务器定义者、独立发行 CLI、Linux 实库及其余三库/业务/生产门禁继续保留。
P0-05 视图、完整清单与提交复核(源码 777c716)
[x]原始视图定义、创建字符集及排序规则导出;仅对本库视图依赖排序,反向删除、正向创建,不创建占位表或删除同名基础表。[x]先证明库级或全局 SELECT,防止把权限过滤后的表/视图清单当成完整备份;逐视图检查有效 SHOW VIEW,覆盖角色、部分撤销及授权遮蔽。[x]原始官方嵌套 CHECK OPTION 夹具在官方客户端复现 1368;Scert 对连续且闭合的最终视图块按依赖排序,原文件 SHA256 不变,并独立验证成功恢复。[x]补充复杂查询、宽视图、失效视图、目标同名基础表、无效计划及会话上下文保护;不跨业务语句重排,不承诺任意 SQL 或全局 DDL 原子回滚。[x]修正视图、事件、触发器测试的 SELECT 前提;例程测试分开验证定义可见与完整清单可读,仍检查拒绝时原备份不变,并验证补足读取权限后成功导出。[x]原 15 个待提交文件均为正式实现或测试,另修正 3 个旧测试;分为d95ecfa、777c716提交并推送。没有删除文件,没有提交产物、密钥或数据库。[x]5.7 / 8.0 完整专项分别 176 / 202 个叶子用例通过,常规后端、vet、模块校验和 Linux 测试包交叉编译通过;证据、失败历史与收尾结果见支持矩阵第十四节。[x]本批同步原始清单、开发清单、审查记录、分级规格、支持矩阵及运维说明;上述事件段的剩余项为当时记录,当前视图和完整清单进展以本节为准。[~]下一子任务:SQLite 文件库的多连接/多实例并发、写锁等待与取消、事务回滚及重连后的会话配置;先核对现有实现,再复现实际缺口。[ ]MySQL 其他编码/SQL 模式、跨服务器定义者、并发 DDL/授权变化、独立发行 CLI、Linux 实库、PostgreSQL 当前复测和生产门禁。全部 44 项及 P0-05 总状态不变。
P0-05 SQLite 连接池、并发与锁(源码 af831ae)
本节保留上一批执行记录;当前恢复进展补充在下节及支持矩阵第十六节,不将历史待办误认为本批已完成。
[x]修改前检查点6cab85d已推送;正式回归先复现扩容、零空闲连接、连接替换和 DSN 参数四类忙等待丢失,保留失败日志。[x]每条物理连接入池前配置默认 5000 毫秒忙等待和 WAL;失败关闭连接,不依赖初始化时恰好选中的连接。[x]为带截止时间的执行、查询、预处理、事务启动及逐行读取缩短等待预算,结束后恢复;状态不确定时淘汰连接,不重放业务 SQL,不把执行后清理错误转成自动重试信号。[x]真实文件库验证读写隔离、读事务快照、双连接池 200 次并发写入、三子进程就绪后释放写锁并完成 150 次写入、事务回滚及关闭后重新打开。[x]活动 WAL 下的未提交/已提交两类快照内容及完整性验证通过;已有 CLI 备份恢复回归继续通过,不等同于独立发行命令或生产恢复验收。[x]Windows SQLite 3.49.1 专项与竞态检测各 42 个叶子用例通过,0 失败、0 跳过;26 个核心用例重复 10 次通过;后端全量、vet、模块校验和 Linux 测试包交叉编译通过,详见支持矩阵第十五节。[~]无截止时间的手动取消仍可能等待原生忙等待结束(本批约 5 秒);继续核查取消边界、完整业务升级恢复和真实服务重启,不将现状记录测试算作缺口已经修复。[ ]Linux 原生运行、独立发行 CLI、PostgreSQL 当前实库复测、MySQL 剩余项及双平台生产门禁;P0-05 和全部 44 项总范围不变。
P0-05 SQLite 异常退出及业务恢复(源码 6db5d7b)
本节为上一批记录,当前历史模式升级及独立 Windows 程序证据见下节;未完成项按当前证据区分,不覆盖历史结果。
[x]修改前检查点5e5abf2已推送;子进程提交 WAL 后不关闭数据库直接退出,复现恢复返回成功但数据仍为旧值,保留wal-before.jsonl。[x]服务维护锁内由 SQLite 合并日志并切换到 DELETE 模式,关闭连接后确认 WAL/SHM/回滚日志不存在;占用、孤立日志及非普通路径均拒绝恢复,不手动删除日志。[x]成功恢复和证书资产失败回滚均核对原有已提交 WAL 数据进入恢复前快照;不再依赖残留 WAL 偶然恢复原数据。[x]通过正式备份/恢复命令处理器验证当前全部业务表及模式、迁移记录、自增序列、资源关联、用户密码和分组、DNS 归属、加密凭据、真实证书/私钥与重复恢复。[x]SQLite 专项 55 个叶子用例、恢复专项 13 个用例连续 5 次竞态检测通过;后端全量 1368 条叶子通过记录,0 失败、43 项条件跳过,vet/模块校验及 Linux CLI 测试包交叉编译通过。[ ]带历史业务数据的跨版本升级、独立发行二进制命令、真实服务重启、Linux 原生运行、断电/磁盘故障、取消边界及其余数据库/平台与生产门禁;本批不调用外部 DNS、SSH 或邮件服务,全部 44 项范围不变。
P0-05 SQLite 历史模式升级及独立程序(源码 fd2810b)
[x]修改前检查点0e16d28已推送;模式 1、2、3 写入历史任务后均复现迁移 4 失败,保留upgrade-before.jsonl。[x]固定物理连接,在同一事务内重建任务表并记录版本;保留原始业务列、行号、索引、依赖视图和触发器,外键检查通过后提交,恢复连接原外键设置。[x]模式 1~9 的代表性数据升级及重复执行;外键开关、生成列、级联关联、依赖对象、版本记录失败、临时名称冲突和外键冲突后的回滚重试均通过。[x]干净提交构建的独立scert.exe实际执行历史模式 3 备份、正式应用入口升级、旧备份恢复后再升级,以及升级后备份恢复;核对完整表/模式、资源绑定、用户密码、加密凭据及证书。[x]SQLite 专项 71 个叶子用例,27 个升级/恢复用例连续 3 次竞态检测;后端全量、静态/模块检查和 Linux 测试包交叉编译通过,证据见支持矩阵第十七节。[ ]旧发行包产生的实际历史数据与配置升级、完整发行包安装、真实服务重启、Linux 原生执行、取消边界及其余数据库/平台和生产门禁。历史模式由现有迁移文件构造,不冒充旧发行二进制运行证据;全部 44 项范围不变。