docs: document fleet merge-gate audit rules - #77
Merged
Conversation
added 2 commits
August 5, 2026 12:34
…es live Convert hlr-research's required-check gate from classic branch protection to a no-bypass repository ruleset, making all 13 fleet required-check gates uniform on rulesets. Document the two-mechanism reality, the rule that an audit MUST query both endpoints (push restrictions remain classic-only on 10 repos), how to read Actions results via check-runs, how to prove a gate, and the bypass picture for both mechanisms.
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.
Intent
Settle one merge-gate mechanism across the heavyliftrental (HLR) fleet and record where the fleet's gates live so a future audit queries the right endpoint. Investigation established that a GitHub required-check merge gate can live in two independent mechanisms: repository rulesets (/repos//rulesets) and classic branch protection (/repos//branches/main/protection); querying one returns an answer that reads identically to 'no gate' for a repo gated by the other. The fleet standard was chosen as repository rulesets with no bypass actors (12 of 13 repos were already there, it is the newer mechanism, it matches the existing admiralty doctrine, and it closes the admin walk-through classic protection leaves open). The one odd repo, hlr-research, was on the classic path only as a 2026-08-04 rollout artifact (a ruleset could not activate until its workflow ran on main), not by any intrinsic need, so it was converted to a no-bypass ruleset and its gate re-proven live (broke a real WLL-classification invariant -> required check red + mergeable_state blocked; restored -> green + clean; throwaway PR closed unmerged, branch deleted, main untouched).
IMPORTANT for the reviewer reading only the diff: the actual mechanism conversion happened on GitHub infrastructure (repository settings via the API), which is not version-controlled, so the ONLY committed change is a single new documentation file, docs/merge-gate-audit.md. That is by design and matches the task: the deliverable to this repo is the documentation. The doc records the two-mechanism reality, the rule that an audit MUST query BOTH endpoints (push restrictions remain classic-only on 10 of 13 repos, a real coexistence reason), how to read GitHub Actions results via /commits//check-runs rather than the Statuses API, the proof method, and the bypass picture for both mechanisms including a captain-facing finding that the 10 classic push restrictions have enforce_admins:false (flagged as a separate decision, not changed here). This is firstmate's own shared tracked material; the doc follows repo style (one sentence per line, plain dashes, no em dashes) and is intentionally a reference doc under docs/ rather than inline in AGENTS.md.
What Changed
docs/merge-gate-audit.mddocumenting that GitHub merge-gate audits must query both repository rulesets and classic branch protection, read Actions results through check-runs, and prove required-check gates by observing blocked and clean PR states.hlr-researchconversion details, bypass posture, and the remaining separateenforce_adminsdecision for classic push restrictions.README.mdand the admiralty fleet repo documentation.Risk Assessment
✅ Low: Captain, the change is a single bounded documentation addition, and I did not find any material correctness, safety, or maintainability risks in the new merge-gate audit guidance.
Testing
Diff whitespace validation passed; the repository's changed-file selector intentionally selected no suites for this generic docs-only path; a focused content checklist confirmed the required audit method and fleet-state claims; the doc rendered to HTML for reviewer-visible inspection; the no-em-dash style check passed; and the tracked working tree remained clean.
Evidence: Rendered merge-gate audit documentation
Evidence: Audit procedure content checklist
merge-gate-audit documentation content check source: docs/merge-gate-audit.md PASS both_endpoints: An audit MUST query both endpoints and combine the answers. PASS rulesets_endpoint: Repository rulesets PASS branch_protection_endpoint: Classic branch protection PASS statuses_wrong: The GitHub Statuses API is the wrong endpoint for GitHub Actions results. PASS check_runs: /commits/<ref>/check-runs PASS proof_failure: mergeable_state: blocked PASS proof_success: mergeable_state: clean PASS fleet_standard: The chosen fleet standard for the required-check gate is the repository ruleset with no bypass actors. PASS hlr_research_conversion: hlr-researchwas converted PASS no_bypass: bypass_actors: [] PASS push_restrictions: Push restriction (10 of 13) PASS enforce_admins_decision: Whether to setenforce_admins: true` on the ten push restrictions is a separate decision result: content checklist passedEvidence: Changed-file test runner summary
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
✅ **Review** - passed
✅ No issues found.
✅ **Test** - passed
✅ No issues found.
git diff --check 7778ca3246868064e4e33531174a5032f705fb76..9208246ad1bd53c7562d357b6148db9ca1fd597fbin/fm-test-run.sh --changed --base 7778ca3246868064e4e33531174a5032f705fb76 --json /tmp/no-mistakes-evidence/01KZ8YT6P2XXW7VTKNBZTW2YTD/fm-test-run-changed.jsonContent checklist againstdocs/merge-gate-audit.md, written to/tmp/no-mistakes-evidence/01KZ8YT6P2XXW7VTKNBZTW2YTD/merge-gate-audit-content-check.txtRendereddocs/merge-gate-audit.mdto/tmp/no-mistakes-evidence/01KZ8YT6P2XXW7VTKNBZTW2YTD/merge-gate-audit-render.htmlif grep -n $'—' docs/merge-gate-audit.md; then exit 1; figit status --short✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.