feat(P0-A): 整合第一版并冻结最终发布 #1

Open
tuyixuan wants to merge 115 commits from codex/wp7-07 into codex/wp0-09
2 changed files with 14 additions and 0 deletions
Showing only changes of commit 8abf1397a6 - Show all commits
+5
View File
@@ -47,6 +47,11 @@ export function validateCoverageEvidence(evidence) {
const actual = new Set(evidence.coverage_units.map((unit) => unit.page_id));
const missing = REQUIRED_COVERAGE_UNITS.filter((unit) => !actual.has(unit));
if (missing.length) return blocked('coverage_units_incomplete', { missing });
const missingStates = evidence.coverage_units
.filter((unit) => REQUIRED_COVERAGE_UNITS.includes(unit.page_id))
.filter((unit) => !Array.isArray(unit.states) || unit.states.length === 0)
.map((unit) => unit.page_id);
if (missingStates.length) return blocked('coverage_states_incomplete', { missingStates });
const viewportKeys = new Set((evidence.viewports ?? []).map((viewport) => JSON.stringify(viewport)));
const missingViewports = REQUIRED_VIEWPORTS.filter((viewport) => !viewportKeys.has(JSON.stringify(viewport)));
if (missingViewports.length) return blocked('candidate_viewports_incomplete', { missingViewports });
+9
View File
@@ -27,6 +27,15 @@ test('WP7-05 requires all 22 coverage units and both exact candidate viewports',
assert.equal(result.missing.length, REQUIRED_COVERAGE_UNITS.length);
});
test('WP7-05 requires state evidence for every listed coverage unit', () => {
const result = validateCoverageEvidence({
coverage_units: REQUIRED_COVERAGE_UNITS.map((page_id) => ({ page_id, states: [] })),
viewports: [],
});
assert.equal(result.code, 'coverage_states_incomplete');
assert.equal(result.missingStates.length, REQUIRED_COVERAGE_UNITS.length);
});
test('WP7-05 preserves upstream external blockers instead of declaring Green', () => {
const result = runWp705Gate({
candidatePath: 'missing-release-candidate.json',