Skip to content

Make CLAUDE.md a router: 47,797 → 20,983 bytes, with a pointer per moved file - #263

Merged
thedavidmeister merged 3 commits into
mainfrom
261-claude-md-router
Aug 10, 2026
Merged

thedavidmeister merged 3 commits into
mainfrom
261-claude-md-router

Conversation

@thedavidmeister

@thedavidmeister thedavidmeister commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Closes #261

What this is

CLAUDE.md keeps auto-loading; what auto-loads is now only what governs
JUDGEMENT and binds every reader. The reference material moves to two files,
each named by a one-line pointer in the router.

47,797 bytes → 20,983 bytes (−26,814, −56%.) The issue measured 47,556; the
file gained 241 bytes between that measurement and origin/main, so against the
issue's baseline it is −26,573.

Section (bytes at f5f685b) Home now
## The pipeline is a finite state machine — 6,113 CLAUDE.md
## The FSM as a tool surface (MCP) — 5,491 CLAUDE.md
## Invariants — 7,863 CLAUDE.md
## Transitions (subcommands) — 19,561 (41%) TRANSITIONS.md
## The layer a human types: slash commands… — 2,304 TRANSITIONS.md
## Work-clone lifecycle — 6,429 WORK-CLONES.md

Every moved byte is verbatim. The two new files carry a header saying who reads
them and why they are not in the router, and .gitignore — a whitelist — gains
both, without which they would exist on this box and nowhere else.

Who reads each section

