|
|
|
@@ -0,0 +1,71 @@
|
|
|
|
|
# 生产事实源纠偏
|
|
|
|
|
|
|
|
|
|
## Goal
|
|
|
|
|
|
|
|
|
|
纠正当前事实源中已经被现场证据推翻或被更早已完成任务覆盖的状态,避免后续工作重复治理不存在的 404 问题、错误认为 CEO 本人报销仍受 `finance_mgr` 缺口阻断,或继续使用过期生产构建作为当前可信基线。
|
|
|
|
|
|
|
|
|
|
本任务只修正文档与已归档 Trellis 证据,不改产品代码、API、schema、生产配置或业务数据,也不重新部署应用。
|
|
|
|
|
|
|
|
|
|
## Scope
|
|
|
|
|
|
|
|
|
|
- 纠正归档登录任务 PRD/实施记录中的路由刷新和 CEO 报销当前态。
|
|
|
|
|
- 更新文档索引、事实源状态矩阵和产品口径中的当前生产构建与 CEO 兜底状态。
|
|
|
|
|
- 记录纯 HTTP 探针与真实浏览器导航的证据边界,并完成文档/治理门禁。
|
|
|
|
|
|
|
|
|
|
## Confirmed Facts
|
|
|
|
|
|
|
|
|
|
- 纯 HTTP 客户端以默认 `Accept: */*` 请求 `/login`、`/forgot-password` 时可得到 404,但这不代表浏览器刷新行为。
|
|
|
|
|
- 全新、禁用 Service Worker 的真实浏览器直接进入上述两个路由时均返回 200 且目标页面可见;已有 Service Worker 的浏览器首次进入和刷新同样为 200。用户本人刷新也未见 404。因此“用户刷新会看到 404”和“需要 history fallback 治理”均不成立。
|
|
|
|
|
- 已归档 `07-28-ceo-finance-fallback` 在代码、API、前端、种子和生产规则上支持 `finance|finance_mgr`,默认与生产目标均为 `finance`;生产恰好 3 条启用规则已原子回填,CEO 三档只读解析均为唯一 active 非本人 `finance`。
|
|
|
|
|
- 当前生产应用已部署并复核的产品构建为 `7b86ffb`;后续 `b32b5f2`、`45a1fa8` 是任务记录与归档提交,不是新的产品部署版本。
|
|
|
|
|
- `docs/文档索引.md`、`docs/文档事实源状态矩阵.md` 仍以 2026-07 的旧提交作为“当前可信基线”,`docs/产品口径.md` 仍残留“候选尚未部署、生产规则尚未回填”的过期句子。
|
|
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
|
|
### R1. 撤回错误的路由 404 结论
|
|
|
|
|
|
|
|
|
|
- 在 `07-28-all-account-login-readiness` 的归档 PRD/实施记录中删除“浏览器直接请求或刷新会出现 404”和“需要 history fallback 后续治理”的错误结论。
|
|
|
|
|
- 保留可复核的边界:默认 `Accept: */*` 的纯 HTTP 探针不是浏览器导航证据;浏览器验证必须以 `Accept: text/html` 或真实浏览器页面结果为准。
|
|
|
|
|
- 不把本次纠偏描述为生产修复、代码修复或重新部署;生产用户路径原本即正常。
|
|
|
|
|
|
|
|
|
|
### R2. 纠正 CEO 本人报销兜底状态
|
|
|
|
|
|
|
|
|
|
- 将同一归档任务中“当前实现只支持 `finance_mgr`”“CEO 本人报销保持阻断”的当前态表述改为已完成事实:代码支持 `finance|finance_mgr`、生产三档规则以 `finance` 为兜底、CEO 三档均解析为唯一 active 非本人 `finance`。
|
|
|
|
|
- 保留失败关闭边界:无 active 非本人 `finance`、CEO 本人同时持有 fallback 角色或规则漂移时仍应阻断;不得扩张为允许自审或管理员代批。
|
|
|
|
|
- 不改写 `docs/trialrun/人工试运行报告.md` 中明确标注为 2026-05 历史阶段的旧 `finance_mgr` 方案;其后的 2026-07 状态增量已负责纠偏。
|
|
|
|
|
|
|
|
|
|
### R3. 更新当前可信生产基线
|
|
|
|
|
|
|
|
|
|
- 将 `docs/文档索引.md` 和 `docs/文档事实源状态矩阵.md` 的当前可信基线日期更新为 2026-08-23,并明确产品部署构建为 `7b86ffb`。
|
|
|
|
|
- 记录该构建已通过 `/ready`、migration pending=none、runtime/external-deps smoke、公网 bundle、真实浏览器登录/忘记密码路径和备份合同 refresh。
|
|
|
|
|
- 明确仓库后续文档/归档提交不等于生产应用重新部署,避免未来错误要求公网构建匹配文档 HEAD。
|
|
|
|
|
- 将 `docs/产品口径.md` 的 CEO 兜底状态改为已部署、已回填、未创建真实 CEO 报销;不把只读解析扩大为真人 CEO 报销验收。
|
|
|
|
|
|
|
|
|
|
### R4. 变更边界与验证
|
|
|
|
|
|
|
|
|
|
- 只允许修改当前 task、上述归档任务和三个既有事实源;不新增文档,不修改代码、脚本、依赖、migration、部署文件或生产状态。
|
|
|
|
|
- 用精确搜索确认当前事实源不再把上述两个错误状态描述为当前事实,同时允许历史阶段材料保留明确的历史快照。
|
|
|
|
|
- 运行 task validate、Trellis governance、process contract、docs registry、敏感扫描和 `git diff --check`。
|
|
|
|
|
|
|
|
|
|
## Acceptance Criteria
|
|
|
|
|
|
|
|
|
|
- [x] AC1:当前事实源不再声称浏览器刷新 `/login` 或 `/forgot-password` 会出现 404,也不再提出无依据的 history fallback 修复任务。
|
|
|
|
|
- [x] AC2:归档登录任务中的 CEO 报销状态与 `07-28-ceo-finance-fallback`、当前代码和生产回填事实一致,且继续保留无持有人、自身持有兜底角色和规则漂移时失败关闭。
|
|
|
|
|
- [x] AC3:文档索引与状态矩阵明确当前生产产品构建为 `7b86ffb`,并区分产品部署版本与后续文档/归档提交。
|
|
|
|
|
- [x] AC4:产品口径不再写“候选尚未部署、生产尚未回填”,也不虚构真实 CEO 报销已经发生。
|
|
|
|
|
- [x] AC5:变更文件严格限制在当前 task、归档登录任务、文档索引、状态矩阵和产品口径;产品代码、schema、部署配置和生产均零变更。
|
|
|
|
|
- [x] AC6:任务、治理、流程、文档、敏感和差异门禁通过;既有 22 个未登记文档 warning 不因本任务增加。
|
|
|
|
|
|
|
|
|
|
## Out of Scope
|
|
|
|
|
|
|
|
|
|
- 不修复或调整 Caddy、SPA、Service Worker、认证页面或任何前端路由。
|
|
|
|
|
- 不重新执行 CEO 报销规则生产回填,不修改角色、审批规则或创建测试/真实报销。
|
|
|
|
|
- 不启动隔离备份恢复演练;该工作在本任务完成后另建独立 Trellis task 并再次批准。
|
|
|
|
|
- 不批量重写历史 Issue CSV、历史试运行快照或所有旧提交号,只纠正仍被当作当前事实的内容。
|
|
|
|
|
|
|
|
|
|
## Test Plan
|
|
|
|
|
|
|
|
|
|
- 精确复核归档登录任务、CEO 财务兜底归档任务、当前工作流代码和三个事实源之间的一致性。
|
|
|
|
|
- 搜索 `404`、`history fallback`、`finance_mgr`、`尚未部署`、旧当前基线提交和 `7b86ffb`,逐条区分当前事实与历史快照。
|
|
|
|
|
- 运行 `python3 ./.trellis/scripts/task.py validate 08-23-production-fact-source-corrections`。
|
|
|
|
|
- 运行 `node scripts/qa/check-trellis-governance.mjs`、`node scripts/qa/check-process-contract.mjs --baseline --json`、`node scripts/qa/audit-docs.mjs --check-registry` 和 `git diff --check`。
|