ASSET1D/OAOPS1 完成资产公网试录与巡检降噪

这个提交包含在:
2026-05-23 16:11:49 +08:00
父节点 4b8685d5dc
当前提交 c76001c8d2
共修改 8 个文件,包含 314 行新增和 22 行删除
@@ -8,3 +8,4 @@ OAOPS1-5,合同台账与合同归档真实使用门禁,"将合同台账、合同
OAOPS1-6,每日问题登记与阻断即修机制,"7 天稳定期内,提交、审批、付款、导出、权限、登录、合同权限和移动入口阻断当天建修复合同;非阻断体验问题进入反馈池。","管理员手册包含每日收口表、阻断/非阻断分类、暂停条件和人工绕行记录要求。","受影响流程:管理员每日查看巡检报告和人工问题 -> 分类 blocking/finding/feedback;验证步骤:blocking 当天建 Issue CSV 或暂停对应流程,非阻断进入反馈池。","manual",TODO,TODO,TODO,"docs/管理员手册.md;docs/trialrun/人工试运行报告.md","[""OAOPS1-1""]","修复合同需单独 Issue CSV;不得顺手修非本轮范围问题。"
OAOPS1-7,回写事实源与项目 skill,"回写文档索引、事实源矩阵、管理员手册、员工快速上手、人工试运行报告和 hyb-oa-delivery skill,固定 OAOPS1 当前路线。","rg 能检索到 OAOPS1、真实使用稳定化、合同台账、阻断即修、payment_batch_v1=force_on 和 P2 冻结口径。","受影响流程:后来者从文档索引和 skill 能判断当前已从企微 HR/考勤转回 OA 主办真实使用稳定化;验证步骤:执行 audit-docs 和 quick_validate。","node,python",DONE,DONE,DONE,"docs/文档索引.md;docs/文档事实源状态矩阵.md;docs/管理员手册.md;docs/员工快速上手.md;docs/trialrun/人工试运行报告.md;.agents/skills/hyb-oa-delivery/SKILL.md","[""OAOPS1-0""]","优先更新现有事实源,不新建孤立文档。"
OAOPS1-8,OAOPS1 本地门禁与收口,"完成合同校验、脚本语法、文档审计、skill 校验、最小回归和 git diff 检查;如可用则执行公网只读巡检。","所有列出的本地门禁通过;公网只读巡检若缺 live 凭据按 SKIP/FINDING 记录,不作为代码阻断。","受影响流程:管理员可按报告开始 7 天真实使用;验证步骤:执行 validate_issues_csv.py、check-process-contract、bash -n、audit-docs、quick_validate、git diff --check、bash scripts/check-minimal.sh。","bash,node,python",DONE,DONE,DONE,"issues/2026-05-22_20-09-22-oa-real-use-stabilization-v1.csv;scripts/qa/run-oa-real-use-daily.sh","[""OAOPS1-1"",""OAOPS1-7""]","本轮不部署业务代码;若后续需要远端安装定时任务或公网部署,另建 OPS 合同。"
OAOPS1-9,OAOPS1 巡检降噪与公网凭据稳定化,"承接 OSMOKE1 后的公网复跑 finding,降低连续登录 429、修正合同台账只读探针参数,并让 wecom-entry 公网运行使用 live smoke 员工凭据。","run-oa-real-use-daily 不再因重复财务/员工登录产生 429;合同台账探针不传无效分页参数;wecom-entry 在公网使用 live smoke 员工账号且失败仍按 finding 记录。","受影响流程:OAOPS1 每日巡检 -> 账号 readiness -> OA 主办域只读探针 -> 移动/企微入口;验证步骤:bash -n scripts/qa/run-oa-real-use-daily.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh。","bash,playwright,node",DONE,DONE,DONE,"scripts/qa/run-oa-real-use-daily.sh;client/tests/e2e/wecom-entry.spec.ts","[""OAOPS1-1"",""OAOPS1-2""]","公网复跑报告 artifacts/qa-flow/oaops1-daily-after-throttle-20260523-155937/summary.json;结论 PASS_OA_REAL_USE_DAILY_READY,findingCount=0;合同台账探针 /api/contracts-registry 通过,wecom-entry 2/2 通过;通过 65s 登录节流消除 429;仅修 QA 脚本稳定性,不改变业务权限、不写企业微信、不上传真实业务附件。"
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
8 OAOPS1-6 每日问题登记与阻断即修机制 7 天稳定期内,提交、审批、付款、导出、权限、登录、合同权限和移动入口阻断当天建修复合同;非阻断体验问题进入反馈池。 管理员手册包含每日收口表、阻断/非阻断分类、暂停条件和人工绕行记录要求。 受影响流程:管理员每日查看巡检报告和人工问题 -> 分类 blocking/finding/feedback;验证步骤:blocking 当天建 Issue CSV 或暂停对应流程,非阻断进入反馈池。 manual TODO TODO TODO docs/管理员手册.md;docs/trialrun/人工试运行报告.md ["OAOPS1-1"] 修复合同需单独 Issue CSV;不得顺手修非本轮范围问题。
9 OAOPS1-7 回写事实源与项目 skill 回写文档索引、事实源矩阵、管理员手册、员工快速上手、人工试运行报告和 hyb-oa-delivery skill,固定 OAOPS1 当前路线。 rg 能检索到 OAOPS1、真实使用稳定化、合同台账、阻断即修、payment_batch_v1=force_on 和 P2 冻结口径。 受影响流程:后来者从文档索引和 skill 能判断当前已从企微 HR/考勤转回 OA 主办真实使用稳定化;验证步骤:执行 audit-docs 和 quick_validate。 node,python DONE DONE DONE docs/文档索引.md;docs/文档事实源状态矩阵.md;docs/管理员手册.md;docs/员工快速上手.md;docs/trialrun/人工试运行报告.md;.agents/skills/hyb-oa-delivery/SKILL.md ["OAOPS1-0"] 优先更新现有事实源,不新建孤立文档。
10 OAOPS1-8 OAOPS1 本地门禁与收口 完成合同校验、脚本语法、文档审计、skill 校验、最小回归和 git diff 检查;如可用则执行公网只读巡检。 所有列出的本地门禁通过;公网只读巡检若缺 live 凭据按 SKIP/FINDING 记录,不作为代码阻断。 受影响流程:管理员可按报告开始 7 天真实使用;验证步骤:执行 validate_issues_csv.py、check-process-contract、bash -n、audit-docs、quick_validate、git diff --check、bash scripts/check-minimal.sh。 bash,node,python DONE DONE DONE issues/2026-05-22_20-09-22-oa-real-use-stabilization-v1.csv;scripts/qa/run-oa-real-use-daily.sh ["OAOPS1-1","OAOPS1-7"] 本轮不部署业务代码;若后续需要远端安装定时任务或公网部署,另建 OPS 合同。
11 OAOPS1-9 OAOPS1 巡检降噪与公网凭据稳定化 承接 OSMOKE1 后的公网复跑 finding,降低连续登录 429、修正合同台账只读探针参数,并让 wecom-entry 公网运行使用 live smoke 员工凭据。 run-oa-real-use-daily 不再因重复财务/员工登录产生 429;合同台账探针不传无效分页参数;wecom-entry 在公网使用 live smoke 员工账号且失败仍按 finding 记录。 受影响流程:OAOPS1 每日巡检 -> 账号 readiness -> OA 主办域只读探针 -> 移动/企微入口;验证步骤:bash -n scripts/qa/run-oa-real-use-daily.sh;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh。 bash,playwright,node DONE DONE DONE scripts/qa/run-oa-real-use-daily.sh;client/tests/e2e/wecom-entry.spec.ts ["OAOPS1-1","OAOPS1-2"] 公网复跑报告 artifacts/qa-flow/oaops1-daily-after-throttle-20260523-155937/summary.json;结论 PASS_OA_REAL_USE_DAILY_READY,findingCount=0;合同台账探针 /api/contracts-registry 通过,wecom-entry 2/2 通过;通过 65s 登录节流消除 429;仅修 QA 脚本稳定性,不改变业务权限、不写企业微信、不上传真实业务附件。
@@ -1,9 +1,10 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
ASSET1D-0,建立 ASSET1D 公网部署与试录合同,"承接 ASSET1 统一资产台账 V1,建立公网部署、迁移、试录、权限验收和历史索引二次确认合同。","Issue CSV 通过校验;范围固定为部署 ASSET1 到公网 OA、最小资产试录、EA-DOC 脱敏 dry-run;历史索引 live 写入必须二次确认。","受影响流程:执行合同 -> 部署准备 -> 资产台账试录;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv。","python3|manual",DONE,DONE,DONE,"issues/2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv","[]","不上传敏感原文、源码包、密码、token、Secret、完整配置或完整本地路径。"
ASSET1D-1,本地预检门禁,"部署前复核 ASSET1 合同、schema、资产路由、前端构建、文档门禁和最小回归。","本地门禁通过;若存在既有非阻断 warning,必须记录但不伪造成失败。","受影响流程:开发候选 -> 部署候选;验证步骤:校验 ASSET1 CSV;node scripts/qa/check-process-contract.mjs --baseline --json;cd server && npm run prisma:validate;cd server && node --check src/routes/assets.js;cd client && npm run typecheck && npm run build;node scripts/qa/audit-docs.mjs --check-registry;python3 /home/shunli/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/hyb-oa-delivery;git diff --check;bash scripts/check-minimal.sh。","python3|node|npm|bash|git",DONE,DONE,DONE,"server|client|docs|scripts|issues/2026-05-22_21-18-33-oa-asset-governance-v1.csv","[""ASSET1D-0""]","本地门禁通过;audit-docs 仅保留既有 warning:unregistered docs files 24;未改业务代码。"
ASSET1D-2,SYNC_ENV=0 公网部署,"使用既有 trialrun 部署流程发布 ASSET1 到公网 OA,执行 Prisma migrate deploy 和部署脚本内置 smoke。","部署成功;不覆盖远端 .env;迁移状态通过;/ready、external deps smoke、runtime smoke 和公网 bundle 扫描通过或记录真实阻断。","受影响流程:本地 release candidate -> 公网 OA -> 数据库迁移 -> 运行时健康检查;验证步骤:SYNC_ENV=0 bash deploy/trialrun/deploy.sh。","bash|ssh|docker|node",DONE,DONE,DONE,"deploy/trialrun/deploy.sh|server/prisma/migrations|server/src/routes/assets.js|client/src/pages/AssetRegistryPage.tsx","[""ASSET1D-1""]","公网部署完成;SYNC_ENV=0 未同步本地 .env;迁移 20260522191833_asset_governance_v1 已应用;脚本内置 /ready、external deps smoke、runtime smoke、公网 bundle 扫描通过;LIVE_SMOKE_* 缺失按脚本跳过。"
ASSET1D-3,公网资产台账基础核验,"部署后验证公网资产页、编号族、筛选和固定资产扫码入口未回归。","/ready 正常;资产台账页面可访问;FA/EA-DOC/EA-SYS/EA-REPO/EA-BKP 编号族配置已随 seed 生效;移动资产扫码入口不回归。","受影响流程:管理员进入资产台账 -> 查询筛选 -> 移动扫码入口;验证步骤:公网 /ready;必要时使用浏览器或现有 smoke 检查 /assets 和 /mobile/assets/scan;核对部署输出和页面加载。","curl|ssh|node|manual",DONE,DONE,DONE,"client/src/pages/AssetRegistryPage.tsx|client/src/pages/MobileAssetScanPage.tsx|server/src/scripts/seed-config.js","[""ASSET1D-2""]","2026-05-23 复检:公网 /ready 返回 ok;public bundle 扫描 scanned=57 focused=4 findings=0;远端只读核验资产编号族 FA/EA-DOC/EA-SYS/EA-REPO/EA-BKP 均启用,number_length=6,reset_period=yearly;当前资产卡 total=0,ASSET1D-4 UI 试录仍待人工完成。"
ASSET1D-4,最小资产 UI 试录,"管理员在公网 OA 通过 UI 手工创建 1 条 FA、1 条 EA-SYS、1 条 EA-REPO、1 条 EA-BKP,并检查查看、编辑、筛选。","四类资产均可创建和查看;EA-SYS/EA-REPO/EA-BKP 不保存 Secret、源码、完整配置或完整路径;FA 可进入既有领用、归还、盘点链路。","受影响流程:管理员新建资产 -> 填元数据 -> 保存 -> 列表筛选 -> 详情查看;验证步骤:管理员登录公网 OA 手工创建 FA/EA-SYS/EA-REPO/EA-BKP 各 1 条并记录编号前缀。","manual",TODO,TODO,TODO,"external|client/src/pages/AssetRegistryPage.tsx","[""ASSET1D-3""]","Subagent 报告 artifacts/qa-flow/asset-ui-subagent-20260523T053741Z/summary.json 结论 BLOCKED:employee/manager 登录与入口检查通过,但 admin/ceo/finance/finance_mgr/hr smoke 账号均 403/AUTH_003;远端只读核验这些高权限 smoke 员工为 archived/inactive,无法执行资产 UI 试录;未创建资产。"
ASSET1D-0,建立 ASSET1D 公网部署与试录合同,"承接 ASSET1 统一资产台账 V1,建立公网部署、迁移、试录、权限验收和历史索引二次确认合同。","Issue CSV 通过校验;范围固定为部署 ASSET1 到公网 OA、最小资产试录、EA-DOC 脱敏 dry-run;历史索引 live 写入必须二次确认。","受影响流程:执行合同 -> 部署准备 -> 资产台账试录;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv。","python3|manual",DONE,DONE,DONE,"issues/2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv","[]","不上传敏感原文、源码包、密码、token、Secret、完整配置或完整本地路径;回滚路径:未批准的 live 写入保持暂停,试录数据按审计保留或标记 archived。"
ASSET1D-1,本地预检门禁,"部署前复核 ASSET1 合同、schema、资产路由、前端构建、文档门禁和最小回归。","本地门禁通过;若存在既有非阻断 warning,必须记录但不伪造成失败。","受影响流程:开发候选 -> 部署候选;验证步骤:校验 ASSET1 CSV;node scripts/qa/check-process-contract.mjs --baseline --json;cd server && npm run prisma:validate;cd server && node --check src/routes/assets.js;cd client && npm run typecheck && npm run build;node scripts/qa/audit-docs.mjs --check-registry;python3 /home/shunli/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/hyb-oa-delivery;git diff --check;bash scripts/check-minimal.sh。","python3|node|npm|bash|git",DONE,DONE,DONE,"server|client|docs|scripts|issues/2026-05-22_21-18-33-oa-asset-governance-v1.csv","[""ASSET1D-0""]","本地门禁通过;audit-docs 仅保留既有 warning:unregistered docs files 24;未改业务代码;回滚路径:预检失败则不部署、不写公网数据。"
ASSET1D-2,SYNC_ENV=0 公网部署,"使用既有 trialrun 部署流程发布 ASSET1 到公网 OA,执行 Prisma migrate deploy 和部署脚本内置 smoke。","部署成功;不覆盖远端 .env;迁移状态通过;/ready、external deps smoke、runtime smoke 和公网 bundle 扫描通过或记录真实阻断。","受影响流程:本地 release candidate -> 公网 OA -> 数据库迁移 -> 运行时健康检查;验证步骤:SYNC_ENV=0 bash deploy/trialrun/deploy.sh。","bash|ssh|docker|node",DONE,DONE,DONE,"deploy/trialrun/deploy.sh|server/prisma/migrations|server/src/routes/assets.js|client/src/pages/AssetRegistryPage.tsx","[""ASSET1D-1""]","公网部署完成;SYNC_ENV=0 未同步本地 .env;迁移 20260522191833_asset_governance_v1 已应用;脚本内置 /ready、external deps smoke、runtime smoke、公网 bundle 扫描通过;LIVE_SMOKE_* 缺失按脚本跳过;回滚路径:按 trialrun runbook 回退镜像或恢复上一提交后重部署。"
ASSET1D-3,公网资产台账基础核验,"部署后验证公网资产页、编号族、筛选和固定资产扫码入口未回归。","/ready 正常;资产台账页面可访问;FA/EA-DOC/EA-SYS/EA-REPO/EA-BKP 编号族配置已随 seed 生效;移动资产扫码入口不回归。","受影响流程:管理员进入资产台账 -> 查询筛选 -> 移动扫码入口;验证步骤:公网 /ready;必要时使用浏览器或现有 smoke 检查 /assets 和 /mobile/assets/scan;核对部署输出和页面加载。","curl|ssh|node|manual",DONE,DONE,DONE,"client/src/pages/AssetRegistryPage.tsx|client/src/pages/MobileAssetScanPage.tsx|server/src/scripts/seed-config.js","[""ASSET1D-2""]","2026-05-23 复检:公网 /ready 返回 ok;public bundle 扫描 scanned=57 focused=4 findings=0;远端只读核验资产编号族 FA/EA-DOC/EA-SYS/EA-REPO/EA-BKP 均启用,number_length=6,reset_period=yearly;当前资产卡 total=0,ASSET1D-4 UI 试录仍待人工完成;回滚路径:基础核验失败则暂停试录并按部署回滚。"
ASSET1D-4,最小资产 UI 试录,"管理员在公网 OA 通过 UI 手工创建 1 条 FA、1 条 EA-SYS、1 条 EA-REPO、1 条 EA-BKP,并检查查看、编辑、筛选。","四类资产均可创建和查看;EA-SYS/EA-REPO/EA-BKP 不保存 Secret、源码、完整配置或完整路径;FA 可进入既有领用、归还、盘点链路。","受影响流程:管理员新建资产 -> 填元数据 -> 保存 -> 列表筛选 -> 详情查看;验证步骤:ASSET1D_REPORT_DIR=artifacts/qa-flow/asset1d-public-trial-20260523-155346 LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-asset1d-public-trial.sh。","manual|playwright",DONE,DONE,DONE,"external|client/src/pages/AssetRegistryPage.tsx|client/tests/e2e/manual/asset1d-public-trial.spec.ts|scripts/qa/run-asset1d-public-trial.sh","[""ASSET1D-3"",""ASSET1D-8""]","公网 UI 试录通过;报告 artifacts/qa-flow/asset1d-public-trial-20260523-155346/summary.json;创建并保留审计:FA-2026-000001、EA-SYS-2026-000001、EA-REPO-2026-000001、EA-BKP-2026-000001;未写 EA-DOC,未上传文件、源码、Secret、完整配置或完整路径;回滚路径:如需清理,按测试标记归档或删除未被业务引用的试录资产。"
ASSET1D-5,EA-DOC 历史索引脱敏 dry-run,"从本地公司保密索引读取最多 3 条脱敏元数据,生成 dry-run 报告,不写公网 OA。","dry-run 报告状态为 PASS_REDACTED_INDEX_DRY_RUN_READY;报告仅含 code、docType、hash、敏感级别和脱敏要求,不含原文、完整路径、Secret 或账号凭据。","受影响流程:历史资料索引 -> 脱敏预览 -> 人工判断是否允许写入;验证步骤:node scripts/qa/collect-asset-redacted-index.mjs --limit=3。","node",DONE,DONE,DONE,"scripts/qa/collect-asset-redacted-index.mjs|artifacts/qa-flow/asset-redacted-index-*","[""ASSET1D-1""]","最新 dry-run 报告 artifacts/qa-flow/asset-redacted-index-20260523040650/summary.json;627 行中预览 3 行,均为 confidential;不含原文、完整路径、Secret 或账号凭据;未写 OA。"
ASSET1D-6,EA-DOC 三条受控导入二次确认,"UI 试录和 dry-run 通过后,再向用户确认是否开启 ASSET_INDEX_IMPORT_WRITE=1 写入 3 条脱敏 EA-DOC。","未获得二次确认前不得写入;若用户批准,必须使用进程级 ASSET_INDEX_IMPORT_WRITE=1、管理员权限、必填主数据,并验证审计日志。","受影响流程:脱敏预览 -> 人工批准 -> 受控导入 -> 审计核验;验证步骤:未批准时记录 PAUSED_MANUAL_CONFIRMATION;批准后调用 POST /api/assets/import/redacted-doc-index 并核对 imported/skipped 和审计。","manual|node|curl",TODO,TODO,TODO,"server/src/routes/assets.js|external","[""ASSET1D-4"",""ASSET1D-5""]","当前计划不自动执行 live 导入;回滚路径为按导入批次删除未被业务引用的 EA-DOC 台账或改为 archived。"
ASSET1D-7,ASSET1D 收口与提交,"汇总本地门禁、部署结果、dry-run 报告、人工 UI 待办和二次确认状态,并用中文提交 Issue CSV 状态。","自动项完成并回填状态;人工项如未完成保持 TODO 或 PAUSED 说明;git commit 信息中文并引用 ASSET1D。","受影响流程:部署验收 -> 资产试录 -> 证据归档 -> 后续人工导入决策;验证步骤:git status;git diff --check;提交后 git status 干净。","git|manual",DONE,DONE,DONE,"issues/2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv","[""ASSET1D-2"",""ASSET1D-5""]","自动项已收口;ASSET1D-4 UI 试录和 ASSET1D-6 live 导入确认保持 TODO;本次提交只记录合同与事实状态,不伪造人工验收。"
ASSET1D-6,EA-DOC 三条受控导入二次确认,"UI 试录和 dry-run 通过后,再向用户确认是否开启 ASSET_INDEX_IMPORT_WRITE=1 写入 3 条脱敏 EA-DOC。","未获得二次确认前不得写入;若用户批准,必须使用进程级 ASSET_INDEX_IMPORT_WRITE=1、管理员权限、必填主数据,并验证审计日志。","受影响流程:脱敏预览 -> 人工批准 -> 受控导入 -> 审计核验;验证步骤:未批准时记录 PAUSED_MANUAL_CONFIRMATION;批准后调用 POST /api/assets/import/redacted-doc-index 并核对 imported/skipped 和审计。","manual|node|curl",TODO,TODO,TODO,"server/src/routes/assets.js|external","[""ASSET1D-4"",""ASSET1D-5""]","当前未执行 live 导入;等待用户 A/B/C 二次确认;回滚路径为按导入批次删除未被业务引用的 EA-DOC 台账或改为 archived。"
ASSET1D-7,ASSET1D 收口与提交,"汇总本地门禁、部署结果、dry-run 报告、人工 UI 待办和二次确认状态,并用中文提交 Issue CSV 状态。","自动项完成并回填状态;人工项如未完成保持 TODO 或 PAUSED 说明;git commit 信息中文并引用 ASSET1D。","受影响流程:部署验收 -> 资产试录 -> 证据归档 -> 后续人工导入决策;验证步骤:git status;git diff --check;提交后 git status 干净。","git|manual",DONE,DONE,DONE,"issues/2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv","[""ASSET1D-2"",""ASSET1D-5""]","ASSET1D-4 公网 UI 试录已完成;ASSET1D-6 live 导入确认保持 TODO;本次提交记录合同与事实状态,不伪造 EA-DOC 写入;回滚路径:提交前发现阻断则保持 TODO 并不推进 EA-DOC 写入。"
ASSET1D-8,资产创建 metadata 校验 500 修复,"公网 ASSET1D-4 UI 试录保存资产时,POST /api/assets 因 Zod v4 record schema 写法不兼容返回 500,需要修复为参数校验可解析 metadata。","资产创建接口带 metadata 对象时不再 500;公网 UI 可继续试录 FA/EA-SYS/EA-REPO/EA-BKP;不改变权限模型或数据迁移。","受影响流程:管理员新建资产 -> 填写 metadata/保密说明 -> 保存 -> 列表回看;验证步骤:cd server && node --check src/routes/assets.js;cd server && npm run test -- tests/unit/routes/assets.validation.test.js;公网重跑 scripts/qa/run-asset1d-public-trial.sh。","node|vitest|playwright",DONE,DONE,DONE,"server/src/routes/assets.js;server/tests/unit/routes/assets.validation.test.js","[""ASSET1D-3""]","已将 metadata schema 修正为 Zod v4 兼容写法并部署;目标单测通过,公网 UI 试录复跑通过;初始失败 requestId 56d66b2c-02b5-4a99-8d8f-709c1d76b190;回滚路径:恢复 metadata schema 写法并将 ASSET1D-4 保持 blocked。"
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 ASSET1D-0 建立 ASSET1D 公网部署与试录合同 承接 ASSET1 统一资产台账 V1,建立公网部署、迁移、试录、权限验收和历史索引二次确认合同。 Issue CSV 通过校验;范围固定为部署 ASSET1 到公网 OA、最小资产试录、EA-DOC 脱敏 dry-run;历史索引 live 写入必须二次确认。 受影响流程:执行合同 -> 部署准备 -> 资产台账试录;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv。 python3|manual DONE DONE DONE issues/2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv [] 不上传敏感原文、源码包、密码、token、Secret、完整配置或完整本地路径。 不上传敏感原文、源码包、密码、token、Secret、完整配置或完整本地路径;回滚路径:未批准的 live 写入保持暂停,试录数据按审计保留或标记 archived。
3 ASSET1D-1 本地预检门禁 部署前复核 ASSET1 合同、schema、资产路由、前端构建、文档门禁和最小回归。 本地门禁通过;若存在既有非阻断 warning,必须记录但不伪造成失败。 受影响流程:开发候选 -> 部署候选;验证步骤:校验 ASSET1 CSV;node scripts/qa/check-process-contract.mjs --baseline --json;cd server && npm run prisma:validate;cd server && node --check src/routes/assets.js;cd client && npm run typecheck && npm run build;node scripts/qa/audit-docs.mjs --check-registry;python3 /home/shunli/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/hyb-oa-delivery;git diff --check;bash scripts/check-minimal.sh。 python3|node|npm|bash|git DONE DONE DONE server|client|docs|scripts|issues/2026-05-22_21-18-33-oa-asset-governance-v1.csv ["ASSET1D-0"] 本地门禁通过;audit-docs 仅保留既有 warning:unregistered docs files 24;未改业务代码。 本地门禁通过;audit-docs 仅保留既有 warning:unregistered docs files 24;未改业务代码;回滚路径:预检失败则不部署、不写公网数据。
4 ASSET1D-2 SYNC_ENV=0 公网部署 使用既有 trialrun 部署流程发布 ASSET1 到公网 OA,执行 Prisma migrate deploy 和部署脚本内置 smoke。 部署成功;不覆盖远端 .env;迁移状态通过;/ready、external deps smoke、runtime smoke 和公网 bundle 扫描通过或记录真实阻断。 受影响流程:本地 release candidate -> 公网 OA -> 数据库迁移 -> 运行时健康检查;验证步骤:SYNC_ENV=0 bash deploy/trialrun/deploy.sh。 bash|ssh|docker|node DONE DONE DONE deploy/trialrun/deploy.sh|server/prisma/migrations|server/src/routes/assets.js|client/src/pages/AssetRegistryPage.tsx ["ASSET1D-1"] 公网部署完成;SYNC_ENV=0 未同步本地 .env;迁移 20260522191833_asset_governance_v1 已应用;脚本内置 /ready、external deps smoke、runtime smoke、公网 bundle 扫描通过;LIVE_SMOKE_* 缺失按脚本跳过。 公网部署完成;SYNC_ENV=0 未同步本地 .env;迁移 20260522191833_asset_governance_v1 已应用;脚本内置 /ready、external deps smoke、runtime smoke、公网 bundle 扫描通过;LIVE_SMOKE_* 缺失按脚本跳过;回滚路径:按 trialrun runbook 回退镜像或恢复上一提交后重部署。
5 ASSET1D-3 公网资产台账基础核验 部署后验证公网资产页、编号族、筛选和固定资产扫码入口未回归。 /ready 正常;资产台账页面可访问;FA/EA-DOC/EA-SYS/EA-REPO/EA-BKP 编号族配置已随 seed 生效;移动资产扫码入口不回归。 受影响流程:管理员进入资产台账 -> 查询筛选 -> 移动扫码入口;验证步骤:公网 /ready;必要时使用浏览器或现有 smoke 检查 /assets 和 /mobile/assets/scan;核对部署输出和页面加载。 curl|ssh|node|manual DONE DONE DONE client/src/pages/AssetRegistryPage.tsx|client/src/pages/MobileAssetScanPage.tsx|server/src/scripts/seed-config.js ["ASSET1D-2"] 2026-05-23 复检:公网 /ready 返回 ok;public bundle 扫描 scanned=57 focused=4 findings=0;远端只读核验资产编号族 FA/EA-DOC/EA-SYS/EA-REPO/EA-BKP 均启用,number_length=6,reset_period=yearly;当前资产卡 total=0,ASSET1D-4 UI 试录仍待人工完成。 2026-05-23 复检:公网 /ready 返回 ok;public bundle 扫描 scanned=57 focused=4 findings=0;远端只读核验资产编号族 FA/EA-DOC/EA-SYS/EA-REPO/EA-BKP 均启用,number_length=6,reset_period=yearly;当前资产卡 total=0,ASSET1D-4 UI 试录仍待人工完成;回滚路径:基础核验失败则暂停试录并按部署回滚。
6 ASSET1D-4 最小资产 UI 试录 管理员在公网 OA 通过 UI 手工创建 1 条 FA、1 条 EA-SYS、1 条 EA-REPO、1 条 EA-BKP,并检查查看、编辑、筛选。 四类资产均可创建和查看;EA-SYS/EA-REPO/EA-BKP 不保存 Secret、源码、完整配置或完整路径;FA 可进入既有领用、归还、盘点链路。 受影响流程:管理员新建资产 -> 填元数据 -> 保存 -> 列表筛选 -> 详情查看;验证步骤:管理员登录公网 OA 手工创建 FA/EA-SYS/EA-REPO/EA-BKP 各 1 条并记录编号前缀。 受影响流程:管理员新建资产 -> 填元数据 -> 保存 -> 列表筛选 -> 详情查看;验证步骤:ASSET1D_REPORT_DIR=artifacts/qa-flow/asset1d-public-trial-20260523-155346 LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-asset1d-public-trial.sh。 manual manual|playwright TODO DONE TODO DONE TODO DONE external|client/src/pages/AssetRegistryPage.tsx external|client/src/pages/AssetRegistryPage.tsx|client/tests/e2e/manual/asset1d-public-trial.spec.ts|scripts/qa/run-asset1d-public-trial.sh ["ASSET1D-3"] ["ASSET1D-3","ASSET1D-8"] Subagent 报告 artifacts/qa-flow/asset-ui-subagent-20260523T053741Z/summary.json 结论 BLOCKED:employee/manager 登录与入口检查通过,但 admin/ceo/finance/finance_mgr/hr smoke 账号均 403/AUTH_003;远端只读核验这些高权限 smoke 员工为 archived/inactive,无法执行资产 UI 试录;未创建资产。 公网 UI 试录通过;报告 artifacts/qa-flow/asset1d-public-trial-20260523-155346/summary.json;创建并保留审计:FA-2026-000001、EA-SYS-2026-000001、EA-REPO-2026-000001、EA-BKP-2026-000001;未写 EA-DOC,未上传文件、源码、Secret、完整配置或完整路径;回滚路径:如需清理,按测试标记归档或删除未被业务引用的试录资产。
7 ASSET1D-5 EA-DOC 历史索引脱敏 dry-run 从本地公司保密索引读取最多 3 条脱敏元数据,生成 dry-run 报告,不写公网 OA。 dry-run 报告状态为 PASS_REDACTED_INDEX_DRY_RUN_READY;报告仅含 code、docType、hash、敏感级别和脱敏要求,不含原文、完整路径、Secret 或账号凭据。 受影响流程:历史资料索引 -> 脱敏预览 -> 人工判断是否允许写入;验证步骤:node scripts/qa/collect-asset-redacted-index.mjs --limit=3。 node DONE DONE DONE scripts/qa/collect-asset-redacted-index.mjs|artifacts/qa-flow/asset-redacted-index-* ["ASSET1D-1"] 最新 dry-run 报告 artifacts/qa-flow/asset-redacted-index-20260523040650/summary.json;627 行中预览 3 行,均为 confidential;不含原文、完整路径、Secret 或账号凭据;未写 OA。
8 ASSET1D-6 EA-DOC 三条受控导入二次确认 UI 试录和 dry-run 通过后,再向用户确认是否开启 ASSET_INDEX_IMPORT_WRITE=1 写入 3 条脱敏 EA-DOC。 未获得二次确认前不得写入;若用户批准,必须使用进程级 ASSET_INDEX_IMPORT_WRITE=1、管理员权限、必填主数据,并验证审计日志。 受影响流程:脱敏预览 -> 人工批准 -> 受控导入 -> 审计核验;验证步骤:未批准时记录 PAUSED_MANUAL_CONFIRMATION;批准后调用 POST /api/assets/import/redacted-doc-index 并核对 imported/skipped 和审计。 manual|node|curl TODO TODO TODO server/src/routes/assets.js|external ["ASSET1D-4","ASSET1D-5"] 当前计划不自动执行 live 导入;回滚路径为按导入批次删除未被业务引用的 EA-DOC 台账或改为 archived。 当前未执行 live 导入;等待用户 A/B/C 二次确认;回滚路径为按导入批次删除未被业务引用的 EA-DOC 台账或改为 archived。
9 ASSET1D-7 ASSET1D 收口与提交 汇总本地门禁、部署结果、dry-run 报告、人工 UI 待办和二次确认状态,并用中文提交 Issue CSV 状态。 自动项完成并回填状态;人工项如未完成保持 TODO 或 PAUSED 说明;git commit 信息中文并引用 ASSET1D。 受影响流程:部署验收 -> 资产试录 -> 证据归档 -> 后续人工导入决策;验证步骤:git status;git diff --check;提交后 git status 干净。 git|manual DONE DONE DONE issues/2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv ["ASSET1D-2","ASSET1D-5"] 自动项已收口;ASSET1D-4 UI 试录和 ASSET1D-6 live 导入确认保持 TODO;本次提交只记录合同与事实状态,不伪造人工验收。 ASSET1D-4 公网 UI 试录已完成;ASSET1D-6 live 导入确认保持 TODO;本次提交记录合同与事实状态,不伪造 EA-DOC 写入;回滚路径:提交前发现阻断则保持 TODO 并不推进 EA-DOC 写入。
10 ASSET1D-8 资产创建 metadata 校验 500 修复 公网 ASSET1D-4 UI 试录保存资产时,POST /api/assets 因 Zod v4 record schema 写法不兼容返回 500,需要修复为参数校验可解析 metadata。 资产创建接口带 metadata 对象时不再 500;公网 UI 可继续试录 FA/EA-SYS/EA-REPO/EA-BKP;不改变权限模型或数据迁移。 受影响流程:管理员新建资产 -> 填写 metadata/保密说明 -> 保存 -> 列表回看;验证步骤:cd server && node --check src/routes/assets.js;cd server && npm run test -- tests/unit/routes/assets.validation.test.js;公网重跑 scripts/qa/run-asset1d-public-trial.sh。 node|vitest|playwright DONE DONE DONE server/src/routes/assets.js;server/tests/unit/routes/assets.validation.test.js ["ASSET1D-3"] 已将 metadata schema 修正为 Zod v4 兼容写法并部署;目标单测通过,公网 UI 试录复跑通过;初始失败 requestId 56d66b2c-02b5-4a99-8d8f-709c1d76b190;回滚路径:恢复 metadata schema 写法并将 ASSET1D-4 保持 blocked。