diff --git a/.github/workflows/maint-71-merge-sync-prs.yml b/.github/workflows/maint-71-merge-sync-prs.yml index 7e13699d4..1bc57ca81 100644 --- a/.github/workflows/maint-71-merge-sync-prs.yml +++ b/.github/workflows/maint-71-merge-sync-prs.yml @@ -267,8 +267,13 @@ jobs: process.env.DISPATCH_SYNC_HASH, ].map((value) => String(value || '').trim()).find(Boolean) || ''; const selector = raw.startsWith(prefix) ? raw.slice(prefix.length) : raw; - if (selector && !['candidate', 'campaign'].includes(selector)) { - throw new Error('active sync selector must be candidate or campaign'); + const namedSelectors = new Set(['candidate', 'campaign', 'delivery', 'dev-tool']); + const legacyHash = /^[0-9a-f]{12,64}$/i.test(selector); + if (selector && !namedSelectors.has(selector) && !legacyHash) { + throw new Error( + 'active sync selector must be candidate, campaign, delivery, dev-tool, ' + + 'or a legacy hex hash', + ); } fs.appendFileSync(process.env.GITHUB_OUTPUT, `selector=${selector}\n`); fs.appendFileSync(process.env.GITHUB_OUTPUT, `candidate=${selector === 'candidate'}\n`); diff --git a/tests/workflows/test_sync_delivery_liveness.py b/tests/workflows/test_sync_delivery_liveness.py index 31772bb4b..da56b51c3 100644 --- a/tests/workflows/test_sync_delivery_liveness.py +++ b/tests/workflows/test_sync_delivery_liveness.py @@ -31,7 +31,9 @@ def test_maint71_has_proof_bound_review_resolution_and_exact_evidence_promotion( assert "canary_evidence_json: JSON.stringify(evidence)" in workflow assert "cancel-in-progress: false" in workflow assert "EXCLUDED_REPOS_INPUT: stranske/Collab-Admin" in workflow - assert "active sync selector must be candidate or campaign" in workflow + assert "['candidate', 'campaign', 'delivery', 'dev-tool']" in workflow + assert "/^[0-9a-f]{12,64}$/i.test(selector)" in workflow + assert "active sync selector must be candidate, campaign, delivery, dev-tool, " in workflow assert "'stale_closed'" in workflow assert "paginateWithRetry(api.rest.actions.listWorkflowRuns" in workflow assert "Maint 71 requires OWNER_PR_PAT" in executor