文件
hyb-oa/.trellis/tasks/07-16-system-multidimensional-audit/prd.md
T

18 KiB
原始文件 Blame 文件历史

多维系统审查与问题分级

Goal

以 2026-07-16 当前本地 main 为审查对象,从业务功能、页面体验、视觉与交互、权限与状态机、数据与安全、测试与性能、运维与文档等多个角度检查已经完成的系统,形成可复现、可去重、可排序的 P0/P1/P2 finding 和后续治理路线,而不是在审查过程中边看边改。

Scope

  • 审查当前本地前端、后端、数据模型、自动化、部署/运行脚本和现行文档事实源。
  • 覆盖功能与业务闭环、权限/状态机/数据、页面/设计/跨端、安全/隐私/依赖、测试/性能/可靠性、运维/交付/文档。
  • 只运行本地、无凭据、无业务写入的静态检查、构建、单测、mock E2E 和浏览器复核。
  • 产出证据化 finding、风险地图和建议修复波次;不在本任务实施业务修复。

What I Already Know

  • 遗留任务和运行手册已经完成收口;当前工作树在审查 task 创建前干净。
  • 最后有证据的公网部署来源为 df26922;当前本地 main 包含后续修复与收口,但尚未 push、部署或完成公网复检。本任务只审查本地基线,不能代表当前公网状态。
  • 技术栈为 React + TypeScript + Vite + Tailwind 前端,以及 Fastify + Prisma + PostgreSQL 后端。
  • 当前仓库约有 75 个前端页面文件、60 个前端组件文件、76 个路由声明、68 个后端 route 文件、63 个 service 文件、117 个 Prisma model。
  • 自动化资产约有 63 个 Playwright spec、153 个后端测试文件和 50 个 QA 脚本;前端源码目录没有独立 unit spec,页面行为主要由 E2E 覆盖。
  • 页面操作区任务已登记 5 类既有 finding:付款/合同/票据权限显隐、资产旧测试交互、标题动作合同与项目/资产视觉覆盖不足。本轮应复核和去重,不重复制造同一问题。
  • ui-ux-pro-max 对企业后台给出的高价值检查项包括键盘可达、可见焦点、表格移动适配、表单反馈、标题层级、移动端横向滚动、固定导航遮挡和响应式断点;其生成的红/金活泼视觉建议与当前成熟 OA 基线不匹配,不作为换肤或重品牌依据。
  • 用户已经确认:先完成收口,再独立从功能、页面、设计等多个角度审查系统并查看问题。

Confirmed Constraints

  • 用户于 2026-07-16 选择方案 1:审查采用“先广度扫描和风险分级,再对高风险链路深挖”的方式,避免只看页面或只跑测试。
  • 用户于 2026-07-16 已最终批准本 PRD 与 design.md,可以启动本地只读审查;外部动作仍未授权。
  • 默认只使用本地、mock、静态和无凭据验证;不连接生产数据库,不运行 live spec,不执行真实 OCR、企微写入、付款、部署或公网配置动作。
  • 审查输出写入当前 Trellis task 的 research/ 和 PRD,不新建重复的业务手册或泛化审计文档。
  • finding 只有在有代码位置、命令结果、截图或稳定复现步骤时才标为已确认;需要公网、真机或真实角色才能判断的事项单列为 EXTERNAL_GATED,不虚报 PASS/FAIL。

Open Questions

  • 无。

Requirements (Evolving)

1. 功能与业务闭环

  • 按实际小团队使用路径审查登录/身份、工作台、报销与 PDF OCR、审批、采购、合同、项目、资产、票据、付款批次/AP/代账交接、人员/考勤/企微边界和系统管理。
  • 对每个域确认入口、创建/编辑/提交、审批/复核、异常/撤回、附件/证据、导出/归档、权限与审计是否闭环。
  • 区分“代码存在”“自动化通过”“本地可用”“公网已部署”“真实业务已验证”,不得互相替代。

2. 权限、状态机与数据

  • 对照路由显隐、前端动作显隐和后端权限校验,检查只读角色、跨人员数据、管理能力和高敏附件边界。
  • 抽查核心状态机的合法迁移、幂等、并发、失败回滚、撤回/归档和审计记录。
  • 检查 Prisma schema、迁移、route/service/前端类型之间的字段和枚举一致性;不执行数据库 reset 或生产 drift 修复。

3. 页面、信息架构与设计

  • 建立 PC 页面清单、移动页面清单和企微入口映射,检查菜单、路由、标题、面包屑、列表/详情/编辑结构及空/错/加载/无权限状态。
  • 检查视觉层级、间距、密度、颜色/对比度、图标、表格、表单、弹窗、危险操作、反馈、焦点与键盘可达性。
  • 检查 375、768、1024、1440 等代表性视口,并按产品规则补充必要的小屏和企业微信 UA;不以普通浏览器 UA 代替真机结论。
  • 设计审查尊重既有品牌与组件体系,不把外部推荐的调色板或字体直接当作改版结论。

