squabble fight classifies red checks as self-win | escalate | assign-owner. A gate that could
not run reports green, so the engine never looks at it. That is the entire fake-green class: a
scanner goes missing, a stub writes [], the check goes green, and the gate silently stops being a
gate.
Directive: .machine_readable/bot_directives/gate_triage.a2ml (added in #57).
The detection needs no workflow change
The unavailability marker already exists in the Actions jobs API. A vacuous run reads:
Run <scanner> scan conclusion = skipped
Create stub findings conclusion = success
check conclusion = success
That step-conclusion pair is the machine-readable "I could not run" report. Nothing needs to be
added to any workflow to emit it.
Scope
- Extend the run inspector to fetch step conclusions for checks that concluded success, not only
for reds.
- Match the stub signature. Where it matches, classify.
- Emit
escalate only, carrying evidence: run-count, stub-rate, upstream-exists,
target-tech-present.
- Check Axis 0 first: a gate skipped because its declared
@gitforge_OperatorType or @channel
does not match is correctly inapplicable by declaration — report not-applicable, do not
escalate it. Declarations live in 0.1-AI-MANIFEST.a2ml.
Two hard constraints
Do not break the SPARK proof. spark/ proves the only transition into Green is a required check
that actually ran and passed. Unavailability must classify as escalate, never self-win.
escalate is an existing terminal non-green state, so a classifier that only ever emits it leaves the
proof untouched. Go/no-go: if the change stays inside escalate, implement it; if it needs a new
state, write a spec first and stop. Deletion of a worthless gate is a recommendation to the owner,
never an enacted transition.
Standalone. gitbot-fleet/robot-repo-automaton takes precedence wherever it is present and
working; this repo is the backup for people who adopt a squabbler per repo and nothing else. ANCHOR
already declares hypatia-dependent as an IS-NOT — the signature match must be scanner-agnostic,
keyed off the directive's signature-skipped-steps / signature-success-steps lists rather than
hardcoding Hypatia.
Why now
The Hypatia gate was measured on 2026-09-03 to have four independent routes to a fake-clean
result, and had been green-and-meaningless across ~91 repos. Every one of those greens would have
been caught by this check on its first run.
squabble fightclassifies red checks as self-win | escalate | assign-owner. A gate that couldnot run reports green, so the engine never looks at it. That is the entire fake-green class: a
scanner goes missing, a stub writes
[], the check goes green, and the gate silently stops being agate.
Directive:
.machine_readable/bot_directives/gate_triage.a2ml(added in #57).The detection needs no workflow change
The unavailability marker already exists in the Actions jobs API. A vacuous run reads:
That step-conclusion pair is the machine-readable "I could not run" report. Nothing needs to be
added to any workflow to emit it.
Scope
for reds.
escalateonly, carrying evidence:run-count,stub-rate,upstream-exists,target-tech-present.@gitforge_OperatorTypeor@channeldoes not match is correctly inapplicable by declaration — report
not-applicable, do notescalate it. Declarations live in
0.1-AI-MANIFEST.a2ml.Two hard constraints
Do not break the SPARK proof.
spark/proves the only transition intoGreenis a required checkthat actually ran and passed. Unavailability must classify as
escalate, neverself-win.escalateis an existing terminal non-green state, so a classifier that only ever emits it leaves theproof untouched. Go/no-go: if the change stays inside
escalate, implement it; if it needs a newstate, write a spec first and stop. Deletion of a worthless gate is a recommendation to the owner,
never an enacted transition.
Standalone.
gitbot-fleet/robot-repo-automatontakes precedence wherever it is present andworking; this repo is the backup for people who adopt a squabbler per repo and nothing else. ANCHOR
already declares
hypatia-dependentas an IS-NOT — the signature match must be scanner-agnostic,keyed off the directive's
signature-skipped-steps/signature-success-stepslists rather thanhardcoding Hypatia.
Why now
The Hypatia gate was measured on 2026-09-03 to have four independent routes to a fake-clean
result, and had been green-and-meaningless across ~91 repos. Every one of those greens would have
been caught by this check on its first run.