Skip to content

feat(ci): cap the plugin prompts, and cut 1,620 bytes to set it - #326

Merged
thedavidmeister merged 2 commits into
mainfrom
plugin-prompt-cap
Aug 16, 2026
Merged

thedavidmeister merged 2 commits into
mainfrom
plugin-prompt-cap

Conversation

@thedavidmeister

Copy link
Copy Markdown
Contributor

rainix's prompt-cap action is opt-in per repo, and this repo pointed it at **/*prompt* only — the cron runner prompts. No plugin agent or command file has "prompt" in its path, so plugins/human-fsm/agents/*.md was entirely uncharged: 123,610 bytes growing under a green prompt cap check. #325 added 1,837 bytes to agents/nr.md and sailed straight through it.

The action's own reasoning covers these files exactly — a /nr dispatch reads its agent file whole into a fresh window, so every byte is paid once per turn of that run.

Its own budget, not a line in the runners'

One shared total would let a cut in the cron prompts pay for growth in the plugin prompts, which is the ratchet cancelling itself out. The runner cap also has zero headroom today — prompt-cap: clean — 153919 bytes of prompt (cap 153919), where the 6,213 bytes above the four files' raw size is the action's one-hop named-file charge — so it has nothing to lend in any case.

The cut that sets it

The convention is "Set it BELOW what they weigh today: the point is the cut." So:

  • ncc.md carried two sections for one rule — ## Typed reads, and no shell at all and, four sections later, ## Typed reads. Merged into one.
  • nr.md's ## Why the skill does not make this a second vetter and ## `whole-repo` is a different job were both defences of rules already stated in step 5, not instructions the run acts on. Compressed into one section that keeps the operative content: the lens is subordinate to steps 3 and 4, pr:<number> is declared on every invocation, and a sweep never arrives by default.

123,610 → 121,990, cap set at 121,990. Growth now needs a visible raise in a PR diff.

human-fsm 0.27.0 → 0.28.0, marketplace in lockstep.

QA

  • Discriminating tests: n/a — the change is a CI job plus prompt prose. The gate itself IS the test and it discriminates: run against the pre-cut tree the new job fails (ERROR: the prompt files matching plugins/*/agents/*.md plugins/*/commands/*.md load 123610 bytes — 1620 over the 121990-byte cap), and against this tree it passes (prompt-cap: clean — 121990 bytes of prompt (cap 121990)). Both verified locally via nix run path:<rainix>#rainix-static -- prompt-cap.
  • Mutations applied: cap 121990 → the glob deleted ⇒ ERROR: no file matched … as written it caps nothing (the action fails a vacuous glob rather than passing it, verified by running the globs from the wrong cwd); cap 121990 → 1 ⇒ fails naming every charged file. The cap value itself is the mutable line and the gate keys on it directly.
  • Oracle: rainix-static prompt-cap's own byte count, run out of rainlanguage/rainix at origin/main 7f223b4 — independent of this repo, and the same binary the shared action invokes. The pre-cut figure 123,610 and the post-cut 121,990 are its output, not a wc estimate; wc -c on the raw files gives 123,610 too but misses the one-hop charge that makes the runner cap's 153,919 differ from its 147,706 of raw file bytes.
  • Category check: the gap is "prompt files this repo does not charge", not "nr.md is big". Covered as the category — the glob takes agents and commands of every plugin (plugins/*/…, not plugins/human-fsm/…), so a new plugin or a new command is charged on arrival rather than escaping by not being named, which is the evasion the action's docs call out. Checked the other two plugins: vetter-judgement and rain-repo-conventions ship README.md + skills/ and no agents or commands, so they contribute nothing today and are covered when they do.

🤖 Generated with Claude Code

rainix's prompt-cap action is opt-in per repo, and this repo pointed it
at `**/*prompt*` only — the cron runner prompts. No plugin agent or
command file has "prompt" in its path, so `plugins/human-fsm/agents/*.md`
was entirely uncharged: 123,610 bytes growing under a green check.

Same tax, and the action's own reasoning covers it — a /nr dispatch reads
its agent file whole into a fresh window, so every byte is paid once per
turn of that run.

Its own budget, not a line in the runners'. One shared total would let a
cut in the cron prompts pay for growth in the plugin prompts, which is
the ratchet cancelling itself out. The runner cap has zero headroom today
(153,919 of 153,919, the last 6,213 being the one-hop named-file charge),
so it has no room to lend in any case.

The cap must sit below what the files weigh, so this cuts to set it:

- ncc.md carried two sections for one rule — `## Typed reads, and no
  shell at all` and, four sections later, `## Typed reads`. Merged.
- nr.md's `## Why the skill does not make this a second vetter` and
  `## whole-repo is a different job` were both defences of rules stated
  in step 5, not instructions the run acts on. Compressed to one section
  keeping the operative content: the lens is subordinate to steps 3 and
  4, `pr:<number>` is declared on every invocation, and a sweep never
  arrives by default.

123,610 -> 121,990, and the cap is set there. Growth now needs a visible
raise in a PR diff.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@thedavidmeister thedavidmeister self-assigned this Aug 16, 2026
@coderabbitai

coderabbitai Bot commented Aug 16, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

@thedavidmeister, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 46 minutes

Limit details: You’ve used all 1 included review currently available under your plan.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 94e5e949-4837-4217-8844-02560062a9bd

📥 Commits

Reviewing files that changed from the base of the PR and between 7828df2 and d57c782.

📒 Files selected for processing (5)
  • .claude-plugin/marketplace.json
  • .github/workflows/rust.yml
  • plugins/human-fsm/.claude-plugin/plugin.json
  • plugins/human-fsm/agents/ncc.md
  • plugins/human-fsm/agents/nr.md

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.

Both hunks are pre-commit's own output, applied verbatim. The rewrap is
byte-neutral, so the 121990 cap is unchanged — re-measured, still 121990.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@thedavidmeister
thedavidmeister merged commit 8d5db8b into main Aug 16, 2026
25 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.

1 participant