Files
Agent-System/.doc/audit/2026-09-23-historical-issue-records.md
T

4.2 KiB
Raw Blame History

历史问题补录:可选职责与正文哈希

补录日期:2026-09-23;owner:Codex;登记任务:issue-learning-2026-09-23。这是两个问题的登记主记录,原审计、修复任务及验收报告继续作为事实证据;没有重新运行产品测试或读取业务数据。evidence_basis=historical,当前运行状态未复测,源码复核基线为 2fdb6e548e3784771f27e6a9e79b9c364f76c566。

nullable-duty

  • issue_id:ISSUE-20260923-nullable-duty;issue_state:resolved;severity:high;recurrence_count:0(指登记后重开次数,非历史发生总数)。
  • 发现/修复日期:2026-09-17;原处理 owner:Cursor;补录 owner:Codex;原任务:fix/docgov-optional-duty-null-fk。
  • 现象与已证实根因:原审计。可选 reviewer 缺席合法返回 0,但创建路径直接写入可空 FK;heal 路径已有空值映射,创建路径漏改。底层 FK 又被错误分型掩盖。
  • 同类范围:可选职责的创建/heal 写入边界。历史报告验证 reviewer/approver 为 NULL;不能由此推断所有 FK、全职责模式和全部授权边界均已验证。
  • 修复思路:保留可选职责语义,在 SQL 边界将缺席值映射 NULL,并改善错误分型;通过强制配置 reviewer 绕过错误会改变业务契约。未发现其他尝试的实测记录,不虚构失败实验。
  • 修复经过/提交:原任务,历史合并 e488d10;本次只核对原文记录,不把短 SHA 当当前制品身份。
  • 验证与关闭范围:原报告 记录单测、PG 集成、真实任务 API 启动与 DB NULL;证明账本创建通过,不证明真实 UI 或 PI 全流程完成。历史 deployment=passed(dev,来源为原报告),当前运行未复测。
  • 本次复核:当前源码 internal/docgov/engine.go 创建路径仍调用 nullIfZero;这是源码检查,未重跑 PG。
  • 经验:LESSON-20260923-nullable-duty。后续触发:职责模型或任一持久化入口变化时复核,异常复发重开。独立的 flushSync 警告不在本条关闭范围。

content-hash

  • issue_id:ISSUE-20260923-content-hash;issue_state:resolved;severity:critical;recurrence_count:0(登记后)。
  • 发现/修复日期:2026-09-14;原处理:Cursor 修复、Antigravity UI 验收;补录 owner:Codex。
  • 现象与因果链:原审计。文件存在却被报 404;规范化去掉有硬换行语义的双空格,bootstrap 只改账本哈希未同步文件;并发 hydration 与无效轮询更新放大故障。
  • 同类范围:旧文档 bootstrap、规范化、账本/文件投影、错误映射与刷新竞态。历史扫描范围见原审计,不扩大为所有数据无问题。
  • 修复思路/选择:整改方案。保持文本语义、原子投影和结构化错误;历史原文件与旧 head 先保全再显式 migration_repair。静默覆盖原文件会丢失语义,不能用于“对齐哈希”。这不是本轮数据操作授权。
  • 修复经过:原审计关闭结果 与 最终报告;后续水合/缓存修复合入 d0e8f60、36e4bc3。报告保留早期失败及无效运行,只有 clean-run3 / full-chain-final 属最终有效证据。
  • 验证与关闭范围:原报告记录旧项目真实页面、全链路主阶段和重启恢复 PASS;历史 deployment=passed(dev)。不据此宣告当前 production_ready 或当前制品无回归。
  • 本次复核:internal/docrevision/canonicalize.go 已委托 doccontent;canonicalize_golden_test.go 包含硬换行和封装一致性测试。本次未执行这些测试。
  • 经验:LESSON-20260923-content-hash。后续触发:canonicalizer、bootstrap、投影或水合修改时复核;复发追加时间线并重开。