## The pipeline is a finite state machine — STAYS. Read by the vetter,
which is the only actor that receives this file, and by everyone authoring the
pipeline. It is not background: the north star ("a raw gh in a prompt is a
loose transition") is the ground a vetter rejects a PR on, "a gate on one edge
needs a transition on the other" is how a send-back with no exit gets caught,
and the PreToolUse-guard doctrine decides whether a PR's new guard belongs in
bash or in the binary. That is judgement.

## The FSM as a tool surface (MCP) — STAYS. The vetter reading about
itself: its own eight tools, that a profile is a surface and not a permission,
that it has TWO subjects with the same three moves, that it dispatches and the
verdict stays in the main loop, and that it is read-only on the filesystem.
Every one of those decides its next turn.

## Invariants — STAYS. The ruleset every verdict is measured against.

## Transitions (subcommands) — MOVES. Read by an interactive session: the
only actor that both holds a shell and can read a repo file on demand.

  • The vetter cannot invoke one. review-settings.json denies Bash
    outright, and run 20260810T103008Z's own tool census confirms the shape:
    mcp__fsm__* ×14, Read ×40, Grep ×15, Glob ×11, Skill ×3, Agent ×3,
    and zero Bash calls — not one pr-review-report invocation across 48
    turns, all of which paid for the table.
  • The producer never receives the file (campaign-run.sh:266 cds to
    $WORK_DIR; cron.env sets that to $HOME/code, which holds no CLAUDE.md)
    and invokes the transitions correctly anyway: run 20260810T083614Z made 23
    pr-review-report calls — await ×11, trusted-comments ×6, --help ×3,
    state-load, worklist — plus five clone/push/repair MCP tools. It reaches
    for --help, which is the reference it actually uses.

## The layer a human types: slash commands as a plugin — MOVES, into the
same file, because its first sentence is "The transitions above are what a tool
call reaches" — the two are one document and splitting them would dangle that
reference. Read by a human installing the plugin or typing /nr, and by whoever
authors a command; the vetter can do neither. Its one binding rule ("the
commands are prompts and nothing else") is a corollary of the north star that
stays in the router, and is held by a test rather than by memory.

## Work-clone lifecycle — MOVES. Its readers are the producer (whose
clones these are, and which does not load this file), the vetter's dispatched
pr-auditor (briefed from review-auditor-prompt.txt, handed the dir
pr_checkout returned, reading nothing else), and whoever changes
clone_name_in_root / release_decision. What follows from "neither reader
loads this file" is that the section was being paid for by the one actor it is
not addressed to — but only after checking the one rule in it that could change
a VERDICT: never search the filesystem for a checkout. That rule is not lost,
because the vetter already meets it where it acts, in review-prompt.txt
("NEVER SEARCH FOR A CHECKOUT. The dir in pr_checkout's own result is
the only path that is this PR's source", with the 2026-07-27 incident attached),
and the vetter's read-only-on-the-filesystem property is stated in the MCP
section, which stays. WORK-CLONES.md's header says so at the top, so a reader
who arrives from the pointer is told where the binding half lives.

The claim I was asked not to take on trust

"The producer already runs without the file, so the transitions reference is not
load-bearing at runtime." Checked: /home/gildlab/code (the producer's
WORK_DIR) contains no CLAUDE.md, and the tool censuses above are read out of
the two 2026-08-10 traces rather than inferred. It holds — and the vetter census
is the stronger half: the role that pays for the table is structurally incapable
of using it.

#258 premise still holds

the_journal_is_never_shipped_to_a_runners_context rests on four files being
the complete set of bytes a model receives, CLAUDE.md among them as the one
implicit channel. This change does not add a fifth. TRANSITIONS.md and
WORK-CLONES.md are ordinary repo files, reachable through exactly the
--add-dir "$DIR" read membership every other file in this repo already has —
the class 258's own body puts outside that list ("--add-dir is deliberately
not on that list: it confers read membership, which makes a file reachable on
request, not shipped on every turn"). CLAUDE.md keeps its status; only its
size changes. No test of 258's was touched or needs to be.

One consequence for 258 to decide, raised not built: its sibling
every_journal_citation_in_a_prompt_resolves_to_an_entry scans the same four
files, so an [LJ-…] citation written into TRANSITIONS.md or WORK-CLONES.md
later would be outside the scan and could dangle. That is a question about the
citation scan's scope, not about the shipped-bytes set.

Expected effect — a PREDICTION, not a measurement

No run was forced. Both kill switches are in place and the two runs behind these
numbers cost $5.95 and $12.51.

The numbers to beat, from the vetter run 20260810T103008Z: context first
48,060
and cache read / call 41,775.

The issue's own estimate is that dropping the transitions table alone takes the
floor to ~33k. This also removes 8,733 bytes of ordinary prose (~2,200 tokens),
so the prediction is context first ≈ 30–31k and cache read / call lower
by about the same absolute amount on a comparable run — with the caveat that
per-call cache read also moves with turn count and with how much source a run
reads, so the floor is the honest half of the comparison.
pr-review-report token-profile, via /observe-run, is what settles it.

Raised, not built

  1. The ceiling will need raising eventually, deliberately.
    the_router_stays_a_router caps CLAUDE.md at 22,528 bytes — below
    router + smallest moved section, so any reference section coming back trips
    it, with 1,545 bytes of headroom for a rule to grow. When invariants
    legitimately outgrow that, the right move is to raise the constant with the
    arithmetic in the doc comment in front of you, not to widen it pre-emptively
    now.
  2. README's "Files (tracked here)" table lists neither CLAUDE.md nor these
    two.
    Left alone: the router is the index for this set, and adding rows for
    docs the table has never carried is a different decision. Should that table
    carry the doc set?
  3. Merge-update expected. This touches pr-review-report-rs/src/main.rs
    (test module only, ~146 added lines in settings_tests), which
    Journal LLM mistakes separately from the prompt, so rules can be deleted #258 and the PR for
    observe-run step 1 tells the caller to hold a foreground call that outlives the 600s ceiling — runs read as hangs #260 also touch. No
    coordination attempted; whichever lands first, this one takes a merge of
    main.

QA

  • Discriminating tests: settings_tests::every_router_pointer_resolves_to_a_file_that_exists,
    settings_tests::every_documented_section_is_in_exactly_one_home_and_a_moved_one_is_pointed_at,
    settings_tests::the_router_stays_a_routerall three fail on base,
    verified by reverting the docs (git checkout origin/main -- CLAUDE.md, both
    new files removed) and re-running the filter — 37 passed, 3 failed: the
    pointer test because the base router names no file at all, the homes test
    because that router still carries ## Transitions (subcommands), the ceiling
    test at 47,797 bytes against 22,528. Full suite:
    nix develop .#rust -c cargo test — 1,229 unit + 113 integration, 0 failed.

  • Mutations applied: 9 applied, 9 behaved as specified — 7 killed, 2 controls
    survived.
    Each was applied to the real tree with an exact-anchor check (a
    non-unique anchor is recorded as NEVER APPLIED, not as a kill), the suite was
    re-run with the baseline verified green and 40 tests proven to have RUN, and
    the file was reverted from git afterwards.

    # mutation expected killed by
    M1 a pointer path stops resolving (TRANSITIONS.mdTRANSITIONS-MOVED.md) KILL every_router_pointer… + every_documented_section…
    M2 the pointer block is deleted outright KILL every_router_pointer… + every_documented_section…
    M3 a moved section is pasted back into the router KILL every_documented_section…
    M4 a kept section is renamed out of the router (## Invariants## The rules) KILL every_documented_section…
    M5 a moved section is lost from its new home KILL every_documented_section…
    M6 a pointer resolves to an EMPTY file KILL every_router_pointer… + every_documented_section…
    M7 the router grows 3,000 bytes past its ceiling KILL the_router_stays_a_router
    C1 CONTROL — a kept section's prose is reworded (the north-star sentence) SURVIVE survived
    C2 CONTROL — a new ~400-byte invariant bullet is added SURVIVE survived

    The two controls are the point: the tests read the RULE (which section lives
    where, and whether the reader is told) and not the paragraphs, so ordinary
    editing of the material that stayed does not touch them. M6 is the one that
    turns "exists" into a real check — a pointer to an empty file passes a bare
    existence test.

  • Oracle: who reads what is derived from campaign-run.sh:266 / review-run.sh:247
    (the two cwds), review-settings.json's deny list, cron.env's WORK_DIR,
    and the per-tool censuses of the live traces runs/20260810T083614Z.jsonl and
    review-runs/20260810T103008Z.jsonl — not from this change's belief about
    them. Byte figures are wc -c on the pre-change file, split at its own
    headings. The "already stated elsewhere" claim for the checkout rule is quoted
    out of review-prompt.txt.

  • Category check: the issue asks for (a) CLAUDE.md keeps auto-loading while
    what auto-loads is cut to judgement material — done; (b) role-specific and
    reference material in files named by whoever needs them — TRANSITIONS.md,
    WORK-CLONES.md; (c) one line per moved file in the router — two pointers,
    gated by every_router_pointer…; (d) the vetter keeps what it judges from —
    invariants, FSM semantics and tool surface are byte-identical; (e) 258's
    premise unbroken — argued above, no test of its adjusted. Not covered, and
    deliberately: no forced run, so the effect is a prediction and the issue's two
    numbers stand unbeaten until token-profile says otherwise.

Summary by CodeRabbit

  • Documentation

    • Added comprehensive guidance for CLI workflows, MCP transitions, slash commands, work-clone lifecycle, safety checks, cleanup, and operational limits.
    • Reorganized the primary project guidance into a concise navigation hub linking to dedicated reference material.
    • Clarified required tracking for key workflow documentation.
  • Tests

    • Added checks to ensure documentation links resolve, topics appear in the designated locations, and the central guide remains within its size limit.

thedavidmeister and others added 2 commits August 10, 2026 11:14
…iles

`CLAUDE.md` auto-loads into every turn of any session whose cwd is this repo
— the vetter's, because `review-run.sh` cds to the install dir. The producer's
cwd is `$WORK_DIR`, which holds no `CLAUDE.md`, so it pays nothing: measured
2026-08-10, first context 48,060 against 14,199.

What auto-loads is now what governs judgement and binds every reader: the FSM
framing, the tool surface, the invariants. The `pr-review-report` CLI reference
(41% of the file, and the vetter has no `Bash` to invoke any of it) moves to
`TRANSITIONS.md` with the slash-command layer above it, and the clone
lifecycle to `WORK-CLONES.md`. Each has a one-line pointer in the router: a
rule an agent never learns is not one it errors on, it is one it silently
violates.

Closes #261

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
`.gitignore` is a whitelist, so a new root file is untracked by default. These
two would then exist on this box and nowhere else, and every pointer in the
router would dangle on a fresh checkout.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@thedavidmeister thedavidmeister self-assigned this Aug 10, 2026
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

CLAUDE.md now routes readers to dedicated transition and work-clone references. New tests validate documentation pointers, section placement, file existence, and the CLAUDE.md size limit. Git tracking exceptions preserve both reference files.

Changes

Documentation routing

Layer / File(s) Summary
Transition reference documentation
TRANSITIONS.md, .gitignore
TRANSITIONS.md documents CLI, MCP, and plugin transitions. .gitignore preserves tracking for the reference files.
Work-clone reference documentation
WORK-CLONES.md
Documents clone lifecycle, path guards, cleanup decisions, refusal budgets, result limits, and checkout postconditions.
Router and documentation validation
CLAUDE.md, pr-review-report-rs/src/main.rs
CLAUDE.md points to dedicated references. Tests validate pointers, section placement, file existence, and the 22,528-byte size ceiling.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Suggested reviewers: claude

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the router restructuring and the reduction in CLAUDE.md size.
Linked Issues check ✅ Passed The changes satisfy issue #261 by routing documentation, preserving judgement material, adding pointers, and adding conformance tests.
Out of Scope Changes check ✅ Passed The documentation, tracking, and test changes directly support the router restructuring described in issue #261.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 261-claude-md-router

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ast-grep (0.45.0)
pr-review-report-rs/src/main.rs

ast-grep timed out on this file


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@thedavidmeister

Copy link
Copy Markdown
Contributor Author

🤖 ai:producer — merge-update against main, and the one question this PR was told to answer before anything else

Head is now d267d455979d4ff451462b93a571a21789f14e73 — a merge of main (d854b15b84208e7a5077f4761ce0fe8f92c0a327, which landed #258) into 261-claude-md-router. Merge base was f5f685b; never a rebase.

The conformance-test premise: it holds, and here is the assertion it holds against

#258 landed RUNNER_CONTEXT_FILES and two tests over it. The premise is stated in the const's own doc comment, and it is a claim about shipped bytes, not about reachability:

Every file whose bytes a model actually receives, and how each one gets there. […] CLAUDE.md is the one IMPLICIT channel: review-run.sh cds to the install dir before invoking the model, so the repo root is that run's project memory. --add-dir appears on both runners and is NOT in this list on purpose — it confers read membership, which makes a file reachable on request, not shipped on every turn.

const RUNNER_CONTEXT_FILES: &[&str] = &[
    "campaign-prompt.txt",
    "campaign-worker-prompt.txt",
    "review-prompt.txt",
    "CLAUDE.md",
];

What the router would have to do to break it is add a fifth shipped file. It does not, and the check is mechanical rather than rhetorical: the two pointers are ordinary markdown links, - **[TRANSITIONS.md](TRANSITIONS.md)**, not @-imports. @path is the one CLAUDE.md syntax that pulls another file's bytes into the same implicit channel; grep -nE '@[A-Za-z0-9./_-]+\.md' CLAUDE.md returns nothing. TRANSITIONS.md and WORK-CLONES.md land in exactly the --add-dir class the doc comment puts outside the list — the same class every other file in this repo is already in.

The two tests, run by name on the merge commit, both pass, and neither was touched:

  • the_journal_is_never_shipped_to_a_runners_context — 1 passed. It asserts no file in RUNNER_CONTEXT_FILES contains the string mistake-journal.jsonl. The router does not; neither do the two new files (which are not in the set anyway).
  • every_journal_citation_in_a_prompt_resolves_to_an_entry — 1 passed. Its cited > 0 clause is what could have broken silently: it would fail if the only [LJ-…] citation had moved out of the scanned set. It has not — the repo's one citation is campaign-prompt.txt:34 ([LJ-0001]), and no LJ- string appears in CLAUDE.md, TRANSITIONS.md or WORK-CLONES.md. Nothing was adjusted, skipped or retargeted to make this green.

The sibling consequence this PR's body already raised stands unchanged and unbuilt: a citation written into TRANSITIONS.md or WORK-CLONES.md later is outside the scan and could dangle. That is a question about the citation scan's scope for #258 to answer, not a defect of this change.

The three properties, verified rather than asserted

Sections were split at their own ## headings and compared byte-for-byte against f5f685b:CLAUDE.md:

Section Base bytes Home now Verdict
## The pipeline is a finite state machine 6,071 CLAUDE.md byte-identical
## The FSM as a tool surface (MCP) 5,467 CLAUDE.md byte-identical
## Invariants 7,800 CLAUDE.md byte-identical
## Transitions (subcommands) 19,501 TRANSITIONS.md byte-identical
## The layer a human types: slash commands as a plugin 2,292 TRANSITIONS.md byte-identical
## Work-clone lifecycle 6,391 WORK-CLONES.md byte-identical

CLAUDE.md 47,797 → 20,983 bytes (−26,814, −56%); TRANSITIONS.md 22,665; WORK-CLONES.md 7,377.

  1. The vetter keeps what it judges from. All three judgement sections are in the router in full and unedited — every byte the FSM framing, the tool surface and the invariants had on main is still auto-loaded. Every section is in exactly one home; nothing is duplicated.
  2. Nothing silently deleted. Two files moved, two pointer lines, one each, both in the preamble above the first heading where router_pointers reads them. Every base section resolves to a home; none is missing.
  3. Nothing that works today loses anything. No file in the repo links into a CLAUDE.md# anchor (git grep -nE 'CLAUDE\.md#' is empty), so no reference dangles. .gitignore is a whitelist and both new files are on it, so a fresh checkout has what the pointers name — the merge kept Journal LLM mistakes separately from the prompt, so rules can be deleted #258's !/mistake-journal.jsonl block and this branch's !/TRANSITIONS.md / !/WORK-CLONES.md block side by side.

Gates

  • Full suite on the merge commitnix develop .#rust -c cargo test: 1,258 unit + 121 integration = 1,379 passed, 0 failed across all ten binaries. A clean merge is not evidence, so this is the suite on d267d45 itself, not on either parent.

  • pre-commit run --all-files — the repo has no config of its own; CI runs the rainix bundle from rust-shell at the pinned RAINIX_SHA 53e96a7d, so that is what was run: deadnix / denofmt / nil / nixfmt / no-consumer-prettier / prettier-rainix / rustfmt / shellcheck / statix / taplo / yamlfmtall Passed, nothing rewritten (git status clean afterwards). denofmt is the hook that owns the markdown here and it had no opinion.

  • Mutation spot-check re-run on the merge commit, baseline committed first. Filter settings_tests::, and the filter is proven to have RUN — 42 tests executed each pass, never a zero-match.

    # mutation expected result
    M1 pointer target renamed to TRANSITIONS-MOVED.md KILL killed by every_router_pointer… + every_documented_section…
    M3 ## Transitions (subcommands) pasted back into the router KILL killed by every_documented_section…
    M5 ## Work-clone lifecycle renamed out of WORK-CLONES.md KILL killed by every_documented_section…
    M6 a pointer resolves to an EMPTY file KILL killed by both
    C1 CONTROL — reword the north-star sentence in a KEPT section SURVIVE survived, 42 passed

    Tree restored and re-verified green after each. The control is the point: the tests read the rule, not the prose, so Journal LLM mistakes separately from the prompt, so rules can be deleted #258's 1,900 new lines in the same file changed nothing about what they hold.

  • CodeRabbit — swept by GraphQL reviewThreads, not by the check state: 0 threads, 0 reviews, nothing unresolved. The green CodeRabbit check is not a pass, it is Review rate limited — the bot never started. The push above re-arms it; anything it raises will be answered.

Raised, not built

  • The pointer is discoverability, which is the exact mechanism the_journal_is_never_shipped_to_a_runners_context exists to deny the journal — "a run that is told the file exists inside a readable --add-dir root will read it". For a doc that is the intent and for the journal it is the opposite, so the two are consistent; but it does mean the honest prediction is bounded. If the vetter follows the TRANSITIONS.md pointer anyway, it pays 22,665 bytes as a mid-run Read that then sits in the main loop for every remaining turn — worse than the table it replaced. The bullet says "Read it before invoking one, or before adding one" and the vetter can do neither, and TRANSITIONS.md's own header says "Not the vetter", but neither is a gate. token-profile on the next vetter run has to report whether the file was read at all, not just the first-context number — a lower floor with a mid-run 22KB Read is not a saving.
  • README's "Files (tracked here)" table still lists none of the three. Left alone, as filed.

QA

  • Discriminating tests: unchanged from the opening submission — every_router_pointer_resolves_to_a_file_that_exists, every_documented_section_is_in_exactly_one_home_and_a_moved_one_is_pointed_at, the_router_stays_a_router, all three failing on base. Re-confirmed live on the merge commit by the mutation table above.
  • Oracle: the premise verdict is read out of Journal LLM mistakes separately from the prompt, so rules can be deleted #258's own RUNNER_CONTEXT_FILES doc comment and the two tests' bodies at d854b15, not out of this PR's belief about them. Section identity is a heading-split byte comparison against f5f685b:CLAUDE.md. The cwd claims are review-run.sh:247 / campaign-run.sh:266, and both runners' --add-dir "$DIR" flags are at review-run.sh:406 / campaign-run.sh:485.
  • Not covered, deliberately: still no forced run, so the cost effect remains a prediction. context first 48,060 and cache read / call 41,775 stand unbeaten until /observe-run says otherwise.

@thedavidmeister

Copy link
Copy Markdown
Contributor Author

Reviewed d267d45: approve
Rulings-conformance: checked against the CLAUDE.md Invariants section and every ruling stated for this work. (1) "file and agent converting claude to a router" — a router is what shipped, not the deletion floated earlier in the same conversation: 47,797 → 20,983 bytes with every moved section byte-identical to base, in exactly one home, each carrying a one-line pointer, because auto-loading is what makes conventions unforgettable and a rule an agent never learns is a rule it silently violates. (2) The issue's own constraint — "whatever moves out must not break that test's premise; if it does, say so rather than adjusting the test to fit" — obeyed and verified, not assumed: settings_tests::the_journal_is_never_shipped_to_a_runners_context is a claim about SHIPPED bytes, the router's pointers are ordinary markdown links rather than @-imports (the only syntax that would pull bytes into that implicit channel; a grep for it is empty), the moved files land in the --add-dir class the doc comment excludes on purpose, and nothing about the test was touched. (3) "producer resolves merge conflicts — merge base in, never rebase" — main (d854b15, #258) merged in at base f5f685b. (4) "semantic conflicts hide outside markers" — the full suite ran ON the merge commit: 1,258 unit + 121 integration = 1,379 passed, 0 failed. (5) "adv mut every PR" — mutation spot-check re-run post-merge with the baseline committed first and the filter proven to have RUN (42 tests per pass): pointer renamed, section pasted back, section lost from its home, pointer → empty file all killed; the reword-the-prose control survived. (6) "CodeRabbit CI-pass hides open threads" — swept via GraphQL rather than the check state, which is how we learned the prior green was Review rate limited and the bot had never reviewed this PR at all. (7) "removal is semantic not grep" — nothing was grep-deleted; each section was relocated whole and byte-compared against base. (8) "rainix static toolchain" — pre-commit run --all-files at pinned RAINIX_SHA 53e96a7d, all 11 hooks pass with nothing rewritten, denofmt included (it owns markdown here, and this PR is almost entirely markdown). (9) "trace consequences before proposing" — the prediction is stated with its failure mode rather than as a win: if the vetter follows the TRANSITIONS.md pointer it pays 22,665 bytes as a mid-run Read that then persists for every remaining turn, worse than the auto-loaded table, and nothing gates that. The follow-up token-profile must report whether the file was read at all, not just first-context. Merging with pending (not red) checks: 0 failures, and rs-test/rs-static/nix-build are what the local suite and hook run already covered.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLAUDE.md`:
- Around line 7-9: Update the measurement statement in CLAUDE.md to remove the
unsupported claim that two forced runs were performed; either rewrite the
context values as predictions or replace them with verified recorded forced-run
evidence, while preserving the surrounding comparison and Bash limitation
context.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ba08dc7f-f01c-4b80-aced-a82e3dc9e39c

📥 Commits

Reviewing files that changed from the base of the PR and between d854b15 and d267d45.

📒 Files selected for processing (5)
  • .gitignore
  • CLAUDE.md
  • TRANSITIONS.md
  • WORK-CLONES.md
  • pr-review-report-rs/src/main.rs

Comment thread CLAUDE.md
Comment on lines +7 to +9
Measured 2026-08-10 across two forced runs: first context 48,060 for the vetter
against 14,199 for the producer, with 41% of this file a CLI reference the
vetter has no `Bash` to invoke (#261).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the unsupported forced-run measurement claim.

The PR objectives state that no forced run was performed. Line 7 instead states, “Measured 2026-08-10 across two forced runs.” Replace the measured values with prediction language, or add the recorded forced-run evidence before merging.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CLAUDE.md` around lines 7 - 9, Update the measurement statement in CLAUDE.md
to remove the unsupported claim that two forced runs were performed; either
rewrite the context values as predictions or replace them with verified recorded
forced-run evidence, while preserving the surrounding comparison and Bash
limitation context.

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.

Make CLAUDE.md a router: the vetter pays 48KB every turn, 41% of it a CLI reference it cannot invoke

1 participant