From 7ad022ce4ba59de4ae18483e6f8464a5056b09d3 Mon Sep 17 00:00:00 2001 From: shunli Date: Fri, 25 Sep 2026 20:52:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E9=AA=8C=E6=94=B6=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=B9=B6=E5=BD=92=E6=A1=A3=E9=9D=9E=E5=8F=82=E4=B8=8E?= =?UTF-8?q?=E4=BA=BA=E6=8A=A5=E9=94=80=E5=8F=AA=E8=AF=BB=E6=8A=95=E5=BD=B1?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=20[08-28-reimbursement-nonparticipant-readon?= =?UTF-8?q?ly-projection]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 发现并修正文档滞后:业务提交 e8d6766 已确认合入并随后续发布上线(是当前 生产 b1d25d3c 的祖先提交),但 PRD 的 9 条 AC 一直保持未勾选、task.json 备注仍写"未推送、未部署"。implement.md 的服务端/前端验证清单与独立只读 复核记录逐条对应 PRD 各项,现据实补勾 AC 并更正 notes,再归档。 Co-Authored-By: Claude Sonnet 5 --- .../check.jsonl | 0 .../design.md | 0 .../implement.jsonl | 0 .../implement.md | 0 .../prd.md | 20 ++++++++++--------- .../task.json | 8 ++++---- 6 files changed, 15 insertions(+), 13 deletions(-) rename .trellis/tasks/{ => archive/2026-09}/08-28-reimbursement-nonparticipant-readonly-projection/check.jsonl (100%) rename .trellis/tasks/{ => archive/2026-09}/08-28-reimbursement-nonparticipant-readonly-projection/design.md (100%) rename .trellis/tasks/{ => archive/2026-09}/08-28-reimbursement-nonparticipant-readonly-projection/implement.jsonl (100%) rename .trellis/tasks/{ => archive/2026-09}/08-28-reimbursement-nonparticipant-readonly-projection/implement.md (100%) rename .trellis/tasks/{ => archive/2026-09}/08-28-reimbursement-nonparticipant-readonly-projection/prd.md (92%) rename .trellis/tasks/{ => archive/2026-09}/08-28-reimbursement-nonparticipant-readonly-projection/task.json (83%) diff --git a/.trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/check.jsonl b/.trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/check.jsonl similarity index 100% rename from .trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/check.jsonl rename to .trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/check.jsonl diff --git a/.trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/design.md b/.trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/design.md similarity index 100% rename from .trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/design.md rename to .trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/design.md diff --git a/.trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/implement.jsonl b/.trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/implement.jsonl similarity index 100% rename from .trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/implement.jsonl rename to .trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/implement.jsonl diff --git a/.trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/implement.md b/.trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/implement.md similarity index 100% rename from .trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/implement.md rename to .trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/implement.md diff --git a/.trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/prd.md b/.trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/prd.md similarity index 92% rename from .trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/prd.md rename to .trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/prd.md index d2af56a7..ff15d919 100644 --- a/.trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/prd.md +++ b/.trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/prd.md @@ -63,15 +63,17 @@ ## Acceptance Criteria -- [ ] 非参与管理员或财务查看他人 draft/rejected 报销时,PC 和移动端不存在明细、项目、票据、附件、提交、删除、撤回和催办等报销人维护动作。 -- [ ] 同一非参与人仍能查看报销概要、明细事实、处理进度、材料原件和合并预览;reviewing 审批/财务职责入口仍在原工作流页面正常使用。 -- [ ] 非参与人看到“只读查看”上下文;未关联票据显示“关联明细:未关联”,bound 状态显示“已关联”,页面不存在“自动生成或匹配明细”和“草稿或驳回状态可移除”。 -- [ ] 非参与人直接调用报销头修改/删除、附件增删、明细增改删、提交、项目关联、发票 bind/unbind 均返回 `403 PERM_001`,且对应数据、文件、审计、workflow 和通知零副作用。 -- [ ] 普通非参与人调用 precheck 返回 `403 PERM_001` 且 precheck 服务零调用;owner/submitter 与 `expense.view_all` 查看者保持成功读取基线。 -- [ ] owner/submitter 在 approved/paid 等非编辑状态调用 `link-project` 返回 409 且项目归属不变;draft/rejected 且具备 `expense.edit_own` 时保持成功基线。 -- [ ] owner/submitter 在既有允许状态仍可维护、提交、撤回和催办自己的报销;现有状态校验、材料查看、打印、财务付款、workflow 审批和差旅票据分支不变。 -- [ ] 无 schema、迁移、权限码或角色定义变更;前后端聚焦测试、前端 typecheck/build、相关 Playwright、Trellis 治理、敏感检查和 `git diff --check` 通过。 -- [ ] 只读权限复核结论为 PASS 后才形成新工作提交;部署子任务随后重新冻结包含 Task A 与本任务的候选 SHA,原 `174cb7a` 不再作为最终部署基线。 +2026-09-25 核对:本节 9 条勾选此前未随实施同步更新,任务文档一直显示未完成;业务提交 `e8d6766` 已确认合入并随后续发布上线(是当前生产 `b1d25d3c` 的祖先提交),implement.md 的服务端/前端验证清单与独立只读复核记录逐条对应下列各项,现据实补勾。 + +- [x] 非参与管理员或财务查看他人 draft/rejected 报销时,PC 和移动端不存在明细、项目、票据、附件、提交、删除、撤回和催办等报销人维护动作。 +- [x] 同一非参与人仍能查看报销概要、明细事实、处理进度、材料原件和合并预览;reviewing 审批/财务职责入口仍在原工作流页面正常使用。 +- [x] 非参与人看到“只读查看”上下文;未关联票据显示“关联明细:未关联”,bound 状态显示“已关联”,页面不存在“自动生成或匹配明细”和“草稿或驳回状态可移除”。 +- [x] 非参与人直接调用报销头修改/删除、附件增删、明细增改删、提交、项目关联、发票 bind/unbind 均返回 `403 PERM_001`,且对应数据、文件、审计、workflow 和通知零副作用。 +- [x] 普通非参与人调用 precheck 返回 `403 PERM_001` 且 precheck 服务零调用;owner/submitter 与 `expense.view_all` 查看者保持成功读取基线。 +- [x] owner/submitter 在 approved/paid 等非编辑状态调用 `link-project` 返回 409 且项目归属不变;draft/rejected 且具备 `expense.edit_own` 时保持成功基线。 +- [x] owner/submitter 在既有允许状态仍可维护、提交、撤回和催办自己的报销;现有状态校验、材料查看、打印、财务付款、workflow 审批和差旅票据分支不变。 +- [x] 无 schema、迁移、权限码或角色定义变更;前后端聚焦测试、前端 typecheck/build、相关 Playwright、Trellis 治理、敏感检查和 `git diff --check` 通过。 +- [x] 只读权限复核结论为 PASS 后才形成新工作提交;部署子任务随后重新冻结包含 Task A 与本任务的候选 SHA,原 `174cb7a` 不再作为最终部署基线。 ## Out of Scope diff --git a/.trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/task.json b/.trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/task.json similarity index 83% rename from .trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/task.json rename to .trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/task.json index 70e11fd1..00704179 100644 --- a/.trellis/tasks/08-28-reimbursement-nonparticipant-readonly-projection/task.json +++ b/.trellis/tasks/archive/2026-09/08-28-reimbursement-nonparticipant-readonly-projection/task.json @@ -3,7 +3,7 @@ "name": "reimbursement-nonparticipant-readonly-projection", "title": "非参与人报销详情只读投影修复", "description": "收紧非 owner/submitter 查看报销详情时的 PC、移动端操作投影与服务端变更资格,并改为面向审批/浏览者的只读票据文案。", - "status": "in_progress", + "status": "completed", "dev_type": null, "scope": "PC/mobile reimbursement read-only projection; reimbursement and invoice-pool object authorization; role-aware invoice copy", "package": null, @@ -11,7 +11,7 @@ "creator": "shunli", "assignee": "shunli", "createdAt": "2026-08-28", - "completedAt": null, + "completedAt": "2026-09-25", "branch": null, "base_branch": "main", "worktree_path": null, @@ -27,6 +27,6 @@ "server/src/routes/reimbursements.js", "server/src/routes/invoicePool.js" ], - "notes": "实施与独立只读权限复核 PASS,业务提交为 e8d6766;同时补齐 precheck 对象级读授权。财务/审批详情中的行内费用标准提示当前不主动请求 precheck,由 Task B 的 B3 一页式审批恢复,现有 budgetHint、riskFlags 和审批页 standardViolations 快照不受影响。未推送、未部署、未归档,部署仍须单独批准。", + "notes": "实施与独立只读权限复核 PASS,业务提交为 e8d6766;同时补齐 precheck 对象级读授权。财务/审批详情中的行内费用标准提示当前不主动请求 precheck,由 Task B 的 B3 一页式审批恢复,现有 budgetHint、riskFlags 和审批页 standardViolations 快照不受影响。2026-09-25 复核:e8d6766 已确认合入并随后续发布上线(当前生产 b1d25d3c 的祖先提交),此前\"未推送、未部署\"的记录已过期;PRD 9 条 AC 据实补勾,予以归档。", "meta": {} -} +} \ No newline at end of file