Skip to content

fix(GATE-CI-ENFORCEMENT-FLOOR): the diff-scoped walk gets a floor, and its base rule gets a test (#1809) - #1814

Merged
localai-bot merged 14 commits into
mainfrom
row/1809
Aug 24, 2026
Merged

fix(GATE-CI-ENFORCEMENT-FLOOR): the diff-scoped walk gets a floor, and its base rule gets a test (#1809)#1814
localai-bot merged 14 commits into
mainfrom
row/1809

Conversation

@localai-bot

@localai-bot localai-bot commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

fix(GATE-CI-ENFORCEMENT-FLOOR): the diff-scoped walk gets a floor, and its base rule gets a test

commit-protocol-tag and documentation-checkpoint have been red on main
since 2026-08-13 and cannot recover on their own. Their walk bases on the head
of the last SUCCESSFUL push run, so no green run means the base never advances,
and every later push re-walks the same violations over a range one commit wider.

Re-measured at bacb71109: LAST_GREEN is fafa16f0f of 2026-08-13T01:53, the
range is 499 first-parent commits with no merges, and 41 distinct commits in it
have no available remedy. 35 fail check-commit-trailers.py --range, of which
20 carry no FOLLOWING_AGENTS_PROTOCOL marker at all and the other 15 carry it
one to nine times in a form the strict contract rejects; 6 disjoint ones fail
check-role-discipline.py. check-now-current.py passes over the whole range
and forgives nothing. Every one of the 41 is on main, and the only repair is a
rewrite AGENTS.md forbids.

What changes

scripts/ci-enforcement-floor.txt records one commit the walk never goes
behind. The base becomes the newer of the last green commit and that floor,
decided by git merge-base --is-ancestor rather than by a commit date an author
controls and a rebase can move backwards.

The four byte-similar copies of the base selection in .github/workflows/ci.yml
collapse into scripts/ci-walk-base.py.

The property that survives

A cancelled run stays lossless. The floor is a LOWER CLAMP on an otherwise
unchanged base, so while it sits behind the last green commit the resolved base
is byte-identical to today's. The one window that skips anything is
last_green..floor, which opens at an advance and closes at the next green push
run; it is the forgiveness being asked for, what it skips is fixed at the
advance rather than growing, and the spec enumerates all 41 commits with sha,
date and subject.

That window is currently OPEN and will stay open for a while, which the first
draft of this change described backwards. LAST_GREEN is fafa16f0f and has
not moved since 2026-08-12T23:53Z: of the 100 most recent push runs of
ci.yml on main, 93 are cancelled, 6 failed and none succeeded. So the floor
sits AHEAD of the last green commit, not behind it, the resolved base is the
floor on every push, and the walk grows by one per merge until a push run
finishes green. Correctness is unaffected — floor..HEAD still covers every
post-floor commit — so this is an accuracy repair to the argument, not to the
mechanism.

Proved rather than asserted. A violating commit whose run is cancelled is still
named by the next run's gates, and under the naive github.event.before base
rev-list before..head covers it with nothing, which is #863 exactly.

Why the extraction is the point

Of the four inline blocks, exactly one was ever replayed by a test —
agent-record's, by test_main_baseline.py::AgentRecordDiffRangeTests, and only
under a shim that stubs every python3 call, so it pinned which checker ran with
which range string and could not see the base rule. The other three were executed
by nothing. Nothing in the tree could have caught the ratchet.
tests/scripts/test_ci_walk_base.py is 31 cases over a real throwaway
repository, because every question here is about ancestry.

What is narrowed, and why

41 commits stop being walked. Enforcing on an immutable landed commit is not
enforcement: no contributor action clears it, so it is a permanent red rather
than a gate, and a permanent red is read by nobody — which is #1722's effect and
strictly worse than a smaller gate that is read. The gate's purpose is to stop a
NEW violation and that is untouched. No assertion is deleted, no checker is
modified, and advancing the floor stays a reviewed commit that must name what it
forgives.

A per-commit exemption list was evaluated and rejected: AGENTS.md has no waiver
registry, the mechanism would have to be built three more times in checkers that
have no exemption concept, and it never shrinks the walk, so the range would
grow by one per merge forever. Reverting to github.event.before was rejected
because it reintroduces #863 outright.

Evidence

Measured by reading the gates' run: bodies out of ci.yml with a YAML parser
and executing those exact bytes, so nothing about the gates is transcribed.

Case grep strict doc-checkpoint
the implementation commit, floor in place 0 0 0
the floor moved back to the frozen base 1 1 1
the four resolver call sites deleted 1 1 1
a new commit with no marker 1 1 0
a new product commit naming no pull request 0 0 1
the control: same path and trailers, (#1809) 0 0 0
the floor record emptied to a comment 2 2 2

The last row is fail-closed, and it is a measurement rather than an intention: a
broken floor record read as "no floor" would silently restore the ratchet, so
the parse refuses and every step aborts under set -eu before invoking a single
checker.

The call-site deletion also reds test_ci_walk_base.py at 2 of 31. Both
mutations were restored and each restoration verified by sha256sum -c with a
clean git status.

One trap is recorded in the spec rather than quietly fixed: the first
no-trailer mutation named the marker in its own body while explaining that it
lacked one, which satisfied the presence grep and read as a passing gate.

Three existing assertions that matched the old inline shell as a string moved
rather than went away. test_main_baseline's shim now executes the resolver
instead of stubbing it, and its before fallback case and test_agent_gates's
role-range case now EXECUTE the resolver instead of grepping the YAML — stronger
than the literals they replace.

A fresh review returned FAIL, and this is the repair

Five findings, all in the RECORD. The mechanism passed: scripts/ci-walk-base.py,
the recorded floor sha, .github/workflows/ci.yml, tests/scripts/test_ci_walk_base.py
and the three checkers are byte-identical, and git diff --stat against the
reviewed head touches one file under .agents/.

  • Two of the 41 enumerated shas resolved to nothing. ddff09093663 and
    be4a3edf1727 are not objects; the commits are ddff090936bb and
    be4a3edf17b2. That is load-bearing rather than cosmetic, because
    scripts/ci-enforcement-floor.txt says of that table "That record is the only
    place that now says those violations happened". All three sites are corrected
    and the whole table is now verified rather than spot-checked: 41 of 41 unique
    shas resolve under git rev-parse --verify -q '<sha>^{commit}', and every
    recorded date agrees with the commit's author or committer date.
  • A mitigation was claimed that does not exist. Risk 2 said a too-far-forward
    floor is caught by ancestry and by RecordedFloorTests. Those guards catch an
    OFF-HISTORY floor. A floor advanced too far to a commit that really is on
    main IS an ancestor of HEAD, so both accept it — measured with the floor
    set to HEAD itself, where known and is_ancestor are both true, the
    resolver returns HEAD, and all three diff-scoped steps return rc 0 vacuously
    over an empty walk. The risk now says the only mitigation is the reviewed
    advance. This is a different failure from the fail-closed case in the evidence
    table above, and both are stated as what they are.
  • The floor swallows the one in-checker exception it cites as precedent.
    281b4bc76c0e (A landed commit on main carries a malformed Assisted-by, because the PR BODY was never corrected with its commits #1262) is below the floor, so
    check-commit-trailers.py --range fafa16f0f..origin/main prints its
    This is DEBT, not success banner once and --range bacb71109..origin/main
    prints it zero times. The entry is not deleted or bypassed and
    LandedMessageExceptions still pins it; only its runtime visibility on the
    push lane is lost, and the spec now says so.
  • The steady-state claim was wrong, corrected above and in two places in the
    spec.
  • The floor forgives by RANGE, not by violation. A checker written tomorrow
    that finds a new class of defect in the pre-floor range is forgiven silently
    too, which an exemption list would not do. That is the strongest argument
    against the shape chosen here and the comparison was one-sided without it.

The floor is advanced once, and this is the first exercise of that mechanism

Risk 1 arrived one day after the floor was recorded, and it is now
discharged.
Re-measured independently at origin/main d60692c89, over
bacb71109..origin/main, ten first-parent commits: the presence grep is rc 0,
check-commit-trailers.py --range is rc 0, check-now-current.py is rc 0, and
check-role-discipline.py is rc 1 on exactly one commit.

That commit is c00b99c7c, fix(LTX25-DIT-ATTN-ARM-PARSE): match every DiT attention arm exactly and refuse a fourth value, 2026-08-24. It landed
src/vllm/model_executor/models/ltx2_device.cpp and
tests/vllm/models/test_ltx2_device.cpp — product code and its own test —
straight onto main with no row/<ID> branch in its history. Its message is
clean and passes the trailer contract, so this is a role-discipline
violation and not a trailer one: the split across the forgiven set moves from 35
trailers / 6 role discipline to 35 / 7, and the count from 41 to 42.

Why the advance is justified. c00b99c7c is on main and can only be
repaired by rewriting main, which AGENTS.md forbids. It is the same condition
as the 41 already enumerated and it produces the same failure at a smaller
scale: with the floor left at bacb71109, the agent-record role-discipline
step would red on that one commit on every future push, forever, with no action
any contributor could take to clear it. That is this row's own defect arriving
at its own merge — one commit instead of 41, and freezing again on the next one.

Why this far and no further. The floor is set to c00b99c7c itself, not to
origin/main. The walk is FLOOR..HEAD and excludes FLOOR, so this forgives
that one commit and leaves e6f4f566f, d60692c89 and everything after them
enforced. Advancing to current main would have been the same edit and would
have forgiven two commits nobody examined. Risk 2 records that nothing in the
mechanism can detect that; the review is the only control, and minimality is how
it is honoured.

c00b99c7c is enumerated as the 42nd forgiven commit with its sha, date,
subject and what it did. All 42 shas were verified to resolve
git rev-parse --verify -q '<sha>^{commit}' over all 42: 42 resolved, 0
missing, all 42 ancestors of origin/main. A full sweep, not a spot-check,
because after this lands the enumeration is the only witness that these
violations happened, and an earlier round of this list carried two shas that
resolved to nothing.

Measured after the edit, each rc captured on the command itself and never after
a pipe:

Floor grep strict trailers role discipline check-now-current.py
bacb71109 (old) 0 0 1, c00b99c7c 0
c00b99c7c (new) 0 0 0 0

git merge-base --is-ancestor c00b99c7c origin/main is rc 0, and
tests/scripts/test_ci_walk_base.py is 31 tests, 0 failures over the new value.
The gate still bites: a scratch commit above origin/main carrying no
FOLLOWING_AGENTS_PROTOCOL string anywhere — marker count printed as 0
before the run, because a mutation whose own message mentions the marker
satisfies the presence grep and reads as a pass — reds both trailer steps by
name over c00b99c7c..<scratch> while role discipline and check-now-current.py
stay rc 0. It was built with git commit-tree and never entered the worktree;
sha256sum -c on both changed files passes afterwards.

Two things follow from this being the first advance, and they point in opposite
directions. The mechanism works, and it was exercised before the pull request
introducing it had merged. And the violations are still arriving: c00b99c7c is
the second role-discipline violation in two days, after 6e73bdee3ea1. A floor
stops an unrepairable commit freezing a gate. It is not a fix for whatever is
putting product code on main without a task branch.

main moves roughly every twenty minutes, so whoever merges repeats the four
commands over c00b99c7c..origin/main and, if one reds again, advances the
floor the same way.

That re-measurement has been done once more, at the merged head. main
moved to df1ee2058, four first-parent non-merge commits above the floor. Each
rc captured on the command itself and never after a pipe:

Gate Command rc
commit-protocol-tag presence grep the loop replayed out of ci.yml, not transcribed, over c00b99c7c..origin/main 0
strict trailers python3 scripts/check-commit-trailers.py --range c00b99c7c..origin/main 0
role discipline python3 scripts/check-role-discipline.py --base c00b99c7c --head origin/main 0
now-current python3 scripts/check-now-current.py 0

git merge-base --is-ancestor c00b99c7c origin/main is rc 0, and
tests/scripts/test_ci_walk_base.py is 31 tests, 0 failures, rc 0 at the merged
head. The recorded floor is still sufficient and still minimal, so nothing
about it changes here: scripts/ci-enforcement-floor.txt is byte-identical to
the reviewed head and still reads
c00b99c7c8b64f9247230ed6220598cc5c0e347e. Whoever merges repeats the four
commands one more time, because main keeps moving.

The one review finding, repaired

A fresh review returned PASS with one nit, and this is it.
.agents/specs/ci-enforcement-floor.md presented check-role-discipline.py's
error inside a fenced block as if it were verbatim, but the block was re-wrapped
and truncated after …reached main without arriving on a task branch. with no
ellipsis marking the cut. The dropped half is the half that states the rule —
work happens in its own worktree on a row/<ID> branch and lands through a
reviewed PR or an authorized local merge naming that branch — which is the
reason c00b99c7c is a violation at all. A record that argues for forgiving a
commit was doing it with the weaker half of the evidence.

The full message is pasted rather than an ellipsis appended, because the fenced
block is part of what justifies the advance. It is the checker's single
unwrapped line, copied from its own stdout under
--base b207f34d3 --head c00b99c7c (which exits 1) and compared byte-for-byte
against the file, not retyped. The prose now names that invocation so the next
reader reproduces it instead of trusting a transcription.

git diff --stat against the reviewed head 224f9afb6 shows this commit
touching exactly one file, .agents/specs/ci-enforcement-floor.md, 5 insertions
and 4 deletions. scripts/ci-walk-base.py, scripts/ci-enforcement-floor.txt,
tests/scripts/test_ci_walk_base.py and the three checkers are untouched, and
.github/workflows/ci.yml changes only by what the merge of df1ee2058 brings
in.

Merge-time hazards, recorded rather than fixed here

  • The first origin/main conflict was real and is resolved; the second
    CONFLICTING was a GitHub artefact.
    The trial merge against af320abb2
    genuinely conflicted in scripts/agent-preflight.sh's SUITES array, so
    GitHub could produce no merge ref; 3574065e7 is merged in and both sides'
    entries are kept, af320abb2's three plus this branch's test_ci_walk_base.
    main then moved again and GitHub reported CONFLICTING/DIRTY a second
    time, for a merge Git performs cleanly. The only file both sides touched was
    .agents/issue-index.md, which .gitattributes:7 marks merge=union
    an attribute GitHub does not apply when it computes mergeability. df1ee2058
    is now merged in as well, with Auto-merging on that file and on ci.yml and
    no conflict anywhere. Merging is also what makes the advanced floor
    recordable, since RecordedFloorTests::test_recorded_floor_is_an_ancestor_of_head
    asserts the recorded value is an ancestor of HEAD and c00b99c7c landed
    after this branch left main.
  • The .agents/issue-index.md row survived both merges exactly once, and the
    second merge was verified by hand rather than trusted to the union driver
    ,
    which has twice silently dropped a tail row in this repository. Merge base
    3574065e7 carries 659 rows; this branch adds #1809, main adds #1823,
    and neither side removes one. The merged file carries 661 rows whose set is
    exactly the union of the two sides — compared as sorted sets, not counted —
    with #1809 and #1823 each appearing once, no duplicate row, the preamble
    byte-identical to both parents, and zero conflict markers across all six files
    the merge touches. The row is no longer the tail — later rows follow it — which
    is correct for an append-only union file, and it is not edited: the row's own
    prose still says 41, because an index row is never rewritten.
  • scripts/agent-preflight.sh has no SKIP left, and that is now measured at
    the merged head rather than at the previous one.
    commit-trailers and
    commit-style SKIPPED whenever origin/main was not an ancestor of HEAD,
    and the script prints NOT a green preflight: a skipped gate reported nothing about this tree itself when that happens — a rc 0 carrying a SKIP is a third
    state the exit status cannot express. Rerun with a role claimed in the working
    worktree after merging df1ee2058: zero SKIPS, the string does not appear
    in the log, NOT a green preflight does not appear, and both gates report
    ok under Commit trailers vs origin/main df1ee20584d69d2ac434c7672f9099c71abc7f49,
    alongside ok now-current range and ok issue-index append-only. The spec's
    ## Outcome line claiming "All gates green" was already corrected to say
    this.
  • scripts/ci-walk-base.py's docstring still carries the corrected
    steady-state sentence.
    It was left alone so the reviewed mechanism stays
    byte-identical; it is named in the spec so it is not left to be found.

test_cpu_x86_llamacpp_floor is red in preflight and is #618, not this row, so
the run exits rc 1 on that one gate and nothing else. It was discriminated
rather than asserted: pristine origin/main at 0a0a53e5a, run serially in its
own clone, fails the same CpuX86FloorHarnessTests cases with
NO_QUIET_WINDOW at loadavg 63-68. The rerun at the merged head reproduces
#618's recorded signature exactly —
test_a_contended_leg_is_discarded_and_never_summarised asserting
got.returncode == 2 and getting 4, waiting for quiet: 15s busy=112% builders=0 load=36.77 — which is the NO_QUIET_WINDOW (4) for GIVING_UP (2)
substitution the index row for #618 describes. The box carried loadavg 38-52
throughout, with a second session's preflight running concurrently.

Closes #1809.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]

mudler added 14 commits August 23, 2026 20:06
…because 41 commits on main can never be repaired (#1809)

`commit-protocol-tag` and `documentation-checkpoint` base their walk on the head
of the last SUCCESSFUL push run. That base is what makes a cancelled run
lossless (#822, #863), and it is also what turns one unrepairable commit into a
permanent red: no green run means the base never advances, so every later push
re-walks the same violations over a range one commit wider.

Re-measured at `bacb71109`: `LAST_GREEN` is `fafa16f0f` of 2026-08-13, the range
is 499 first-parent commits with no merges, and 41 distinct commits in it fail a
gate with no available remedy — 35 fail the strict trailer contract, 6 disjoint
ones fail role discipline. They are on `main`, and the only repair is a rewrite
`AGENTS.md` forbids.

The spec lands first and alone so the design can be read before the code
implements it. It chooses a recorded enforcement floor over a per-commit
exemption list, enumerates all 41 forgiven commits, and argues the narrowing
explicitly: enforcing on an immutable landed commit is a permanent red rather
than a gate, and a permanent red is read by nobody.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…d its base rule gets a test (#1809)

The base of the diff-scoped walk on `main` is the head of the last SUCCESSFUL
push run. That is what makes a cancelled run lossless (#822, #863) and it is
kept. What it did not anticipate is a violation with no available remedy: 41
commits between 2026-08-13 and 2026-08-23 are on `main` and can only be repaired
by rewriting `main`, which AGENTS.md forbids. No green run is reachable, the
base freezes, and every later push re-walks the same violations over a range one
commit wider. `commit-protocol-tag` and `documentation-checkpoint` have been red
for ten days for that reason alone.

`scripts/ci-enforcement-floor.txt` records one commit the walk never goes
behind, and the base becomes the newer of the last green commit and that floor,
decided by `git merge-base --is-ancestor` rather than by a commit date an author
controls. The floor is a LOWER CLAMP on an otherwise unchanged base, so while it
sits behind the last green commit -- the steady state, because that commit
advances on every green push and the floor advances only when somebody commits
an advance -- the resolved base is byte-identical to today's and a cancelled run
is still covered by the next run. The one window that skips anything is
`last_green..floor` right after an advance, which is the forgiveness being asked
for and is enumerated commit by commit in the spec.

This narrows enforcement by 41 commits and the spec argues for the narrowing
rather than hiding it: enforcing on an immutable landed commit is a permanent
red and not a gate, because no contributor action clears it, and a permanent red
is read by nobody. No assertion is deleted, no checker is modified, and a
violation landing after the floor still reds.

The four byte-similar copies of the selection collapse into
`scripts/ci-walk-base.py`. Of those four inline blocks exactly one was ever
replayed by a test, `agent-record`'s, and only under a shim that stubs every
`python3` call -- so it pinned which checker ran with which range string and
could not see the base rule. The extraction is what makes cancelled-run
losslessness an executable assertion: the new suite replays the sequence against
a real throwaway repository and carries the naive `github.event.before` base as
its positive control.

Three existing assertions moved rather than went away, because the rule they
matched as a string now lives somewhere else. `test_main_baseline`'s shim
executes the resolver for real instead of stubbing it, so its cases test the
real composition; its `before` fallback case and `test_agent_gates`'s role-range
case now EXECUTE the resolver instead of grepping the YAML, which is a stronger
statement than the literal each replaces.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
… replaying the real step bodies (#1809)

The spec's Gates table said "see ## Outcome" and there was no Outcome. This
writes it, from a run against a clone of the implementation commit with `main`
pointed at it, so a push to `main` could be replayed without touching `main`.

The gates are not transcribed. Their `run:` bodies are read out of
`.github/workflows/ci.yml` with a YAML parser and executed as-is, with each
step's declared `env:` resolved from a supplied event payload, so a change to
the workflow changes the evidence.

Four results. The three gates are GREEN on the implementation commit with the
floor in place, and all three are red on `main` today. They go RED again when
the floor is moved back to the frozen base, and RED again when the four
resolver call sites are deleted, which is the reachability half. A new commit
carrying no marker reds both trailer steps, a new product commit naming no pull
request reds role discipline, and a control sharing their path and trailers is
green, so each red is attributable to its violation rather than to the harness.
Cancelled-run losslessness is replayed live as well as in the unit suite: a
violating commit whose run is cancelled is still named by the next run, and the
naive `before` base covers it with nothing.

One trap is recorded rather than quietly fixed, because it invalidates this
class of result: the first no-trailer mutation named the marker in its own body
explaining that it lacked one, which satisfied the presence grep and read as a
passing gate.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
`main` advanced to `0a0a53e5a` while this row was in flight. Both new commits,
`849a7dd73` and `0a0a53e5a`, were re-measured against all three diff-scoped
gates and are CLEAN, so the recorded enforcement floor stays at `bacb71109` and
forgives nothing beyond the 41 commits the spec enumerates.

Merged rather than rebased so the commit `## Outcome` names as the tree it
measured, `6de046d36`, stays in this branch's history.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…e true tail after the merge (#1809)

`main` appended #1804 and #1802 while this row was in flight, and the union
merge driver placed our row BEFORE both of them. That leaves the row an
insertion in the middle of an append-only file rather than an append, which is
the shape `.gitattributes`' union driver cannot be trusted with.

The row's bytes are unchanged; only its position is. Verified by line number
rather than by reading the diff header, because the diff header shows an append
either way.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…ain that moved under this row (#1809)

Risk 1 in the spec is a violating commit landing between the recorded floor and
the merge. `main` advanced to `0a0a53e5a` while this row was in flight, so the
risk arrived and the floor was re-measured rather than assumed still correct.

Both new commits are clean on all three gates over `bacb71109..0a0a53e`, so
the floor stays where it is and forgives nothing beyond the 41 commits the spec
enumerates. Whoever merges this repeats the two commands the section names.

The section also records why `test_cpu_x86_llamacpp_floor` is red in preflight
and why that is #618 rather than this row: pristine `origin/main`, run serially
in its own clone, fails the same cases with `NO_QUIET_WINDOW` at loadavg 63-68.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…s, and the correction says how (#1809)

`git log --oneline bacb711..origin/main` prints newest first, and the pair it
returned was read in printed order, so the previous commit recorded `0a0a53e5a`
as the tip when `849a7dd73` is the tip and `0a0a53e5a` its parent. The merge
commit on this branch carries the same error in its body and cannot be repaired
without rewriting a commit that other work may already reference, so the
`## Outcome` section states the error and the correction instead of hiding it.

Nothing measured changes. The range was `bacb71109..origin/main`, which covered
both commits whichever is the tip, and both are clean on all three gates. The
floor stays at `bacb71109`.

The section also names the two `CpuX86FloorHarnessTests` cases that fail on
pristine main rather than saying "the same cases", because a claim that two runs
failed alike has to name what failed.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…ead, and #618 is discriminated twice (#1809)

The `## Outcome` said `test_cpu_x86_llamacpp_floor` is the one red in the final
preflight. A later run on the pushed head, after the box quietened, reports All
gates green, so the sentence was stale and read as a standing red.

Both readings are kept because together they are the discrimination. Pristine
`origin/main` in its own clone fails the same two `CpuX86FloorHarnessTests`
cases with `NO_QUIET_WINDOW` at loadavg 63-68, and the same tree passes at lower
load. That is a load-dependent harness, #618, and not this change. The green run
is not offered on its own: a gate that passes once is not a gate that cannot
fail.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…ead of asserting it (#1809)

The resolver's docstring and the spec both said a broken floor record fails
closed. Neither had run it. An unexecuted claim about a failure path is the one
most likely to be wrong, because nothing about the happy path exercises it.

Measured: with the record emptied to a bare comment, all three diff-scoped steps
exit 2 with the resolver's own message and abort under `set -eu` before invoking
a single checker. That matters in one specific direction. A broken record read
as "no floor" would silently restore the ratchet, so the parse refuses rather
than degrades, and the refusal is now a measurement rather than an intention.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…g, and three claims outran their evidence (#1809)

A fresh review returned FAIL on the record, not on the mechanism. The resolver,
its data file, `ci.yml`, its suite and the three checkers are byte-identical
here; every repair is prose in `.agents/specs/ci-enforcement-floor.md`.

TWO OF THE 41 ENUMERATED SHAS DID NOT EXIST. `ddff09093663` and `be4a3edf1727`
resolve to no object; the commits are `ddff090936bb` and `be4a3edf17b2`. That is
worse than a typo, because `scripts/ci-enforcement-floor.txt` says of that table
"That record is the only place that now says those violations happened" — after
the floor lands no gate names those 41 again, so the enumeration is the sole
witness and two of its primary keys pointed at nothing. All three sites are
corrected, and every sha in the section is now verified rather than
spot-checked: 41 of 41 unique tokens resolve under
`git rev-parse --verify -q '<sha>^{commit}'`, and each row's recorded date
agrees with the commit's author or committer date.

A MITIGATION WAS CLAIMED THAT DOES NOT EXIST. Risk 2 said a floor set too far
forward is caught by ancestry and by `RecordedFloorTests`. It is not. Those two
guards catch an OFF-HISTORY floor. A floor advanced too far to a commit that
really is on `main` IS an ancestor of `HEAD`, so both accept it. Measured at
this head with the floor set to `HEAD` itself: the sha pattern accepts it,
`known` and `is_ancestor(floor, HEAD)` are both true, the resolver returns
`HEAD`, and all three diff-scoped steps return rc 0 vacuously over an empty
walk. The risk now says the only mitigation is the reviewed advance, which is
the true position. This is a different failure from the fail-closed case
recorded in G5, and both are now stated as what they are.

THE "STEADY STATE" IS NOT THE STATE THIS REPOSITORY IS IN. The losslessness
argument assumed the floor sits behind `LAST_GREEN` because `LAST_GREEN`
advances on every green push. Measured: `LAST_GREEN` is `fafa16f0f` and has not
moved since 2026-08-12T23:53Z, and of the 100 most recent `push` runs of
`ci.yml` on `main` 93 are cancelled, 6 failed and none succeeded. So the floor
is AHEAD of `LAST_GREEN`, the base is the floor on every push, and the walk
grows by one per merge — the growth this file levels at the rejected exemption
list. Correctness is untouched, `floor..HEAD` still covers every post-floor
commit, so this is an accuracy repair. The skipping window is also restated
precisely: it runs from the advance until the next green push run, not "a
moment", and what it skips does not grow while it is open.

TWO COSTS THE FILE DID NOT STATE. The floor forgives by RANGE, not by
violation: a checker written tomorrow that finds a new class of defect in the
pre-floor range is forgiven silently too, which an exemption list would not do,
and leaving that out made the comparison one-sided. And the floor swallows the
one in-checker exception it cites as precedent — `281b4bc76c0e` (#1262) is below
the floor, so `--range fafa16f..origin/main` prints its `This is DEBT, not
success` banner once and `--range bacb711..origin/main` prints it zero times.
The entry is not deleted or bypassed and `LandedMessageExceptions` still pins
it; only its runtime visibility on the push lane is lost, and the record here is
the weaker replacement.

THE OUTCOME'S PREFLIGHT LINE WAS STALE. It claimed "All gates green".
`scripts/agent-preflight.sh` at this head reports rc 0, zero failures and TWO
SKIPS — `commit-trailers` and `commit-style`, because `origin/main` is not an
ancestor of `HEAD` — and prints "NOT a green preflight" itself. Reading the rc
alone is how the claim was made. Both gates were run by hand over
`849a7dd73..HEAD`, which is every commit this branch adds: rc 0 and rc 0, both
at `f7ef4fe19` and again after this commit was authored.

RISK 1 HAS ARRIVED AND IS RECORDED RATHER THAN QUIETLY FIXED. Re-measured at
`origin/main` `e6f4f566f`, `check-role-discipline.py` is rc 1 over
`bacb71109..origin/main` on `c00b99c7c`, which reached `main` with two LTX-2.5
files and no task branch. The floor value is NOT changed here: advancing it is
the reviewed act the spec defines, and doing it inside a review repair is what
that section forbids. Whoever merges either advances the floor in a commit that
names `c00b99c7c` or accepts a standing red on that step.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
The branch was behind `origin/main` and conflicted with it in
`scripts/agent-preflight.sh`, so GitHub could produce no merge ref and the PR
lane had nothing to check out. Both sides append to the same `SUITES` array;
the resolution keeps all four entries, `af320abb2`'s three and this branch's
`test_ci_walk_base`.

The merge is also what makes the advanced floor recordable: the row's own
`RecordedFloorTests::test_recorded_floor_is_an_ancestor_of_head` asserts the
recorded value is an ancestor of `HEAD`, and `c00b99c7c` landed on `main` after
this branch left it.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
… one commit that reformed the deadlock

The floor recorded at `bacb71109` no longer holds. Re-measured at `origin/main`
`d60692c89`, over `bacb71109..origin/main`, ten first-parent commits: the
presence grep is rc 0, `check-commit-trailers.py --range` is rc 0,
`check-now-current.py` is rc 0, and `check-role-discipline.py` is **rc 1** on
exactly one commit.

That commit is `c00b99c7c`, `fix(LTX25-DIT-ATTN-ARM-PARSE): match every DiT
attention arm exactly and refuse a fourth value`, 2026-08-24. It landed
`src/vllm/model_executor/models/ltx2_device.cpp` and
`tests/vllm/models/test_ltx2_device.cpp` — product code and its own test —
straight onto `main` with no `row/<ID>` branch in its history. Its message is
clean, so this is a role-discipline violation and not a trailer one: the split
across the forgiven set moves from 35 trailers / 6 role discipline to 35 / 7,
and the count from 41 to 42.

WHY THIS IS JUSTIFIED. The commit is on `main` and can only be repaired by
rewriting `main`, which the protocol forbids. It is the same condition as the 41
already enumerated, and it produces the same failure at a smaller scale: with
the floor left at `bacb71109`, the `agent-record` role-discipline step reds on
`c00b99c7c` on every future push, forever, with no action any contributor can
take to clear it. A permanent red is read by nobody. Refusing to advance would
hand this row's own merge the defect the row exists to remove — one commit
instead of 41, and freezing again on the next one.

WHY THIS FAR AND NO FURTHER. The floor is set to `c00b99c7c` itself, not to
`origin/main`. The walk is `FLOOR..HEAD` and excludes `FLOOR`, so this forgives
that one commit and leaves `e6f4f566f`, `d60692c89` and everything after them
enforced. Advancing to current `main` would have been the same edit and would
have forgiven two commits nobody examined; risk 2 of this spec records that
nothing in the mechanism can detect that, and the review is the only control.
Minimality is how the control is honoured.

WHAT THE RECORD OWES. `c00b99c7c` is enumerated as the 42nd forgiven commit
with its sha, date, subject and what it actually did. Every one of the 42 shas
was verified to resolve — `git rev-parse --verify -q '<sha>^{commit}'` over all
42: 42 resolved, 0 missing, all 42 ancestors of `origin/main`. That is a full
sweep, not a spot-check, because after this lands the enumeration is the only
witness that these violations happened, and an earlier round of this list
carried two shas that resolved to nothing.

This is the first exercise of `### Advancing the floor`, and it happened before
the pull request that introduces the mechanism had merged. Risk 1 of this spec
predicted exactly this and it arrived one day later. Two things follow, and
they point in opposite directions: the mechanism works, and the violations are
still arriving — `c00b99c7c` is the second role-discipline violation in two
days, after `6e73bdee3ea1`.

Measured after the edit, each rc captured on the command itself and never after
a pipe: over `c00b99c7c..origin/main` the grep step, `check-commit-trailers.py`,
`check-role-discipline.py` and `check-now-current.py` are all rc 0;
`git merge-base --is-ancestor c00b99c origin/main` is rc 0;
`tests/scripts/test_ci_walk_base.py` is 31 tests, 0 failures. The gate still
bites: a scratch commit carrying no `FOLLOWING_AGENTS_PROTOCOL` string anywhere,
marker count printed as 0 before the run, reds both trailer steps by name over
the new floor, and the tree was restored byte-for-byte with sha256 proof.

Not one line of `scripts/ci-walk-base.py`, `.github/workflows/ci.yml`,
`tests/scripts/test_ci_walk_base.py` or any checker changes. This moves one
recorded value and updates the record that justifies it.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…ole, because a truncated one understates what it names

The fenced block that justifies forgiving `c00b99c7c` re-wrapped the checker's
output and cut it off after `...reached main without arriving on a task
branch.`, with no ellipsis marking the cut. A reader had no way to see that
the message continues, and the half that was dropped is the half that states
the rule: work happens in its own worktree on a `row/<ID>` branch and lands
through a reviewed PR or an authorized local merge naming that branch. That
sentence is the reason the commit is a violation, so a record that omits it
argues for the advance with the weaker half of the evidence.

The block now carries the checker's single unwrapped line verbatim, and the
prose names the exact invocation it came from so the next reader can reproduce
it rather than trust a transcription. Copied from the checker's own stdout and
compared byte-for-byte, not retyped.

Nothing else changes. The floor value, the mechanism, the walk, and the
enumerated 42 are untouched.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
GitHub read the pull request as CONFLICTING, and locally the merge is clean.
The one file both sides touch is `.agents/issue-index.md`, which
`.gitattributes:7` marks `merge=union`; GitHub does not apply that attribute,
so its mergeability probe is an artefact rather than a real conflict.

Two other things unblock with it. `scripts/agent-preflight.sh` was SKIPping
`commit-trailers` and `commit-style` because `origin/main` was not an ancestor
of HEAD, and a SKIP is not a pass. The floor also has to be re-verified against
the `main` that moved, because a floor is only sufficient at the head it is
measured on.

The index was checked by hand rather than trusted to the union driver, which
has twice dropped a tail row in this repository. Merge base `3574065e7` carries
659 rows; this branch adds `#1809` and `main` adds `#1823`, neither side
removes one, and the merged file carries 661 rows whose set is exactly the
union of the two sides. `#1809` and `#1823` each appear once, the preamble is
byte-identical to both parents, and no file in the merge carries a conflict
marker.

`scripts/ci-enforcement-floor.txt` is unchanged. The floor stays
`c00b99c7c8b64f9247230ed6220598cc5c0e347e`, and this merge advances nothing.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
@localai-bot
localai-bot merged commit 4345f34 into main Aug 24, 2026
6 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The main-branch diff-scoped gates are a ratchet: their base is the last GREEN run, so an unfixable commit freezes it and the walk grows forever

2 participants