diff --git a/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/check.jsonl b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/check.jsonl new file mode 100644 index 00000000..d953bd00 --- /dev/null +++ b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/check.jsonl @@ -0,0 +1,6 @@ +{"file": ".trellis/spec/hyb-oa/deployment-trialrun.md", "reason": "Check public deployment safety mode and required postdeploy evidence."} +{"file": ".trellis/spec/hyb-oa/frontend-react-vite-design.md", "reason": "Check comparison output and frontend validation against task-first simplification rules."} +{"file": ".trellis/spec/hyb-oa/docs-and-evidence.md", "reason": "Check generated evidence summaries avoid absolute paths and sensitive fields."} +{"file": ".trellis/spec/hyb-oa/security-privacy.md", "reason": "Check task artifacts and report summaries do not leak secrets or confidential data."} +{"file": ".trellis/spec/hyb-oa/project-governance.md", "reason": "Check Trellis validate/governance/commit flow."} +{"file": ".trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/deploy-verify-context.md", "reason": "Check task-specific expected evidence outputs."} diff --git a/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/implement.jsonl b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/implement.jsonl new file mode 100644 index 00000000..6497f4e5 --- /dev/null +++ b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/implement.jsonl @@ -0,0 +1,6 @@ +{"file": ".trellis/spec/hyb-oa/deployment-trialrun.md", "reason": "Public trial-run deployment command, env sync boundary, postdeploy reporting requirements."} +{"file": ".trellis/spec/hyb-oa/frontend-react-vite-design.md", "reason": "Frontend design verification and PC task-first simplification rules."} +{"file": ".trellis/spec/hyb-oa/docs-and-evidence.md", "reason": "Evidence/report path and summary hygiene for generated QA artifacts."} +{"file": ".trellis/spec/hyb-oa/security-privacy.md", "reason": "Sensitive data and report redaction boundaries."} +{"file": ".trellis/spec/hyb-oa/project-governance.md", "reason": "Trellis task, validation and commit governance for this deployment task."} +{"file": ".trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/deploy-verify-context.md", "reason": "Task-specific deployment and comparison evidence plan."} diff --git a/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/implement.md b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/implement.md new file mode 100644 index 00000000..97e6160b --- /dev/null +++ b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/implement.md @@ -0,0 +1,52 @@ +# Implementation Plan + +## Sequence + +1. Finish task planning artifacts and validate the Trellis task. +2. Build the second wave before/after comparison: + - Capture "before" screenshots from the commit before `5f10b83`. + - Capture "after" screenshots from current `main`. + - Use the existing Playwright mock visual suites so business data is synthetic. + - Write `output/playwright/frontend-simplification-wave2-compare/index.html`. +3. Run deployment preflight checks: + - frontend typecheck/build + - UI design rule checker + - deployment env contract checker + - `git diff --check` +4. Deploy with the approved safe command: + - `SYNC_ENV=0 bash deploy/trialrun/deploy.sh` +5. Run post-deploy readonly verification: + - live smoke readiness + - permission matrix + - PC readonly visual matrix + - mobile entry matrix + - WeCom rendering matrix +6. Record a concise postdeploy summary under `research/`, using only relative report references and redacted conclusions. +7. Run Trellis governance and final whitespace check. + +## Screenshot Strategy + +- Prefer a temporary git worktree for the "before" commit so the current working tree remains intact. +- Do not use destructive checkout/reset commands in the main worktree. +- Reuse test-generated screenshots where available: + - `output/playwright/pc-core-workflow-visual-wave2/` + - `output/playwright/pc-detail-mobile-visual-wave3/` +- If the old and new screenshot filenames differ, normalize them by copying the selected images into the comparison output directory with stable names. + +## Stop Conditions + +- Unexpected dirty files outside the current task or generated comparison output. +- Deployment script fails. +- Public `/ready` fails. +- Permission matrix reports a blocker. +- PC readonly visual matrix reports a P1 blocker. +- Any generated report contains secrets, raw payloads, full accounts or full local paths. + +## Safety Boundaries + +- No remote `.env` overwrite. +- No real business write automation. +- No Enterprise WeChat writes. +- No real payment, bank import or ERP write. +- No database reset, restore or manual migration. +- No production config edits. diff --git a/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/prd.md b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/prd.md new file mode 100644 index 00000000..13a07b85 --- /dev/null +++ b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/prd.md @@ -0,0 +1,128 @@ +# 部署并复检前端降噪第二轮 + +## Goal + +将已完成并提交的第二轮前端降噪改动部署到公网试运行环境,并完成本地、截图对比和公网只读验证,确认审批中心与报销详情的新信息架构已经在试运行版本生效,且没有引入登录、审批、报销、移动入口或企业微信渲染回归。 + +本任务只做已提交前端改动的部署、对比和只读验证;不继续扩大页面重构范围,不写真实业务数据,不覆盖远端 `.env`。 + +## What I Already Know + +- 用户已经确认第一轮对比效果,并要求“保持这样,作为统一设计规则”。 +- 用户批准按建议继续执行下一步:部署第二轮降噪并生成第二轮前后对比。 +- 第二轮前端降噪已完成并提交: + - `5f10b83 重构审批中心与报销详情降噪(approval-detail-simplification-refactor)` + - `79f50b0 归档审批详情降噪任务(approval-detail-simplification-refactor)` +- 第二轮改动范围包括审批中心、报销详情、详情操作区和相关 Playwright 视觉/主流程测试。 +- 已存在第一轮对比页:`output/playwright/frontend-simplification-compare/index.html`。 +- 公网部署必须使用 `SYNC_ENV=0 bash deploy/trialrun/deploy.sh`,不得同步或覆盖远端 `.env`。 + +## Requirements + +- 部署前补齐当前 Trellis 任务材料,记录执行边界、验证计划和脱敏证据位置。 +- 生成第二轮前后对比页: + - 输出目录:`output/playwright/frontend-simplification-wave2-compare/` + - 覆盖审批中心和报销详情 PC 页面。 + - 对比基准使用第二轮重构前后 commit,视口和 mock 数据保持一致。 + - 页面样式保持清爽、可扫读,不引入营销化说明。 +- 部署前必须复跑本地门禁: + - `cd client && npm run typecheck` + - `cd client && npm run build` + - `node scripts/qa/check-ui-design-rules.mjs --strict` + - `node deploy/trialrun/validate-env-contract.js` + - `git diff --check` +- 公网部署必须使用安全模式: + - `SYNC_ENV=0 bash deploy/trialrun/deploy.sh` + - 不覆盖远端 `.env` + - 不做数据库重置、恢复或手工迁移 +- 部署后必须执行公网只读验证: + - `/ready` 和部署脚本自带 runtime smoke 结论 + - live smoke / OCR readiness + - OA 权限矩阵 + - OAFRONT3 PC 只读视觉矩阵 + - 移动入口矩阵和企业微信渲染矩阵 +- 验证报告只登记相对路径、状态和脱敏摘要;不得写入密码、token、完整账号、完整本地路径、真实票据或 raw payload。 + +## Acceptance Criteria + +- [x] 用户明确批准继续执行部署与第二轮对比。 +- [ ] `prd.md`、`implement.md` 和上下文登记完成,并通过 Trellis task validate。 +- [ ] 第二轮前后对比页生成完成,可从 `output/playwright/frontend-simplification-wave2-compare/index.html` 查看。 +- [ ] 部署前本地门禁通过。 +- [ ] `SYNC_ENV=0 bash deploy/trialrun/deploy.sh` 成功,未覆盖远端 `.env`。 +- [ ] 部署后公网 `/ready` 通过。 +- [ ] live smoke / OCR readiness 通过或有可解释 SKIP/PASS_WITH_FINDINGS。 +- [ ] 权限矩阵通过。 +- [ ] PC 只读视觉矩阵无 P1 blocker。 +- [ ] 移动入口和企业微信渲染矩阵通过。 +- [ ] 当前任务记录公网验证摘要和报告相对路径。 +- [ ] Trellis governance 和 `git diff --check` 通过。 + +## Definition Of Done + +- 公网试运行环境部署到包含第二轮降噪改动的 commit。 +- 第二轮视觉对比页与公网验证报告可用于说明“审批中心/报销详情已按统一降噪规则生效”。 +- 结论明确为 `READY_FOR_USER_TEST`、`READY_WITH_FINDINGS` 或 `BLOCKED_POSTDEPLOY_VERIFICATION`。 +- 只有在部署与公网只读检查通过或可解释后,才告知用户可以测试。 + +## Out Of Scope + +- 不继续重构其他页面。 +- 不启动或重置真实 7 天试运行计数。 +- 不创建、提交、审批、付款任何真实业务单据。 +- 不写企业微信消息、通讯录、审批或回调数据。 +- 不改远端 `.env`、生产配置、Caddy 配置或生产数据库。 +- 不执行真实付款、银行流水导入、ERP 写入或支付接口联调。 + +## Test Plan + +规划与上下文: + +```bash +python3 ./.trellis/scripts/task.py validate 05-29-frontend-simplification-wave2-deploy-verify +``` + +截图对比: + +```bash +cd client && npx playwright test tests/e2e/pc-core-workflow-visual-wave2.spec.ts --workers=1 --reporter=list +cd client && npx playwright test tests/e2e/pc-detail-mobile-visual-wave3.spec.ts --grep "PC" --workers=1 --reporter=list +``` + +部署前: + +```bash +cd client && npm run typecheck +cd client && npm run build +node scripts/qa/check-ui-design-rules.mjs --strict +node deploy/trialrun/validate-env-contract.js +git diff --check +``` + +部署: + +```bash +SYNC_ENV=0 bash deploy/trialrun/deploy.sh +``` + +部署后: + +```bash +LIVE_SMOKE_BASE_URL=https://oa.hyinda.com LIVE_SMOKE_READINESS_DIR=.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/postdeploy-live-smoke-readiness bash scripts/qa/run-live-smoke-readiness.sh +LIVE_SMOKE_BASE_URL=https://oa.hyinda.com OA_PERMISSION_MATRIX_REPORT_DIR=.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/postdeploy-permission-matrix node scripts/qa/check-oa-permission-matrix.mjs +bash scripts/qa/run-oafront3-pc-readonly-visual.sh +cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts tests/e2e/r124-mobile-entry-matrix.spec.ts --workers=1 --reporter=list +cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts --workers=1 --reporter=list +node scripts/qa/check-trellis-governance.mjs +git diff --check +``` + +## Technical Notes + +- Deployment spec: `.trellis/spec/hyb-oa/deployment-trialrun.md` +- Frontend spec: `.trellis/spec/hyb-oa/frontend-react-vite-design.md` +- Evidence spec: `.trellis/spec/hyb-oa/docs-and-evidence.md` +- Privacy spec: `.trellis/spec/hyb-oa/security-privacy.md` +- Governance spec: `.trellis/spec/hyb-oa/project-governance.md` +- Trial run runbook: `docs/试运行与自动化验证手册.md` +- First wave comparison reference: `output/playwright/frontend-simplification-compare/index.html` diff --git a/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/deploy-verify-context.md b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/deploy-verify-context.md new file mode 100644 index 00000000..31df7af2 --- /dev/null +++ b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/deploy-verify-context.md @@ -0,0 +1,22 @@ +# Deploy Verify Context + +## Relevant Existing Evidence + +- Second wave implementation commit: `5f10b83`. +- Second wave archive commit: `79f50b0`. +- First wave comparison page: `output/playwright/frontend-simplification-compare/index.html`. +- Prior public deploy verification task: `.trellis/tasks/archive/2026-05/05-26-oa-frontend-postdeploy-public-verification/`. + +## Derived Constraints + +- Deployment uses `SYNC_ENV=0 bash deploy/trialrun/deploy.sh`; remote `.env` must not be overwritten. +- Reports should use task `research/` paths or existing QA artifact directories and only store relative references. +- Screenshot comparison uses mocked Playwright data, not real business data. +- User-facing "can test" conclusion is only allowed after deployment and public checks pass or have a clearly documented non-blocking finding. + +## Planned Evidence Outputs + +- `output/playwright/frontend-simplification-wave2-compare/index.html` +- `.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/postdeploy-summary.md` +- `.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/postdeploy-live-smoke-readiness/summary.json` +- `.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/research/postdeploy-permission-matrix/summary.json` diff --git a/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/task.json b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/task.json new file mode 100644 index 00000000..f75deaea --- /dev/null +++ b/.trellis/tasks/05-29-frontend-simplification-wave2-deploy-verify/task.json @@ -0,0 +1,26 @@ +{ + "id": "frontend-simplification-wave2-deploy-verify", + "name": "frontend-simplification-wave2-deploy-verify", + "title": "部署并复检前端降噪第二轮", + "description": "", + "status": "in_progress", + "dev_type": null, + "scope": null, + "package": null, + "priority": "P2", + "creator": "shunli", + "assignee": "shunli", + "createdAt": "2026-05-29", + "completedAt": null, + "branch": null, + "base_branch": "main", + "worktree_path": null, + "commit": null, + "pr_url": null, + "subtasks": [], + "children": [], + "parent": null, + "relatedFiles": [], + "notes": "", + "meta": {} +} \ No newline at end of file diff --git a/client/src/pages/PortalHomePage.tsx b/client/src/pages/PortalHomePage.tsx index e08e6035..de406a72 100644 --- a/client/src/pages/PortalHomePage.tsx +++ b/client/src/pages/PortalHomePage.tsx @@ -1186,12 +1186,12 @@ export function PortalHomePage() { title={`你好,${payload.greeting.name}`} className="workbench-hero--compact" subtitle={roleCapabilities.canUseFinance - ? "先处理今天的付款、风险和审批。" + ? "优先办理今天的付款、风险和审批。" : roleCapabilities.canManageSystem - ? "先处理待办,再进入管理入口。" + ? "优先办理待办,再进入管理入口。" : isManagerView - ? "先处理待办,再看团队状态。" - : "先处理待办,再发起申请。"} + ? "优先办理待办,再看团队状态。" + : "优先办理待办,再发起申请。"} actions={ !payload.workspace.persisted && canSetupWorkspace ? (