文件
hyb-oa/.trellis/tasks/archive/2026-08/08-11-internal-oa-usage-census-and-simplification/implement.md
T

77 行
5.3 KiB
Markdown
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 内部 OA 使用度普查与减法路线图:执行计划
## 0. 启动门禁
- [x] 用户已审查并明确批准本版 `prd.md`、`design.md` 和 `implement.md`。
- [x] 批准后运行 `task.py start`;在此之前未查询生产。
- [x] 重新确认工作区只有当前 task 规划改动,不夹带产品、部署或历史任务变更。
- [x] 读取 `project-governance.md`、当前 backend spec、生产运维事实源和 07-30 组合盘点。
## 1. 建立模块 allowlist
- [x] `research/module-catalog.md` 逐项列出表、时间字段、actor/审计信号、导航、feature flag 和历史建议。
- [x] 仅纳入用户可见业务、低频必要后台和明确退役候选;session/challenge、迁移、投递 item 等并入所属模块或系统活动。
- [x] 对照 `schema.prisma` 验证每个表/字段真实存在,对照 workspace/flag registry 验证模块键和开关键。
- [x] 固定 smoke-like 规则和 system action allowlist;未知来源进入 `unknown`。
## 2. 实现 task-scoped 只读查询合同
- [x] 在当前 task 下新增审阅用查询器和 runner,未修改 `client/src`、`server/src`、部署配置或 migration。
- [x] 查询显式 `BEGIN TRANSACTION READ ONLY`,设置 statement/lock timeout 并断言 `transaction_read_only=on`。
- [x] 所有表和列来自静态 allowlist;无动态 schema 扫描、DML/DDL、锁行、临时表和存储过程。
- [x] 只返回模块级聚合字段;敏感原始字段均不出事务。
- [x] 输出包含 `queryStatus`,合同错误统一 `QUERY_FAILED`,不会补成 0。
## 3. 本地验证
- [x] 合同测试静态拒绝写 SQL/锁行,并验证固定 module/字段白名单。
- [x] 本地真实 schema 的 read-only 执行验证 20 个模块、30 个输出字段、空表与时间聚合。
- [x] synthetic fixture 覆盖 smoke、真人、system 和 unknown 四分桶。
- [x] 模块数/字段合同错误 fail-closed;不存在“缺失当零”的结果路径。
- [x] 敏感字段白名单与 `check-sensitive-content` 通过。
## 4. 生产只读执行(需启动批准)
- [x] PRE 复用 identity bootstrap,确认唯一 trialrun;运行 SHA 精确等于 `origin/main`、产品差异 0、migration pending=none、rollback window OPEN/0。
- [x] workspace setting 与有效 feature flag 由生产运行代码在同一 read-only 事务内计算。
- [x] 查询器通过 stdin 送入现有 server 容器;未复制/落盘、未重建镜像、未部署。
- [x] 唯一有效执行严格一次、零 retry。一次 stdin 入口拦截发生在 `run()` 前,证明普查事务执行数为 0 后才修正;最终 `effectiveQueryExecutions=1`。
- [x] 脱敏快照保存为 `research/production-usage-snapshot.json`;不保存个人/业务明细。
- [x] POST 证据由同一事务的 `transactionReadOnly=true`、source build match 和全模块 `queryStatus=PASS` 构成;本任务无并发归因。
## 5. 分析与路线图
- [x] `research/portfolio-decision-matrix.md` 合并生产快照与 07-30 历史建议。
- [x] 先区分真人/smoke/system/unknown,再判断真实人工活跃度;未按总行数或审计总量排序。
- [x] 输出四类矩阵,并逐项说明理由和触发条件。
- [x] 结论收敛为“整体采用度极低”;A/B 采用模式明确前冻结产品功能开发,财务闭环不再被预设为下一项开发。
- [x] 对仓库外业务事实只列负责人确认项,不替业务方回答。
- [x] 显隐、退役或产品优化均为独立后续 task 候选,本任务未实施。
## 6. 只读 review
- [x] Codex inline 模式由主会话执行只读 reviewer;review 阶段未修改产品代码或生产状态,结论记录在 `research/read-only-review.md`。
- [x] reviewer 复核生产身份、只读事务、严格一次、输出白名单和失败处理。
- [x] reviewer 抽查真人、smoke、system 和 unknown 各一项归因。
- [x] reviewer 复核零行/flag off/自动审计没有被机械用于隐藏或退役。
- [x] reviewer 复核原 30 天路线图没有扩建零使用模块;用户复核后进一步收紧为 A/B 定位决策门。
## 7. 验证与收口
- [x] `python3 ./.trellis/scripts/task.py validate 08-11-internal-oa-usage-census-and-simplification`
- [x] `node scripts/qa/check-process-contract.mjs --baseline --json`
- [x] `node scripts/qa/audit-docs.mjs --check-registry`(0 error;仓库既有 22 个未登记 docs warning)
- [x] `node scripts/qa/check-trellis-governance.mjs`
- [x] 项目敏感内容扫描 findingCount=0,`git diff --check` 与 task 文件尾随空白检查通过。
- [x] 用户已接受分类矩阵;已将“整体采用度极低”、A/B 采用模式决策门和共同导航减法方向更新到现有事实源与治理 spec,未另建平行路线图文档或导航 task。
- [x] 已使用中文 commit message 并引用 `08-11-internal-oa-usage-census-and-simplification`;本步交由 Trellis 归档 task,不自动推送。
## 风险点与停止条件
- 生产身份或运行 SHA 不清楚:停止。
- 查询不是只读、SQL 合同超出 allowlist:停止并回滚事务。
- 输出包含敏感明细:销毁现场输出,修正合同并重新审查;不得降低扫描器。
- 第一次执行状态不确定:不连续重跑。
- 发现真实认证、权限、财务或数据缺陷:只记录并停下,另建相应任务。
- 分类需要业务负责人确认:标记 `保持冻结/待确认`,不代替决定。