fix(ci): repair fork-owned marker guardrail and dedupe sync catch-all - #78
Merged
Conversation
|
❌ Nix build failed Hash mismatch in
Please update |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related Issue
Follow-up to #75 / #76.
Problem
Two defects in the sync workflow's failure reporting:
.github/FORK_OWNED_FILESpads entries aspath<spaces>::<space>marker. The guardrail parsed the path withsed -e 's/[[:space:]]\+::.*$//'— GNU's BRE\+one-or-more extension. That is correct onubuntu-latest, where the guardrail has been passing (prior clean syncs pushed bygithub-actions[bot]required it to pass). It only misparses under BSDsed, where\+is not a BRE quantifier, so the list can't be verified locally on macOS.failure(), so it fires alongside the dedicated conflict issue whenever the "Fail job on conflict" step exits non-zero — exactly how sync: upstream sync failed (2026-09-12) #76 was created for the same run as sync: upstream merge conflicts require manual resolution #75.What changed
[[:space:]]*::(works under both GNU and BSDsed) and trim trailing whitespace from the marker; treat an entry that parses to an empty path or marker as malformed instead of silently passing (an empty marker madegrep -Fmatch anything).failure() && steps.merge.outputs.merge_state != 'conflicts' && steps.verify.outputs.guard_state != 'fail'. It stays quiet when the conflict or guardrail path already opened its own issue, and still fires for genuine unexpected failures (push rejection, etc.).Verification
.github/FORK_OWNED_FILES: 31 entries, 0 missing, 0 marker-missing; on the working tree with in-progress additions, 33 entries, 0/0.Fuck Permissions Mode).Correction
An earlier version of this description claimed the guardrail was broken on CI and would fail the next clean sync. That was wrong. The committed line used GNU BRE
\+, which correctly matches the padded run on the ubuntu runner; the failure I reproduced came from transcribing the pattern as[[:space:]]::(dropping\+) and testing that instead. Prior clean syncs pushed by the workflow confirm the guardrail passed on CI. The change stands as a portability improvement — it lets the list be verified locally — not as a CI fix.Checklist
gen-changesetsskill, or this PR needs no changeset. (CI workflow only — not user-perceivable.)gen-docsskill, or this PR needs no doc update.