文件
hyb-oa/issues/2026-03-11_17-50-39-p21-pwa-1-l5-asset-scan-refresh.csv
T

4.4 KiB

1IDTitleDescriptionAcceptanceTest_MethodToolsDev_StatusReview1_StatusRegression_StatusFilesDependenciesNotes
2P21PWA1-0P21PWA1执行合同刷新与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.csvmanualDONEDONEDONEissues/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
3P21PWA1-1移动资产扫码页与扫描适配器新增 MobileAssetScanPage 与 BarcodeScannerPanel,提供 BarcodeDetector 优先、ZXing 回退和手工输入兜底的移动资产扫码入口。移动端可通过 /mobile/assets/scan 打开扫码页,支持相机扫码或手工输入并展示单资产命中结果与多命中候选。cd client && npm run typecheck && npm run buildmanualDONEDONEDONEclient/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
4P21PWA1-2资产扫码查找最小后端扩展对现有 GET /api/assets 增加 q 查询参数并在前端 API 暴露,按 assetNo、serialNo 精确匹配并以名称模糊匹配兜底。现有资产读权限与 mine 语义不变,扫码或手工输入可直接复用 /api/assets?q 查询结果,不新增 lookup 路由。cd server && npm run testmanualDONEDONEDONEserver/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
5P21PWA1-3盘点录入模式与离线队列联动在 inventoryCheckId 模式下复用现有盘点 API,实现 draft 启动、counting 录入、completed 只读,以及已解析盘点结果的 IndexedDB 队列重放。有 asset.inventory 权限的用户可在移动扫码页进行盘点录入、离线入队与联网重放;无该权限用户仅可查找资产。cd client && npm run typecheck && npm run build && cd ../server && npm run testmanualDONEDONEDONEclient/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
6P21PWA1-4PWA一期文档边界与矩阵同步同步 integration-boundaries、mobile pwa regression checklist、feature matrix 与校验器,明确 PWA-1 只做浏览器扫码与离线队列。文档明确不做原生壳、深链、完整离线同步,矩阵标题推进到 +PWA-1 且总数更新为 260。python3 scripts/validate-feature-matrix.pymanualDONEDONEDONEdocs/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
7P21PWA1-5P21PWA1回归与验收收口执行前后端回归、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 --checkmanualDONEDONEDONEissues/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