From 41e30bb1289ef7761f711f524b8f1a8305ce31fc Mon Sep 17 00:00:00 2001 From: Codex Automation Date: Sun, 16 Aug 2026 16:13:56 -0500 Subject: [PATCH 1/2] fix: accept Maint 71 delivery selectors --- .github/workflows/maint-71-merge-sync-prs.yml | 9 +++++++-- tests/workflows/test_sync_delivery_liveness.py | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) 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..8e6a6d3f5 100644 --- a/tests/workflows/test_sync_delivery_liveness.py +++ b/tests/workflows/test_sync_delivery_liveness.py @@ -31,7 +31,12 @@ 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 From 00f43137aef008fdf742779f0643a8c7226ba266 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 16 Aug 2026 21:24:02 +0000 Subject: [PATCH 2/2] chore(autofix): formatting/lint --- tests/workflows/test_sync_delivery_liveness.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/workflows/test_sync_delivery_liveness.py b/tests/workflows/test_sync_delivery_liveness.py index 8e6a6d3f5..da56b51c3 100644 --- a/tests/workflows/test_sync_delivery_liveness.py +++ b/tests/workflows/test_sync_delivery_liveness.py @@ -33,10 +33,7 @@ def test_maint71_has_proof_bound_review_resolution_and_exact_evidence_promotion( assert "EXCLUDED_REPOS_INPUT: stranske/Collab-Admin" 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 "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