test(web): enforce complete one-pass smoke closure
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-09-07 11:47:42 +08:00
parent d5e736b80d
commit f87a72732c
4 changed files with 27 additions and 2 deletions

View File

@@ -58,6 +58,7 @@ const audit = {
totalFeatures: smokePlan.cases.length,
attempts: smokeReport.cases.reduce((sum, entry) => sum + Number(entry.attempts ?? 0), 0),
passed: smokeReport.cases.filter((entry) => entry.status === "PASS").length,
resolved: smokeReport.cases.filter((entry) => entry.status === "PASS").length + focusedPasses.size,
initialFailed: failedSmoke,
unresolved: unresolvedSmoke,
focusedFix: smokeFix.fixes,
@@ -80,4 +81,4 @@ const audit = {
};
const outputPath = path.join(root, "tests/golden/WBV2/feature-completeness-audit.json");
fs.writeFileSync(outputPath, `${JSON.stringify(audit, null, 2)}\n`);
process.stdout.write(`wbv2-feature-completeness-audit status=${audit.status} modules=${audit.implementation.workflowModules.implemented}/${audit.implementation.workflowModules.total} tasks=${audit.implementation.productTasks.implemented}/${audit.implementation.productTasks.total} routes=${audit.routeCoverage.classifiedCount}/${audit.routeCoverage.unitCount} verified=${audit.behavioralEvidence.verifiedUnits} unverified=${audit.behavioralEvidence.unverifiedUnits} smokePassed=${audit.smoke.passed}/${audit.smoke.totalFeatures} blocked=${audit.actualMissingOrBlocked.filter((item) => item.status === "BLOCKED").length}\n`);
process.stdout.write(`wbv2-feature-completeness-audit status=${audit.status} modules=${audit.implementation.workflowModules.implemented}/${audit.implementation.workflowModules.total} tasks=${audit.implementation.productTasks.implemented}/${audit.implementation.productTasks.total} routes=${audit.routeCoverage.classifiedCount}/${audit.routeCoverage.unitCount} verified=${audit.behavioralEvidence.verifiedUnits} unverified=${audit.behavioralEvidence.unverifiedUnits} smokeResolved=${audit.smoke.resolved}/${audit.smoke.totalFeatures} blocked=${audit.actualMissingOrBlocked.filter((item) => item.status === "BLOCKED").length}\n`);

View File

@@ -21,6 +21,27 @@ assert.equal(new Set(plan.cases.map((item) => item.featureId)).size, plan.cases.
assert.equal(new Set(plan.cases.map((item) => item.smokeId)).size, plan.cases.length);
assert.ok(plan.cases.every((item) => item.runOnce === true && item.maxAttempts === 1));
assert.equal(report.cases.length, plan.cases.length);
assert.ok(report.cases.every((item) => item.attempts === 1), "every feature must have exactly one smoke attempt");
const initialPassed = report.cases.filter((item) => item.status === "PASS");
const initialFailed = report.cases.filter((item) => item.status !== "PASS");
const focusedPassed = focused.fixes.filter((item) => item.status === "PASS");
assert.deepEqual(
focusedPassed.map((item) => item.featureId).sort(),
initialFailed.map((item) => item.featureId).sort(),
"focused fixes must resolve exactly the initial smoke failures",
);
assert.equal(focused.retries, 0);
const resolved = initialPassed.length + focusedPassed.length;
assert.equal(manifest.status, "pass");
assert.deepEqual(manifest.summary, {
totalFeatures: plan.cases.length,
smokeAttempts: plan.cases.length,
initialPassed: initialPassed.length,
focusedFixPassed: focusedPassed.length,
blocked: 0,
retries: 0,
remainingBlocker: null,
});
assert.equal(resolved, plan.cases.length);
for (const artifact of [manifest.plan, manifest.report, manifest.focusedFixReport, manifest.planDocument]) assert.equal(sha(artifact.path), artifact.sha256, `smoke artifact hash mismatch ${artifact.path}`);
process.stdout.write(`wbv2-feature-smoke-plan-ok features=${plan.cases.length} attempts=${manifest.summary.smokeAttempts} initialPassed=${manifest.summary.initialPassed} focusedFixPassed=${manifest.summary.focusedFixPassed} blocked=${manifest.summary.blocked} retries=${focused.retries}\n`);
process.stdout.write(`wbv2-feature-smoke-plan-ok features=${plan.cases.length} attempts=${manifest.summary.smokeAttempts} initialPassed=${manifest.summary.initialPassed} focusedFixPassed=${manifest.summary.focusedFixPassed} resolved=${resolved}/${plan.cases.length} blocked=${manifest.summary.blocked} retries=${focused.retries}\n`);