Jarvis v2’s instructions to its agents carry one rule above the others, principle 7: “Anything a linter,
type checker, schema validator, code generator or test can decide is enforced that way in
make gate. Agents do only judgement work. A recurring review finding that is lintable becomes
a gate check.” On October 10, 2026 the gate counted 5 checks. On October 28 it counted 126, over 19 days.
What I believed
I’ve held this position before and dropped it. Omnigent’s best weeks came from letting code move a card when the proof was already stored, and when I shut Omnigent off on October 1, I blamed that machinery on weak models. v1 went the other way. Its rules lived in prompts and on a list agents were told to read, and the 271-method class is where that ended.
What brought me back was cost as much as correctness. “More than half of our tokens were being spent on just orchestration and that after a while you just start to wonder well why am I burning 50% of my tokens on orchestration like isn’t that something that I could do just through a mechanical means.”
What the gate holds
On October 29 the gate counts 84 gate scripts, 12 layout rules, and 30 custom web lint rules. A few of them carry most of the weight.
- Size and boundaries. No port in the daemon may have more than 10 methods, and no database driver may be imported outside an adapter. Neither has an escape hatch.
- Layout. Every file has to match exactly one of 143 file kinds in a layout manifest. Code laid out for agents is why.
- Tests. QA runs as its own service. Its planner picks the suites for a diff with no model in the loop, inside a 120-second budget, and reads its playbook from the PR’s base commit, “so a PR cannot change what runs on itself.”
- Review findings. 23 classes of review finding have been turned into checks. The clearest case: one change ran 14 Codex review rounds and about 2.3 million tokens before a lint, written at round 11, found all 19 offending sites at once.
Ratchets
A new rule can’t wait for the old code to comply. So it lands with today’s violators listed in a baseline file, and the list may only shrink: “a PR may remove lines, never add them.” No new baseline files are allowed. When two PRs edit the same baseline, a script merges the two sets and a removal on either side wins. The hand-written list of true exceptions has had zero entries the whole time.
On October 15 I decided the layout would have no exceptions at all. The baseline fell from 1,484 lines to 1,022 in two days, during the layout refactor. Then it moved 13 lines in eleven days. Meanwhile every new ratchet arrived with a list of its own, so the total across all lists held between about 1,200 and 1,350.
The jam
On October 28 the ready queue ran dry, and I reached for the backlog that never runs out. “Yesterday I was running out of work to be able to give to the fleet, so I said, hey, let’s go clean up all the ratchet rules at the same time. Well, ultimately, what that did was it created a giant bottleneck.”
78 cards were filed in one batch, 64 of them with no dependencies. A ratchet card’s whole job is to edit a list. The share of merged PRs touching a shared allow-list or test-tier file went from 6.1% in the week before, 25 of 408, to 31.1% after, 32 of 103. At one tick, 16 of the 24 ready cards were held because they all needed the same baseline file.
Total merges barely moved, 92 in the 24 hours before the order and 90 in the 24 after. What moved was the mix. Ratchet merges went from 2 to 28, and everything else fell from 90 to 62, down 31%. There were three clock hours after midnight UTC with no merges at all, and open PRs peaked at 29. The list that lets old code skip a rule is a shared file too, and a fleet jams on shared files before anything else.
The fix was mechanical and landed by the next afternoon. Two of the shared lists became one file per card, and a third is being split by operation. Line-based baselines now allow up to 4 co-owners at once. 17 cards went on hold, and 12 PRs were closed unmerged. The burn-down still did its job: the layout baseline is down to 954 lines.
What it cost
The checks bought reliability, not speed. v2 merged 11.2 PRs an hour across its first 33 hours, on UI cards with few dependencies. The weeks after ran at 4.8, 2.5, and 3.2 an hour while the checks went from 5 to 126. Some of that is harder work reaching the back end, and some is the gate saying no. I can’t separate the two from this record.
What’s still open
The zero-exceptions rule held at the door and hasn’t emptied the room: 954 baseline lines remain. My answer for the ratchet backlog is a single lane, “one at a time getting that done” over “the next week or two weeks.” Today that lane is a hold on 17 cards, not dispatcher code. Area lanes, each with its own cap, are designed and filed, not running.
The next layer checks the work order instead of the code. “We need to have dependencies. We need to understand estimations. We need to understand what categories these cards are in.” A lint on dependencies and components has run since October 17. The one for categories, estimates, and the need a card traces to is filed, not built.
A rule that a machine can decide goes in the gate with its check. The cleanup that check creates goes through one card at a time. A check for every rule my agents follow has the September commit where this started.
How this was counted
Counted checks are top-level gate scripts, layout-engine rules, and custom web lint rules on main at the last commit of each day measured, tests and libraries excluded. Exception entries are the non-comment lines of every allow, baseline, and exception file; October 14’s total of 3,840 included a 2,174-entry snapshot file deleted the next day as “not exceptions,” so the chart leaves it off the scale. The jam figures are GitHub PR data and the merged diffs on main from October 21 to 29. The quotes are mine from an interview on October 29, 2026, except where the text credits a document in the repository.
This project
This project, in order
1.53 million lines deleted, the old screens kept, and three lessons the rewrite had to learn again
Claude Code, OpenAI Codex, Python, React
Previous · Rewrite
One file per piece of code with its test beside it, median file 236 lines to 70, and merge conflicts per merge down 23%
Python, React, TypeScript, Storybook, Git
Next · Layout
Start
I’ll tell you in about a day whether I’m the right person. The first conversation is fit, not a free architecture review.