Skip to content

fix(DOC-PROSE-BUDGET-1062): main is red because three facts landed as prose, so they become rows (#1062) - #1064

Closed
localai-bot wants to merge 2 commits into
mainfrom
row/DOC-PROSE-BUDGET-1062
Closed

fix(DOC-PROSE-BUDGET-1062): main is red because three facts landed as prose, so they become rows (#1062)#1064
localai-bot wants to merge 2 commits into
mainfrom
row/DOC-PROSE-BUDGET-1062

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

scripts/check-public-doc-tables.py exits 1 on origin/main at b493f4981.
That checker gates the agent-record CI job (.github/workflows/ci.yml:160),
scripts/agent-preflight.sh:68 and the pre-push hook, so main is red, every
branch cut from it inherits the red, and CI, preflight and pushes are blocked
for everyone.

ERROR: the public keyed-table docs are not valid:
  - docs/BENCHMARKS.md has 36 prose paragraphs, over the 35 budget
  - docs/FEATURES.md has 22 prose paragraphs, over the 21 budget

Where it came from

PR #1054 added two prose paragraphs to docs/BENCHMARKS.md and one to
docs/FEATURES.md. Both pages were sitting exactly on their prose budgets, 35
of 35 and 21 of 21, so they went to 36 and 22. Confirmed in a clean detached
worktree rather than the shared checkout: 283c7e492 exits 0, e34d71379 is
the first commit that exits 1, and git diff 283c7e492 e34d71379 -- scripts/check-public-doc-tables.py is empty, so the pages moved and the gate
did not. #1054's recorded verification does not list this checker, and on an
external contribution a red CI job has the #584 fork-artifact story for cover.

Why no constant moves

The reflex here is to raise the two numbers, and the checker refuses that
reading in its own source. check-public-doc-tables.py:17 and :105 both say
table ROWS are unbudgeted and that nothing budgets the whole file: adding a
measurement, the normal operation, was never blocked. Only prose is capped,
because rows are a keyed table's growth mode and prose is the decay mode the
checker exists to stop. So the gate is behaving as designed, AGENTS.md's "limit
an entry, not a shared file" rule is already satisfied, and widening the gate
to pass would be making a red gate green by widening its scope.

Merging the paragraphs into their neighbours would also have passed the
counter. It was rejected for the same reason: it games the count while leaving
the page in the shape the contract rejects.

What changed

Each fact takes the row its own page's schema already has for it. Nothing is
deleted and no fact is dropped.

docs/BENCHMARKS.md gains one Open gaps row (Track | Status | Next gate).
"Benchmarking is NOT APPLICABLE, and the binding gate is the Apple Clang build"
is a disposition, which is exactly what that table records, and it already
carries a cluster of "no number owed" build-verification rows (Ampere consumer, Pre-Ampere breadth) that this one joins. The date moves into the
row, which is what the checker's own regrowth-guard message directs;
DATED_HEADING_RE reads headings only.

| Darwin Qwen3.5 build repair (2026-08-16) | **Benchmarking is NOT APPLICABLE.** Dropping a redundant namespace-scope lambda capture that Apple Clang rejects under `-Werror` changes no generated refusal text, no model math and no runtime path | None, and no number is owed. The binding gate is the Apple Clang build |

docs/FEATURES.md updates the Apple row of Backends and hardware in place
(Backend | vllm.cpp | vLLM | SGLang | llama.cpp). Apple Clang building the
Qwen3.5 MoE loader with warnings promoted to errors is a platform and toolchain
fact, and that table's CPU row already carries the same class of caveat in its
key cell. Updating a row rather than appending one is what a keyed table asks
for.

| Metal (Apple Silicon; Apple Clang builds the Qwen3.5 MoE loader with project warnings promoted to errors, and that loader's layout-refusal path uses the same messages and behavior on every platform) | ✅ | ☐ | ☐ | ✅ |

Two placements were rejected, and the spec records why, because both read as
obvious until measured. The Registered architectures correctness cell for
Qwen3_5MoeForConditionalGeneration is 195 characters against a 220-char cap
and its Qwen3_5ForCausalLM sibling is at exactly 220, so neither fits. A new
At a glance row would have forced a claim in the vLLM, SGLang and
llama.cpp columns about a C++ host-toolchain build that no evidence in this
change supports, and that page's header says those columns are our reading of
documented behavior.

Verification

RED first, from a clean detached worktree, run bare:

$ python3 scripts/check-public-doc-tables.py
ERROR: the public keyed-table docs are not valid:
  - docs/BENCHMARKS.md has 36 prose paragraphs, over the 35 budget; content belongs in table ROWS and prose only explains them
  - docs/FEATURES.md has 22 prose paragraphs, over the 21 budget; content belongs in table ROWS and prose only explains them
RC=1

GREEN after:

$ python3 scripts/check-public-doc-tables.py
OK: docs/BENCHMARKS.md and docs/FEATURES.md are human-readable keyed tables, docs/STATUS.md is inside its size ratchet, and .agents/benchmark-record.md carries the append-only record.
RC=0
  • Paragraph counts through the checker's own _prose_paragraphs:
    docs/BENCHMARKS.md 35 of 35, docs/FEATURES.md 21 of 21.
  • Row shape, per table rather than globally: the new Open gaps row splits
    into 5 parts on unescaped pipes against its table's 3 columns, and the
    Backends and hardware row into 7 against its 5. Cells 197 and 198
    characters against the 220 cap, rows 317 and 218 against the 600 cap, no
    em-dash in either.
  • docs/FEATURES.md has zero malformed rows before and after. The 13
    two-column rows inside four-column tables on docs/BENCHMARKS.md are
    inherited: identical line numbers at b493f4981 and at this head, and not
    touched here.
  • .agents/issue-index.md is append-only here: origin/main's file is a
    strict prefix of this one, one row added, 1271 bytes. The malformed #1003
    row is inherited and owned by issue-index: a third malformed row (#1003) — unescaped pipes make it a 9-cell row, and no checker can see cell count #1059.
  • scripts/agent-preflight.sh and scripts/agent-preflight.sh --staged, both
    run bare: All gates green.

windows-msvc-cpu and windows-msvc-vulkan fail on every PR (#584, #968, fix
owed by #983) and are not this change.

Closes #1062

FOLLOWING_AGENTS_PROTOCOL

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

mudler added 2 commits August 16, 2026 21:33
…ng shape

`scripts/check-public-doc-tables.py` exits 1 on `origin/main` at `b493f4981`,
and that checker gates the `agent-record` CI job, `scripts/agent-preflight.sh`
and the pre-push hook. So `main` is red, every branch cut from it inherits the
red, and CI, preflight and pushes are blocked for everyone.

The spec is committed before any page is edited because the reflex here is to
raise the two constants, and that reflex is wrong. `check-public-doc-tables.py`
says so in its own source at `:17` and again at `:105`: table ROWS are
unbudgeted and nothing budgets the whole file, so adding a measurement, the
normal operation, was never blocked. Only prose is capped, because rows are a
keyed table's growth mode and prose is the decay mode the checker exists to
stop. Widening the gate to pass would be making a red gate green by widening
its scope.

It also records the two placements that were rejected, because both read as
obvious until measured: the `Registered architectures` cell for
`Qwen3_5MoeForConditionalGeneration` has 25 characters of headroom against the
220-char cap and its sibling row is at exactly 220, and a new `At a glance` row
would have forced three competitor marks that no evidence in this change
supports.

Refs #1062

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
…me rows

PR #1054 added two prose paragraphs to `docs/BENCHMARKS.md` and one to
`docs/FEATURES.md`. Both pages were sitting exactly on their prose budgets, 35
of 35 and 21 of 21, so the pages went to 36 and 22 and
`scripts/check-public-doc-tables.py` began exiting 1 at `e34d71379`. Its
verification list does not include this checker, and on an external
contribution a red CI job has the #584 fork-artifact story for cover, so a real
red passed unnoticed.

No constant moves and nothing is deleted. Each fact takes the row its own
page's schema already has for it.

`docs/BENCHMARKS.md` gains one `Open gaps` row. "Benchmarking is NOT
APPLICABLE, and the binding gate is the Apple Clang build" is a disposition,
which is exactly what that table records, and it already carries a cluster of
"no number owed" build-verification rows (`Ampere consumer`, `Pre-Ampere
breadth`) that this one joins. The date moves into the row, which is what the
checker's own regrowth-guard message directs.

`docs/FEATURES.md` updates the Apple row of `Backends and hardware` in place.
Apple Clang building the Qwen3.5 MoE loader with warnings promoted to errors is
a platform and toolchain fact, and that table's `CPU` row already carries the
same class of caveat in its key cell. Updating a row rather than appending one
is what a keyed table asks for.

Merging the paragraphs into their neighbours would also have passed the
counter. It was rejected: it games the count while leaving the page in the
shape the contract rejects.

The 13 two-column rows sitting inside four-column tables on
`docs/BENCHMARKS.md` are inherited, byte-for-byte identical before and after,
and are not touched here.

Closes #1062

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
@localai-bot

Copy link
Copy Markdown
Collaborator Author

Closing as a DUPLICATE, superseded by #1057 which landed first as `ef6669292`.

#1057 was already open when I filed this. Timeline:

20:40:03 #1055 filed (same defect)
20:53:57 #1057 opened (the fix)
21:17:40 #1062 filed — my duplicate issue
21:33:40 this PR opened
21:37:36 #1057 merged

That is a coordination failure on my side: I verified the red against main and bisected the cause, but did not check for an existing issue or open PR before dispatching. The gap was real; the work was already owned.

#1057 fixed it the same way this PR did, and correctlygit diff b493f4981..origin/main -- scripts/check-public-doc-tables.py is EMPTY, so no budget constant moved and the gate was not widened; the two Darwin paragraphs were folded into table rows. check-public-doc-tables.py now exits 0 on origin/main, verified on a clean detached worktree.

Nothing here is lost that matters: the analysis in #1062 (why the budget is NOT the shared-file antipattern — rows are unbudgeted per check-public-doc-tables.py:17 and :105, so retiring it would have been widening a red gate to green) stands on the record either way, and #1057 reached the same conclusion independently.

No reflection on the implementer, whose work was correct, thorough and well-evidenced — the duplication was mine to prevent.

@localai-bot
localai-bot deleted the row/DOC-PROSE-BUDGET-1062 branch August 16, 2026 22:21
localai-bot pushed a commit that referenced this pull request Aug 17, 2026
…r a file did

`FEATURE_SURFACE_PREFIXES` covered all of `src/vllm/model_executor/models/`, so
any edit to any model translation unit classified as `feature_surface` and owed
`docs/FEATURES.md`. That is the classify-by-directory trigger this file's own
header says the 2026-08-11 rewrite removed, still standing for model files:

> A one-line compile fix owed three public-doc edits, so this gate produced 16
> of the last 20 red CI runs, and it had accreted SIX hardcoded exact-path-set
> escape hatches -- one per legitimate change it had blocked.
> [...] Editing src/ alone owes nothing.

The cost stopped being hypothetical on 2026-08-16. `e34d71379` (#1054) is a
one-line lambda-capture change to `models/qwen3_5_weights.cpp` that alters no
capability. The gate demanded the surface; the commit answered with prose in
BENCHMARKS, FEATURES and STATUS; that prose crossed the
`check-public-doc-tables` paragraph budgets; and because that checker also runs
in the pre-push hook, every branch in the repository was blocked from pushing.
That is #1055, re-filed by a second agent as #1062 with #1064 as a duplicate fix
PR, alongside #1058 which is still open. Two shared-file gates in series, each
individually defensible.

What the project supports is what the registry registers, so `feature_surface`
now keys off a change to the set of `REGISTER_VLLM_MODEL(...)` entries in the
touched file, read through `blob()` like the existing `measurement_changes`.
`scripts/check-supported-models.py` already gates `docs/FEATURES.md` against
that same set, so the signal is authoritative rather than newly invented.

This NARROWS a gate, which is the risky direction, so the polarity is pinned by
test rather than asserted: adding an architecture, adding a whole new registered
file, and removing an architecture each still owe `docs/FEATURES.md`, and the
four `.agents/*-matrix.md` records keep their path trigger because editing one
IS the claim.

Red before, green after, and mutation-proven. `test_doc_checkpoint.py` goes 27
-> 32 cases. Before the implementation, `test_editing_a_registered_model_owes_nothing`
failed with the FEATURES demand. After it, 32 pass. Because the three
still-owes cases were green under the OLD path trigger too, they could not by
themselves show the new trigger works, so `registration_changes` was mutated to
return `[]`: that fails exactly those three and no others, and restoring returns
32 green.

Does not close #595. A genuine new architecture still writes the shared
`docs/FEATURES.md` table, so the lock that issue names survives; this removes
the contention for every fix, refactor and port phase that changes no
registration. #515 is the identical shape for `CMakeLists.txt` -> `docs/USAGE.md`
and is untouched. Both are recorded under `## Owed` in the spec, together with
the class this narrowing gives up: a capability change inside an
already-registered model now goes undemanded.

Refs #595

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: ClaudeCode:claude-opus-5 [ClaudeCode]
localai-bot added a commit that referenced this pull request Aug 17, 2026
…r a file did

`FEATURE_SURFACE_PREFIXES` covered all of `src/vllm/model_executor/models/`, so
any edit to any model translation unit classified as `feature_surface` and owed
`docs/FEATURES.md`. That is the classify-by-directory trigger this file's own
header says the 2026-08-11 rewrite removed, still standing for model files:

> A one-line compile fix owed three public-doc edits, so this gate produced 16
> of the last 20 red CI runs, and it had accreted SIX hardcoded exact-path-set
> escape hatches -- one per legitimate change it had blocked.
> [...] Editing src/ alone owes nothing.

The cost stopped being hypothetical on 2026-08-16. `e34d71379` (#1054) is a
one-line lambda-capture change to `models/qwen3_5_weights.cpp` that alters no
capability. The gate demanded the surface; the commit answered with prose in
BENCHMARKS, FEATURES and STATUS; that prose crossed the
`check-public-doc-tables` paragraph budgets; and because that checker also runs
in the pre-push hook, every branch in the repository was blocked from pushing.
That is #1055, re-filed by a second agent as #1062 with #1064 as a duplicate fix
PR, alongside #1058 which is still open. Two shared-file gates in series, each
individually defensible.

What the project supports is what the registry registers, so `feature_surface`
now keys off a change to the set of `REGISTER_VLLM_MODEL(...)` entries in the
touched file, read through `blob()` like the existing `measurement_changes`.
`scripts/check-supported-models.py` already gates `docs/FEATURES.md` against
that same set, so the signal is authoritative rather than newly invented.

This NARROWS a gate, which is the risky direction, so the polarity is pinned by
test rather than asserted: adding an architecture, adding a whole new registered
file, and removing an architecture each still owe `docs/FEATURES.md`, and the
four `.agents/*-matrix.md` records keep their path trigger because editing one
IS the claim.

Red before, green after, and mutation-proven. `test_doc_checkpoint.py` goes 27
-> 32 cases. Before the implementation, `test_editing_a_registered_model_owes_nothing`
failed with the FEATURES demand. After it, 32 pass. Because the three
still-owes cases were green under the OLD path trigger too, they could not by
themselves show the new trigger works, so `registration_changes` was mutated to
return `[]`: that fails exactly those three and no others, and restoring returns
32 green.

Does not close #595. A genuine new architecture still writes the shared
`docs/FEATURES.md` table, so the lock that issue names survives; this removes
the contention for every fix, refactor and port phase that changes no
registration. #515 is the identical shape for `CMakeLists.txt` -> `docs/USAGE.md`
and is untouched. Both are recorded under `## Owed` in the spec, together with
the class this narrowing gives up: a capability change inside an
already-registered model now goes undemanded.

Refs #595

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.

main is RED: check-public-doc-tables fails on b493f4981 — #1054 added prose past the BENCHMARKS/FEATURES budgets

2 participants