fix(record): the live position is derived, so no PR writes NOW.md (#374) - #376
Merged
Conversation
#364 removed .agents/NOW.md's byte budget -- the forced EVICTION -- but not the forced WRITE, so the file stayed a surface every row-advancing PR touches. That is a lock under the invariant #364 itself added to AGENTS.md, which made NOW.md a documented violation of the rule it shipped alongside. The cause was never discipline. It was one line: REQUIRED = {"lifecycle": (STATUS, BENCHMARKS, NOW), ...} The GATE marched every lifecycle move into one shared file. NOW.md conflicted in 5 of the 16 conflicting open PRs at d928e2c, and d72ac5a ("keep the ROCm live-claim row inside the NOW.md budget") is an unprompted instance of an unrelated author paying the tax while #364 was removing the constant demanding it. The obligation is RELOCATED, not deleted. "The live position must be current" survives; it is now paid in the moved row's OWN spec as a `## Now` line, which has one writer. check-doc-checkpoint requires that spec instead of the digest, and fails closed -- naming the row -- when a matrix line links no spec at all. scripts/now.py renders the live position on demand from the matrices, .agents/claims/, each spec's `## Now` and open PRs: 105 rows in ~50 ms with no network, degrading to REMOTE_UNVERIFIED rather than to a silent empty roster, because "no claims" and "could not ask" look identical in a rendered table. .agents/NOW.md keeps only the authored half -- current gate, next actions, the invariants that bite -- and gains a regrowth guard, because removing the table once is not enough when the decay path is someone re-adding "just one row". Two consumers of the per-row table turned up that the issue had not counted, and both are relocated the same way rather than deleted: check-release-binary-contract.py pinned a literal `| Release | ... |` row inside NOW.md, now pinned in release-binary-matrix.md's own `## Now`; and two of #364's own tests asserted that adding a ROW to NOW.md is free, which is now the wrong question -- retargeted to authored content, which is what the surviving obligation is about. AGENTS.md: the §Records paragraph ended with a dated measurement naming SHAs. That is a log entry in the one file this protocol says history does not go, and it is the accumulating-justification pattern #364 removed from STATUS_RATCHET. Compressed to the rule, with a new corollary that names the real mechanism: when a checker REQUIRES every change to touch a shared file, the gate is the defect, not the people tripping it. The evidence stays in the spec and this commit. This row is also the first user of #364's one-file-per-claim shape: its own claim is .agents/claims/CLAIM-ENG-NOW-DERIVED.md, not a row appended to a shared table. Gates: preflight rc=0. test_doc_checkpoint 26 (NOW-free lifecycle move passes; missing and empty `## Now` fail; a row linking no spec is reported; MUTATION restoring NOW to the triple re-breaks it), test_now_render 11 (offline render, three degrade paths, digest reads nothing from the authored file), test_check_now_current 15 (regrowth rejected, prose tables still pass, MUTATION disarming ROW_TABLE_LINE), test_check_gate_commands 29, test_check_release_binary_contract 30. No product source is touched, so no CUDA, GPU or SACRED gate is implicated. Issue: #374 FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
This was referenced Aug 11, 2026
dariofinardi
pushed a commit
to dariofinardi/vllm.cpp
that referenced
this pull request
Aug 11, 2026
FOLLOWING_AGENTS_PROTOCOL main advanced 32 commits during this benchmark run and retired two of the exact mechanisms this change had to fight: mudler#376 removed `.agents/NOW.md`'s live-claims table, so no row-advancing change writes that file any more, and mudler#368 deleted `STATUS_RATCHET` from `scripts/check-public-doc-tables.py`. Both of this row's edits to those surfaces are therefore obsolete, not merged: the target-branch version was taken wholesale for each conflicted file rather than three-way merged, per the keyed-record rule. What survives is the measurement itself and the surfaces that still carry it: `.agents/benchmark-record.md`, `.agents/specs/muse-glimmer.md` §14, `.agents/model-matrix.md`, `docs/BENCHMARKS.md`, `docs/FEATURES.md` and `docs/STATUS.md`. Verified byte-for-byte that no unrelated key moved. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
localai-bot
pushed a commit
that referenced
this pull request
Aug 11, 2026
…stops writing it `origin/main` advanced a THIRD time during this landing (7 commits), and for the third time the change was to the record surfaces this landing writes. A plain `git push` was refused as non-fast-forward, so this fetches, re-merges, reconciles and re-gates. No force, no rebase of a published branch. #374/#376 makes `.agents/NOW.md` DERIVED: `scripts/now.py` renders the live position from the matrices, the claims and GitHub, and **no PR writes the file**. That retires the last of the three shared surfaces #364 identified, after the `STATUS_RATCHET["chars"]` byte count and NOW's own `MAX_CHARS` went in the merge below. So this landing's NOW.md rows -- PR #282's `LORA-RUNTIME` row and PR #267's in-place update of the `logprobs_mode` row -- are DROPPED, and main's derived file is taken wholesale. That is not content lost: both rows' facts live in the matrices `scripts/now.py` reads, which this landing does update. Verified by running `scripts/now.py`, which renders. Across the whole landing the three surfaces the briefing said would bite -- the STATUS char ratchet, the NOW.md 6,000-char budget, and the coordination claims table -- were all retired or reshaped by main WHILE the landing was in flight. The BENCHMARKS.md 45,000-char cap is the one that still binds, and it is still paid: 44,839. KEYED RECORDS. .agents/NOW.md CONFLICT. Main's derived version taken WHOLESALE. No PR writes this file any more. .agents/benchmark-record.md CONFLICT, and the one genuinely APPEND-ONLY log in this landing, so resolved as a UNION: main's new Muse Glimmer benchmark entry (#333) followed by this landing's `BENCH-VK-LLAMA` compaction section. Both kept in full, neither reordered. .agents/engine-matrix.md CONFLICT. Main's `Serving, API, CLI, library` row gained another row and an `ACTIVE` (28 -> 29). Main's row kept wholesale, the landing's `LoRA and adapters` row reapplied, **Total** RECOMPUTED from the ten actual area rows: 149|35|16|4|9|28|8|9|39. `check-agent-record.py` confirms ENGINE=149. Everything else auto-merged; `docs/STATUS.md`, `docs/BENCHMARKS.md`, `docs/FEATURES.md`, `docs/USAGE.md`, `.agents/roadmap_v1.md`, `.agents/coordination.md`, `scripts/check-gate-commands.py` and `tests/CMakeLists.txt` were each verified against main's own edit set. GATE for the WHOLE landing, re-run by the operator on THIS tree, CPU Release, foreground, no timeout on any test binary. cmake --build build-cpu -j 18 547 targets, 0 errors, 0 warnings Focused, all seven declared gates of the three PRs: test_dense_gate_up_seam_forward 4/4 cases | 1940 assertions | 0 skipped test_linear_method 6/6 | 76 | 0 skipped test_lora_layers 16/16 | 4498 | 0 skipped test_punica_cpu 8/8 | 149 | 0 skipped test_sampler 21/21 | 114 | 0 skipped test_input_batch 29/29 | 205 | 0 skipped test_llm_engine 24/24 | 494 | 0 skipped Checkers, `scripts/__pycache__` cleared before each: check-agent-record.py OK ENGINE=149 MODEL=362 QUANT=82 KERNEL=51 BACKEND=80 check-public-doc-tables.py OK BENCHMARKS 44,839 / 45,000 hard cap check-now-current.py OK the derived page, 100-line and per-entry caps check-fusion-consistency.py OK glue 14 / 12 routed / 2 allowlisted; merged-gemm 10 / 6 / 6, 0 drift check-gate-commands.py OK 118 gated rows, 33 runnable check-commit-trailers.py OK over the whole landing range scripts/now.py renders Checker unit suites, all nine: test_check_public_doc_tables 52/52, test_check_gate_commands 30/30, test_check_fusion_consistency 20/20, test_agent_record 29/29, test_check_now_current 15/15, test_now_render 11/11, test_record_merge_shape 11/11, test_check_pr_size 38/38, test_doc_checkpoint 26/26. Full `ctest --test-dir build-cpu -j 6 --output-on-failure`, 384 tests, 1416.34 s. BOTH numbers reported: 99% passed, 1 failed of 384 -- `test_engine_core_proc`, under -j 6 with a SECOND worktree running its own suite on the same box at load average 241. It is on the known starvation-prone list and passes SERIALLY on an idle box (load 0.77): 14/14 cases, 114 assertions, wall 0.02 s. The other three starvation-prone binaries were re-confirmed serially in the same session -- test_async_llm 15/15 (444), test_openai_api_server 51/51 (568), test_openai_conformance 23/23 (252) -- and `test_async_llm`, which failed under -j 6 in both earlier runs of this landing, PASSED under -j 6 here in 1.14 s. A binary that flips with box load and not with the tree is scheduling, not a defect; none of the four loads a file this landing touches. The #274 ASan/UBSan five did not appear: this gate is Release with no sanitizer, and `test_llm_engine`, `test_capi`, `test_llama_embedding_fold` and `test_openai_api_server` -- four of that five -- all PASS here. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: ClaudeCode:claude-opus-5 [ClaudeCode]
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.
Issue #374. Row
ENG-NOW-DERIVED. Spec.agents/specs/now-derived.md. Follow-up to #364.No product source is touched.
The problem you can't fix by asking people nicely
#364 removed NOW.md's byte budget — the forced eviction — but not the forced write. One line kept every PR in the file:
The gate marched every lifecycle move into one shared file. NOW.md conflicted in 5 of the 16 conflicting open PRs at
d928e2c3. Andd72ac5a3— "keep the ROCm live-claim row inside the NOW.md budget" — is an unrelated author paying that tax mid-flight, while #364 was removing the constant demanding it.By the invariant #364 added to
AGENTS.md, NOW.md was a documented violation of the rule it shipped alongside.Relocate the obligation, don't delete it
"The live position must be current" survives — it's just paid somewhere that can hold it.
## Now. One writer..agents/specs/took zero conflicts across the whole Shared record surfaces are a lock: 16/29 open PRs conflict, 13 of them in bookkeeping only #364 sample.check-doc-checkpoint.pyrequires that spec, not the digest — and fails closed, naming the row, when a matrix line links no spec at all.scripts/now.pyrenders on demand from the matrices,.agents/claims/, each spec's## Now, and open PRs. 105 rows in ~50 ms with no network, degrading toREMOTE_UNVERIFIEDrather than to a silent empty roster — "no claims" and "could not ask" look identical in a rendered table, and that's the trap..agents/NOW.mdkeeps only the authored half and gains a regrowth guard, because removing the table once isn't enough when the decay path is someone re-adding "just one row".Net: a row-advancing PR writes its own spec and its own claim file, and touches no shared surface.
Two consumers the issue hadn't counted
Both relocated the same way, not deleted:
check-release-binary-contract.pypinned a literal| Release | … |row inside NOW.md. Now pinned inrelease-binary-matrix.md's own## Now.AGENTS.md
The §Records paragraph ended with a dated measurement naming SHAs — a log entry in the one file this protocol says history doesn't go, and the same accumulating-justification pattern #364 removed from
STATUS_RATCHET. Compressed to the rule, plus a corollary naming the real mechanism: when a checker requires every change to touch a shared file, the gate is the defect, not the people tripping it.Dogfooding
This row's own claim is
.agents/claims/CLAIM-ENG-NOW-DERIVED.md— the first real use of #364's one-file-per-claim shape, not a row appended to a shared table.Evidence
preflight rc=0. Every suite carries the mutation that disarms its own guard:
test_doc_checkpointNOWto the triple re-breaks the NOW-free casetest_now_rendertest_check_now_currentROW_TABLE_LINElets the regrown table passtest_check_gate_commandstest_check_release_binary_contract🤖 Generated with Claude Code