Skip to content

fix(record): the live position is derived, so no PR writes NOW.md (#374) - #376

Merged
mudler merged 1 commit into
mainfrom
row/ENG-NOW-DERIVED
Aug 11, 2026
Merged

fix(record): the live position is derived, so no PR writes NOW.md (#374)#376
mudler merged 1 commit into
mainfrom
row/ENG-NOW-DERIVED

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

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:

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 d928e2c3. And d72ac5a3"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.

  • A row's next step → the row's own spec, under ## 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.py requires that spec, not the digest — and fails closed, naming the row, when a matrix line links no spec at all.
  • scripts/now.py renders 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 — "no claims" and "could not ask" look identical in a rendered table, and that's the trap.
  • .agents/NOW.md keeps 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:

  1. check-release-binary-contract.py pinned a literal | Release | … | row inside NOW.md. Now pinned in release-binary-matrix.md's own ## Now.
  2. Two of Shared record surfaces are a lock: 16/29 open PRs conflict, 13 of them in bookkeeping only #364's own tests asserted that adding a row to NOW.md is free. That's now the wrong question — retargeted to authored content, which is what the surviving obligation is actually about.

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:

Suite Cases Mutation proven
test_doc_checkpoint 26 restoring NOW to the triple re-breaks the NOW-free case
test_now_render 11 three degrade paths; digest reads nothing from the authored file
test_check_now_current 15 disarming ROW_TABLE_LINE lets the regrown table pass
test_check_gate_commands 29 dropping the baseline entry breaks the exact pin
test_check_release_binary_contract 30 each relocated anchor fail-closed

🤖 Generated with Claude Code

#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]
@mudler
mudler merged commit dbd0d51 into main Aug 11, 2026
11 of 14 checks passed
@localai-bot
localai-bot deleted the row/ENG-NOW-DERIVED branch August 11, 2026 12:59
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]
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.

2 participants