OPOLICY1 对齐制度与OA启用门禁

这个提交包含在:
2026-05-24 01:43:30 +08:00
父节点 65513a5291
当前提交 d6ae1cff89
共修改 10 个文件,包含 98 行新增和 9 行删除
@@ -78,6 +78,7 @@ const qaFlowDir = path.join(rootDir, "artifacts", "qa-flow");
const oalaunchCsv = path.join(rootDir, "issues", "2026-05-23_16-49-39-oa-final-launch-readiness-v1.csv");
const oaopsCsv = path.join(rootDir, "issues", "2026-05-22_20-09-22-oa-real-use-stabilization-v1.csv");
const assetCsv = path.join(rootDir, "issues", "2026-05-23_10-42-03-oa-asset-deploy-and-trial-v1.csv");
const opolicyCsv = path.join(rootDir, "issues", "2026-05-24_01-20-52-oa-policy-system-alignment-v1.csv");
function readJson(file) {
if (!file || !fs.existsSync(file)) return null;
@@ -302,10 +303,13 @@ try {
const oaopsRows = readCsvRows(oaopsCsv);
const assetRows = readCsvRows(assetCsv);
const oalaunchRows = readCsvRows(oalaunchCsv);
const opolicyRows = readCsvRows(opolicyCsv);
const oaopsRequired = ["OAOPS1-3", "OAOPS1-4", "OAOPS1-5", "OAOPS1-6"];
const oalaunchRequired = ["OALAUNCH1-0", "OALAUNCH1-1", "OALAUNCH1-2", "OALAUNCH1-3", "OALAUNCH1-4", "OALAUNCH1-5", "OALAUNCH1-6", "OALAUNCH1-7", "OALAUNCH1-8"];
const opolicyRequired = ["OPOLICY1-0", "OPOLICY1-1", "OPOLICY1-2", "OPOLICY1-3", "OPOLICY1-4", "OPOLICY1-5", "OPOLICY1-6", "OPOLICY1-7"];
const oaopsStatuses = statuses(oaopsRows, oaopsRequired);
const oalaunchStatuses = statuses(oalaunchRows, oalaunchRequired);
const opolicyStatuses = statuses(opolicyRows, opolicyRequired);
const assetDone = allPrefixDone(assetRows, "ASSET1D-");
const latestOaops = latestSummary(["oa-real-use-daily-", "oaops1-daily-", "oaops1-daily-after-throttle-"]);
const latestAssetTrial = latestSummary(["asset1d-public-trial-"]);
@@ -314,6 +318,7 @@ const latestAssetImport = latestSummary(["asset-redacted-index-import-live-"]);
const backupEvidence = resolveEvidenceRef(process.env.OALAUNCH_BACKUP_EVIDENCE || "");
const permissionEvidence = resolveEvidenceRef(process.env.OALAUNCH_PERMISSION_EVIDENCE || "");
const businessEvidence = resolveEvidenceRef(process.env.OALAUNCH_BUSINESS_EVIDENCE || "");
const policyEvidence = resolveEvidenceRef(process.env.OALAUNCH_POLICY_EVIDENCE || opolicyCsv);
const manualAccept = String(process.env.OALAUNCH_MANUAL_ACCEPT || "").trim();
const stabilization = summarizeStabilization(["oa-real-use-daily-", "oaops1-daily-", "oaops1-daily-after-throttle-"]);
@@ -326,6 +331,10 @@ for (const [id, state] of Object.entries(oaopsStatuses)) {
for (const [id, state] of Object.entries(oalaunchStatuses)) {
if (!state.done) openGates.push({ gate: id, reason: "OALAUNCH1 本轮合同/脚本/事实源/门禁尚未全部回填 DONE", state });
}
for (const [id, state] of Object.entries(opolicyStatuses)) {
if (!state.done) openGates.push({ gate: id, reason: "OPOLICY1 制度与 OA 对齐证据尚未全量收口", state });
}
if (!policyEvidence?.exists) openGates.push({ gate: "OPOLICY1_POLICY_EVIDENCE", reason: "缺制度边界和资料留存证据;可用 OALAUNCH_POLICY_EVIDENCE 指定脱敏证据路径" });
if (!assetDone) openGates.push({ gate: "ASSET1D", reason: "资产台账部署与试录未全量完成" });
if (!latestOaops) openGates.push({ gate: "OAOPS1_DAILY_REPORT", reason: "未找到 OAOPS1 每日巡检 summary.json" });
if (latestOaops && /BLOCKED|FAIL|ERROR/i.test(latestOaops.status)) findings.push({ source: "latest_oaops1_daily", severity: "blocker", status: latestOaops.status, reportRef: latestOaops.reportRef });
@@ -389,12 +398,15 @@ const summary = {
backupEvidence,
permissionEvidence,
businessEvidence,
policyEvidence,
stabilization,
},
issueStatus: {
oaopsRequired: oaopsStatuses,
oalaunchRequired,
oalaunchStatuses,
opolicyRequired,
opolicyStatuses,
assetDone,
},
gates: {
@@ -429,8 +441,12 @@ const summary = {
"image_ocr",
"complex_bpm",
"budget_control",
"complex_procurement",
"e_signature",
"full_e_archive",
"erp_write",
"bank_statement_import",
"ai_rule_writes",
"real_payment_provider",
"wecom_hr_deep_mirror",
"emergency_takeover",