4. 跨端和外部边界

  • 检查 PC、移动、企业微信 deeplink/通知/只读镜像之间的功能归属与信息一致性。
  • 对 OA 主办、企微主办、OA 镜像、应急接管和高敏附件归属进行抽查,避免入口存在但业务责任不清。
  • 需要真实企业微信、真机、live OCR 或公网来源确认的 finding 只记录准入条件和证据缺口。

5. 安全、依赖与隐私

  • 静态检查认证、授权、上传/下载、导出、日志、错误响应、敏感内容、Secret/env、依赖风险和外部集成 fail-closed 边界。
  • 不在报告中写真实票据、合同正文、完整账号、银行资料、token、Secret、完整本地路径或原始 payload。

6. 测试、性能与可靠性

  • 评估后端测试、前端 E2E、视觉测试、权限测试和 QA runner 对真实核心路径的覆盖与重复/陈旧/脆弱情况。
  • 检查构建体积、懒加载、列表/搜索/表格、重复请求、长任务、轮询、后台 job、失败重试、超时和可观测性风险;先测量再给性能建议。
  • 环境性失败、测试缺陷和产品缺陷分开归类。

7. 运维、交付与文档

  • 检查部署来源、环境合同、迁移/回滚、readiness、备份恢复准入、试运行、告警、巡检、操作手册和培训材料是否一致。
  • 不把历史 issues/*.csv 当作当前执行合同,不把旧试运行或旧公网证据当作当前 PASS。

8. Finding 合同

  • 每条 finding 至少包含:ID、维度、严重级别、置信度、状态、证据、复现、影响、建议、修复边界、是否需要用户决策、是否已有 task。
  • P0:存在现实的数据泄露/丢失、越权、高风险资金或系统不可用风险,或核心业务无法继续且没有可接受绕行。
  • P1:核心业务链路、广泛角色权限、关键数据一致性或主要跨端体验显著受损,但存在临时绕行或影响范围可控。
  • P2:局部一致性、可用性、维护性、覆盖率、性能观察项或文档问题,不阻断核心业务。
  • 状态使用 CONFIRMED、LIKELY、EXTERNAL_GATED、DUPLICATE、NOT_AN_ISSUE,避免把证据不足的问题强行定级。

Initial Acceptance Criteria(Superseded)

以下清单保留原始全维审查合同,用于说明发现阶段的覆盖意图。2026-07-17 起本任务按后文“风险收敛收口”验收,不据此声称已经完成穷尽式全仓审计。

  • 固定本地审查 commit、环境边界、命令和生成物清理规则。
  • 建立功能域 × 角色 × 页面/接口 × 证据的审查矩阵。
  • 覆盖核心业务闭环、权限/状态机/数据、页面/设计、跨端、安全、测试/性能、运维/文档八大类。
  • 运行批准范围内的基础门禁与聚焦自动化;所有失败按产品/测试/环境分类。
  • 关键 PC/移动页面形成可追溯的结构或截图证据,不把旧截图当作当前基线。
  • 已有页面操作区 finding 完成复核和去重。
  • 所有确认 finding 具备证据、复现、影响和建议;外部受限项明确准入条件。
  • 输出管理摘要、P0/P1/P2 清单、跨域根因、建议修复波次和需要用户决策的事项。
  • 审查阶段不修改业务代码、schema、配置或真实数据,不自动创建一批修复实现。
  • task validate、Trellis governance、敏感内容检查和 git diff --check 通过。

Risk Convergence Closeout(2026-07-17)

Closeout Decision

Context:原发现基线为 bbb5c89,当前本地目标已前移到 8f8606c,期间两个原 P0 已在独立任务完成本地修复与归档。继续按原始清单扩大审查会降低边际收益,也会混淆发现历史、当前修复、部署和外部行为。

Decision:本任务从“继续扩大全维扫描”转为“风险收敛收口”。保留原基线与分域报告,新增当前 HEAD delta、唯一 finding 台账、本地浏览器行为证据和双层脱敏规则;不修改业务代码,不创建下游修复 task,只登记推荐工作包顺序。

Consequences:可以稳定回答“发现过什么、当前本地修到哪里、哪些尚未部署或外部验证”,但不能据此声称当前代码已部署、公网角色可用、企微真机通过或真实业务已经完成新一轮试运行。

Management Summary

  • 唯一台账共 34 条:发现时 P0 2、P1 11、P2 21;当前开放 P0 为 0。
  • 两个原 P0 均保持发现时 P0/CONFIRMED,当前为 LOCAL_FIX_VERIFIED、DEPLOYMENT_PENDING、EXTERNAL_BEHAVIOR_PENDING。
  • 当前最重要的开放项是员工敏感数据范围、付款状态一致性、高敏合同附件和发布门禁可信度。
  • 两个已本地修复 P0 的部署与外部行为复核是另行授权的 Gate 0;六个工作包只排序本地开放问题,不能替代 Gate 0。
  • 768×1024 与 1024×768 浏览器量测确认共享表格容器隐藏超宽内容,多个核心列表的右侧操作不可达,RESP-TABLE-001 定为 P1。
  • 375×812 归档页的路由、空态、列表和底栏通过;长详情内部约 105px 被隐藏,形成 P2 MOB-ARCHIVE-001。这一区分证明静态移动路由合同失败本身不直接等于产品缺陷。
  • 后端正确拒绝的按钮显隐、全局搜索列表落点、通知目标缺失、可恢复动作确认和持续可访问性治理均按批准口径收敛为 P2;移动考勤入口自循环保留 P1。
  • 页面工作包内部先处理不可逆/资金动作确认、核心长表单保护、移动考勤自循环和中间断点表格四条 P1,再处理权限显隐与现有 05-31 任务;其他页面 P2 按触达治理,不一次打成巨型实施任务。

Revised Acceptance Mapping

收口验收项 状态 证据
保留原基线并补当前 HEAD delta,不改写历史结论 PASS research/baseline.md、research/current-head-delta.md
形成唯一 finding 台账,统一分级、去重和四层状态 PASS research/findings.md
完成 375 移动归档与 768/1024 五个共享表格页面行为量测 PASS research/browser-review.md、research/evidence/local-browser-8f8606c/
安全材料完成双层脱敏并沉淀稳定摘要规则 PASS research/business-security-review.md、.trellis/spec/hyb-oa/security-privacy.md
发现/修复/部署/外部验证状态分离成为稳定证据合同 PASS design.md、.trellis/spec/hyb-oa/docs-and-evidence.md
后续工作包按批准顺序登记且未创建下游 task PASS research/findings.md#推荐工作包顺序
当前 HEAD 全量本地基础门禁与收口治理门禁 COMPLETE_WITH_KNOWN_FINDINGS research/current-head-delta.md#最终本地收口门禁;完整基础门禁通过,专项移动合同按预期失败,流程覆盖证据保持不可信 finding,均未被掩盖。
提交范围仅含当前 task、必要 spec 与脱敏合成截图 PASS git status、git diff --check 与最终只读 reviewer;0 blocker / 0 major / 0 minor。

Revised Closeout Acceptance

  • 原发现基线 bbb5c89 和当前目标 8f8606c 均有明确、不可互相替代的证据。
  • 所有分域 finding 已映射到唯一台账,批准的严重度校准和拆分已执行。
  • 两个原 P0 分别记录本地修复、部署和外部行为状态,没有改写发现时严重度。
  • 浏览器证据记录 viewport、最终 URL、标题、角色 fixture、横向溢出、操作可达和底栏边界,且只使用合成数据。
  • 普通安全摘要不含攻击步骤、载荷、绕过方式、概率推演、可组合接口细节或真实环境资料。
  • 外部未覆盖项标记为 EXTERNAL_GATED、EXTERNAL_BEHAVIOR_PENDING 或后续工作包。
  • 全量本地基础门禁、task validate、governance、敏感扫描、文档 registry、测试资产清单和 git diff --check 已按当前工作树重跑。
  • 只读复核确认 P0/P1 当前状态、提交范围和未授权边界准确。

Uncovered And Authorization-Gated Boundaries

  • 未部署,未检查公网 build SHA、边缘响应头、真实代理链或公网角色矩阵。
  • 未连接生产数据库,未执行迁移状态、drift、备份恢复、并发付款或任何真实数据写入。
  • 未读取真实员工档案、合同正文、附件、票据、银行资料、导出文件或客户端设备存储。
  • 未执行企业微信真机、真实通知、真实 OCR、在线依赖审计或外部服务写入。
  • 旧 Day 1–Day 4 试运行不复用;未来部署和外部门禁通过后必须从新的 Day 1 开始。
  • 上述边界不阻塞本地只读审查归档,但阻塞“已部署”“可公网测试”和“真实业务通过”等对外表述。

Definition of Done

  • 当前本地系统的主要能力、页面和风险有可追溯的审查覆盖,而不是只罗列已有测试。
  • finding 分级一致、去重、可复现,并能直接转成后续独立 Trellis task。
  • 明确哪些结论只适用于本地,哪些仍需部署、公网、真机或真实角色验证。
  • 给出推荐修复顺序,但不在本任务实施业务修复。

Feasible Approaches

方案 1:全维度风险优先(推荐)

  • 先做全系统静态、自动化和页面矩阵扫描,快速形成 P0/P1/P2 初版;再对 P0/P1 及跨域根因深挖。
  • 优点:覆盖用户要求的多个角度,较早暴露致命风险,也能控制审查范围。
  • 代价:首轮每个业务域的深度有限,需要第二轮按高风险聚焦。

方案 2:核心业务流深挖优先

  • 先深挖报销/OCR/审批、采购/合同/项目、付款/AP 和人员/企微主链,再补页面与横向治理。
  • 优点:核心业务证据最扎实。
  • 代价:页面、设计、文档和低频管理能力的问题会较晚出现。

方案 3:页面与设计优先

  • 先完成全部路由、PC/移动视口、信息架构、交互和视觉一致性审查,再回到后端与业务闭环。
  • 优点:用户可见问题收敛快。
  • 代价:越权、状态机和数据一致性等高风险问题可能被延后。

Decision (ADR-lite)

Context:系统覆盖前后端、移动/企微、财务与审批等多个域;只做页面审查会遗漏越权、状态机和数据风险,只深挖业务流又会延后用户可见问题。

Decision:采用方案 1。第一轮先建立全系统资产和证据矩阵,完成八大维度广度扫描并形成 P0/P1/P2 初版;随后只对 P0/P1、跨域共因和证据冲突进行第二轮深挖。

Consequences:可以尽早得到完整风险地图,并控制审查期间不混入修复。代价是首轮不会对每个 P2 做同等深度分析;P2 在风险地图稳定后按修复波次再展开。

Execution Plan

Wave 1:冻结基线与全量资产矩阵

  • 记录本地 commit、环境、功能域、角色、路由、页面、API、schema、测试和事实源。
  • 运行基础静态/构建/单测门禁,分类现有失败和 warning。

Wave 2:业务、权限、状态机、数据与安全扫描

  • 追踪核心业务闭环和代表角色的正/负路径。
  • 对导航、动作、API 权限与数据范围做跨层对照。
  • 检查状态迁移、附件/导出、审计、敏感内容和外部集成边界。

Wave 3:页面、设计、响应式与跨端扫描

  • 使用本地 Vite dev + Playwright 复核核心 PC/移动页面和企业微信 UA 布局。
  • 检查信息架构、视觉层级、表单/表格/反馈、键盘/焦点、危险操作和跨端归属。
  • 复核并去重页面操作区任务已有 5 类 finding。

Wave 4:测试、性能、可靠性、运维与文档扫描

  • 评估 63 个 E2E spec、153 个后端测试文件和 50 个 QA 脚本的覆盖、重复、陈旧和环境脆弱性。
  • 基于构建/运行证据检查性能、任务调度、重试、可观测性、部署来源、回滚、备份和文档培训。

Wave 5:Finding 收敛与独立复核

  • 统一 finding schema,合并重复问题和跨域根因。
  • 对 P0/P1、权限、状态机、迁移和审批规则 finding 做独立只读复核。
  • 输出管理摘要、问题分级、修复波次、外部补证项和需要用户决策的事项。

Test Plan (Draft)

cd server && npm run prisma:validate
cd server && npm test
cd client && npm run typecheck
cd client && npm run build
cd client && npx playwright test --list
node scripts/qa/check-process-contract.mjs --baseline --json
node scripts/qa/check-oa-permission-matrix.mjs
node scripts/qa/check-mobile-route-contract.mjs
node scripts/qa/check-sensitive-content.mjs
node scripts/qa/audit-docs.mjs --check-registry
node scripts/qa/check-trellis-governance.mjs
git diff --check
  • Playwright 实跑范围在方案确认后冻结,优先选择本地 mock、核心流程、权限直连、跨页面一致性、项目级视觉和移动路由相关 spec;明确排除 manual/ 和 live-smoke.spec.ts。
  • 浏览器复核需要本地 Vite dev,避免 production preview 的 PWA Service Worker 绕过 route mock;生成物只清理本轮明确产生的目录。

Out of Scope

  • 修复审查发现的业务代码、页面、schema、测试或文档问题。
  • push、部署、公网检查、生产配置、数据库 reset、真实数据、企业微信写入、真实付款和真实 OCR。
  • 补造旧试运行、真机或人工业务闭环证据。
  • 为追求 warning 数字归零而批量重写历史证据或无关脚本。

Technical Notes

  • 审查设计见 design.md。
  • 基线盘点见 research/audit-scope-baseline.md。
  • 事实源入口:docs/文档索引.md、docs/文档事实源状态矩阵.md。
  • 设计事实与工程规则:docs/产品设计规则.md、.trellis/spec/hyb-oa/frontend-react-vite-design.md。
  • 权限、审批、报销/OCR、企微、部署和安全分别读取 .trellis/spec/hyb-oa/ 对应规约。