文件
hyb-oa/.trellis/tasks/08-11-internal-oa-usage-census-and-simplification/research/read-only-review.md
T

4.5 KiB

生产使用度普查只读 review

结论

PASS_WITH_DECLARED_LIMITS。生产查询、证据脱敏和四类裁决均在批准边界内;声明的两项测量限制不改变“财务闭环是唯一重点产品候选、四个主导航入口可隐藏、五类能力进入退役前调研”的结论。

1. 生产身份与执行次数

  • identity bootstrap 先证明唯一运行环境和 origin/runtime agreement。
  • 既有 deploy wrapper 在 provenance 阶段因本地文档 HEAD 领先运行候选而 fail-closed;未进入 migration 或普查。
  • task-scoped PRE 改为精确比较运行容器 SHA 与 origin/main,并断言其后 client/src、server/src、Compose 产品差异为 0;没有放宽或修改正式部署工具。
  • migration pending=none,rollback window OPEN、terminatedRows=0。
  • 第一次 query runner 的 node - 入口没有调用 run();本地复现证明 require.main === module 为 false,输出无 JSON、普查事务未开始。修正后用相同 stdin 入口在本地通过,再进行唯一有效生产执行。
  • 最终证据为 preflightToolInterceptions=1、preQueryInterceptions=1、effectiveQueryExecutions=1、zeroRetry=true。不存在未知状态下盲目重跑。

2. 只读与写入边界

  • 查询器在第一批数据库语句中执行 BEGIN TRANSACTION READ ONLY、statement timeout、lock timeout,并断言 transaction_read_only=on。
  • module metrics、认证聚合、workspace setting 和 feature flag evaluator 共用同一 pg client/事务;adapter 只实现 findUnique/findMany/findFirst 三种 SELECT。
  • 静态合同拒绝 INSERT/UPDATE/DELETE/MERGE/DDL/CALL/COPY/GRANT/REVOKE 和 FOR UPDATE。
  • 生产未部署查询器;文件通过 stdin 进入现有 server 容器。没有登录、配置、schema、业务数据或审计写入。
  • 20/20 模块 queryStatus=PASS;record 分桶与 activity 总数、audit 分桶与 audit 总数逐模块/窗口自洽。

3. 隐私与归因

  • 输出字段为固定 30 项模块聚合,另有安全认证聚合;不存在 ID、姓名、员工号、邮箱、手机号、金额、正文、附件、IP/user agent、audit extra 或 payload。
  • smoke、system 和 unknown 没有并入真人计数;生产结果清楚显示 system/unknown 活动多于真人活动,证明去污染改变了产品判断。
  • humanEvents 表示“由真人 actor 拥有/创建的记录证据”,不是精确点击或 mutation 次数;可变记录的系统更新可能刷新 activityAt。矩阵因此同时引用独立 audit 聚合,并使用“真人记录证据”措辞,没有把它写成操作次数。
  • 本次生产版本的邮箱 smoke 判据对无分隔符 oasmoke… 是 helper 的保守超集。它只可能降低真人计数,不会把 smoke 当真人;财务闭环仍有非 smoke 真人证据,零记录模块不受影响。该限制已写入 snapshot 和矩阵。

4. 分类抽查

  • 真人样本:报销/票据 2 个真人 actor、5 条真人记录证据;审批和付款分别有真人记录与 audit 交叉验证,合并为一条财务闭环。
  • smoke 样本:报销/票据近 30 天 4 条 smoke 记录、8 条 smoke audit;未计入真人使用。
  • system 样本:工作台/通知近 30 天 18 条 system,真人 0;未因记录量高判为活跃页面。
  • unknown 样本:系统配置近 30 天 14 条 unknown;矩阵只将其视为配置历史,不推断管理员高频使用。
  • 零行边界:合同/采购/资产因低频高失败成本保持冻结;周报/普通待办/公告/项目因主导航暴露、零证据和便宜替代进入隐藏入口;没有“零行自动退役”。
  • flag 边界:辅助 invoice verification、流程定义和预算 precheck 没有冒充整个业务模块开关;有效主模块 exposure 已在本地解释层纠正,无需重查生产。

5. 路线图复核

  • 重点产品候选只有一条:报销 → 审批 → 付款/AP。
  • 未来 30 天最多从下一笔真实业务的真人反馈中启动一个小任务;无反馈则不写产品代码。
  • 四入口导航减法是独立、可逆且需生产批准的后续 task;本任务没有提前执行。
  • 预算、差旅、薪资、绩效、ERP 仅为候选退役,仍需负责人、数据保留、依赖和回滚审查。
  • 低优先部署/repair 工具债不占用近期产品预算,触达时再处理。

6. Reviewer 判定

  • AC1–AC7:证据满足。
  • AC8 的只读 review 部分:满足。
  • 稳定产品组合结论是否写入长期事实源:等待用户接受本矩阵;在此之前保持 task 证据,不抢先改 docs/spec。