4.4 KiB
4.4 KiB
| 1 | ID | Title | Description | Acceptance | Test_Method | Tools | Dev_Status | Review1_Status | Regression_Status | Files | Dependencies | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | P21PWA1-0 | P21PWA1执行合同刷新与P20基线冻结 | 新建 superseding CSV,冻结 P20 周期正式收口 gate、脏工作区归类规则与 P21+PWA-1 浏览器 PWA 资产扫码范围。 | refresh CSV 校验通过,并明确 P20 从 TRAVEL-3 事实源收口、P21 从 clean main 基线起步。 | python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv | manual | DONE | DONE | DONE | issues/2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv | docs/feature-matrix.md | docs/integration-boundaries.md | [] | supersedes issues/2026-03-09_11-15-00-p21-pwa-1-l5-asset-scan.csv and absorbs P20 formal closeout rules |
| 3 | P21PWA1-1 | 移动资产扫码页与扫描适配器 | 新增 MobileAssetScanPage 与 BarcodeScannerPanel,提供 BarcodeDetector 优先、ZXing 回退和手工输入兜底的移动资产扫码入口。 | 移动端可通过 /mobile/assets/scan 打开扫码页,支持相机扫码或手工输入并展示单资产命中结果与多命中候选。 | cd client && npm run typecheck && npm run build | manual | DONE | DONE | DONE | client/src/pages/MobileAssetScanPage.tsx | client/src/components/mobile/BarcodeScannerPanel.tsx | client/src/router/index.tsx | client/src/components/navigation/NavLinks.tsx | client/package.json | ["P21PWA1-0"] | PWA-1 stays browser-only and does not introduce native shell, NFC, Bluetooth or platform private SDKs |
| 4 | P21PWA1-2 | 资产扫码查找最小后端扩展 | 对现有 GET /api/assets 增加 q 查询参数并在前端 API 暴露,按 assetNo、serialNo 精确匹配并以名称模糊匹配兜底。 | 现有资产读权限与 mine 语义不变,扫码或手工输入可直接复用 /api/assets?q 查询结果,不新增 lookup 路由。 | cd server && npm run test | manual | DONE | DONE | DONE | server/src/routes/assets.js | server/tests/unit/routes/assets.search.test.js | client/src/api/assets.ts | ["P21PWA1-0"] | keeps existing response shape and permission boundaries intact |
| 5 | P21PWA1-3 | 盘点录入模式与离线队列联动 | 在 inventoryCheckId 模式下复用现有盘点 API,实现 draft 启动、counting 录入、completed 只读,以及已解析盘点结果的 IndexedDB 队列重放。 | 有 asset.inventory 权限的用户可在移动扫码页进行盘点录入、离线入队与联网重放;无该权限用户仅可查找资产。 | cd client && npm run typecheck && npm run build && cd ../server && npm run test | manual | DONE | DONE | DONE | client/src/mobile/inventoryScanQueue.ts | client/src/pages/MobileAssetScanPage.tsx | client/src/pages/InventoryChecksPage.tsx | client/src/pages/AssetRegistryPage.tsx | ["P21PWA1-1","P21PWA1-2"] | offline queue only stores already-resolved inventory items with inventoryCheckId + assetId last-write-wins dedupe |
| 6 | P21PWA1-4 | PWA一期文档边界与矩阵同步 | 同步 integration-boundaries、mobile pwa regression checklist、feature matrix 与校验器,明确 PWA-1 只做浏览器扫码与离线队列。 | 文档明确不做原生壳、深链、完整离线同步,矩阵标题推进到 +PWA-1 且总数更新为 260。 | python3 scripts/validate-feature-matrix.py | manual | DONE | DONE | DONE | docs/integration-boundaries.md | docs/mobile/pwa-regression-checklist.md | docs/feature-matrix.md | scripts/validate-feature-matrix.py | ["P21PWA1-3"] | do not update docs/domain-events.md for PWA-1 |
| 7 | P21PWA1-5 | P21PWA1回归与验收收口 | 执行前后端回归、PWA checklist 与 P20 工作区洁净度核对,形成 P21+PWA-1 可验收状态。 | 移动扫码、盘点录入、离线重放、权限拒绝、矩阵校验全部通过,且 pre-existing dirty changes are fully classified in the final outcome. | cd server && npm run test && ./scripts/regression-workflow-actions.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build && python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv && python3 scripts/validate-feature-matrix.py && git diff --check | manual | DONE | DONE | DONE | issues/2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv | docs/mobile/pwa-regression-checklist.md | client/src/pages/MobileAssetScanPage.tsx | server/src/routes/assets.js | ["P21PWA1-4"] | git status stays dirty until user commits; local cleanliness check is treated as release gate rather than uncommitted-work elimination within this turn |