An agent can produce more correct-looking code in a day than a team can understand in a week. Nothing stops that except a rule about what you may merge. Every team says it wants to understand its own code. A standard is what turns that sentiment into something you can adopt, cite in a policy, check in a pull request, and argue about when it gets inconvenient. This is that document, and it is deliberately short.
github.com/tacoda/fulcorum-comprehension-standardThe whole standard is one law, one block of four fields, and a bar for when it's enforced. Three moves put it into a repo. Read the rest of the page afterward if you want the reasoning.
git clone https://github.com/tacoda/fulcorum-comprehension-standard.git
# 1. the claim: every PR now asks for four fields
cp fulcorum-comprehension-standard/.github/pull_request_template.md .github/
# 2. the gate: refuse a PR whose block is missing or unfilled
cp fulcorum-comprehension-standard/hooks/comprehension-gate.py .github/scripts/
# 3. the law: put it where the agent reads it, not just where people do
cat fulcorum-comprehension-standard/LAW.md >> CLAUDE.md
Then decide one thing as a team and write it down: which changes require which level (section 4). That decision is the standard. Everything else is plumbing.
Wiring this up takes an afternoon. Meaning it takes longer, because the first week it will block a change somebody wants merged, and the standard is only worth anything if it holds that week. A gate the team waves through is worse than no gate: it teaches people that written rules here are decorative.
Everything below is machinery for enforcing a single sentence.
Don't merge a change you can't explain. Not to a reviewer, not to the agent, not out loud in your own words. If you cannot say what it does, you have not finished reading it.
"Explain" is doing real work in that sentence, so pin it down. Explaining is not summarizing the diff back. A diff summary is a restatement of syntax, and the agent will write you a beautiful one on request. Explaining means you can say what the change does to the system, where it enters and where it leaves, and what rule it obeys. Then the hard one: what would have to be true for it to be wrong. Those four things are section 2.
The law binds the person who merges, not the person or process that wrote the code. That distinction is the point. When an agent writes the change, authorship stops being a useful place to put accountability. The author has none: it doesn't get paged, doesn't sit in the postmortem, doesn't answer for the outage. Merging is the last human decision in the chain, so that is where the obligation lands.
Guidelines lose to deadlines, quietly and every time. Understanding is the one obligation a team cannot hand to a tool. So the standard states it as an absolute and writes the exceptions down in advance (section 4), not under pressure.
"I understand it" is unfalsifiable. Four short fields are not. This block goes in the pull request body, written by the person asking for the merge.
comprehension:
does: <what this change does to the system, in one sentence>
seam: <where it enters> -> <where it leaves>
policy: <the rule or doc this obeys> | CHARTER-GAP
falsifier: <the case that would make this wrong>
covered by: <test name> | NONE
CHARTER-GAP and open an issue. That is a finding, not a failure, and it is one of the more valuable things a junior produces.
NONE, and it means you shipped a declared risk instead of a hidden one.
Four fields, well under a minute when you actually understand the change, and genuinely hard when you don't. That asymmetry is the entire mechanism. The block is not paperwork about the work, it is the shortest test that the work was understood.
Asking the agent to write your comprehension block produces four fluent, plausible, often correct sentences and teaches you nothing, which inverts the point of the exercise. Write it first, in your own words. Then, if you like, ask the agent to argue with it: getting corrected after you have committed to an answer is how the judgment actually forms.
Understanding is not binary, so the standard grades it, and each level rests on evidence somebody else can check, not on how confident the author feels.
| Level | The claim | Observable evidence |
|---|---|---|
| L0 Passing | "The tests passed." | A green pipeline. It makes no claim about the change itself, and nobody should read one into green. |
| L1 Restatement | "I can say what it does and where it lands." | does and seam filled and accurate. The author can restate both without opening the diff again. |
| L2 Falsification | "I can say how it would be wrong, and I checked." | All four fields filled. A named test covers the falsifier, and that test goes red if you revert or break the change. |
| L3 Defense | "I can say why this way and not the other way." | L2, plus the author names the alternative not taken and why this one is the choice the codebase's policy requires. Survives a reviewer arguing the alternative. |
The jump from L1 to L2 is the one that matters and the one people skip. L1 is a description, and an agent can hand you a correct description of code that is quietly wrong. L2 requires you to have imagined the failure and gone looking for it. That is the habit the whole standard exists to install, and it is exactly the habit that shipping-fast erodes first.
L3 is where architecture lives. Most contested engineering decisions have several answers that all work, and the right one is the one consistent with how this system already does things. An agent optimizes for a working answer and has no stake in that consistency, which is why drift compounds silently in agent-heavy codebases.
A level describes a change at merge time, not an engineer's seniority. A staff engineer merges an L1 dependency bump on Tuesday. A first-year engineer merges an L3 change to a pricing rule on Wednesday. Read the levels as a career ladder, and you turn a useful tool into an insult.
A standard that demands maximum rigor everywhere gets ignored everywhere. Set the bar at L2, raise it to L3 where being wrong is expensive, and write the exemptions down before you need them.
One rule of thumb keeps the L3 list honest: ask what the cost is of being confidently wrong. If the answer is a refund program, an incident, a regulator, or a migration you cannot reverse, it is L3. If the answer is a follow-up commit, it is L2.
The bar does not erode because somebody argued it down; it erodes by exemption creep: one urgent change waved through, then the next one citing the first as precedent. If you skip the bar, record that you skipped it and why, in the PR, in the same block. A logged exception is a decision. An unlogged one is a new default.
Conformance is a property of a team's process: there is no auditor, no badge, and no way to fail it other than by not doing it.
A team conforms to CS v0.1 if all five of these hold:
CHARTER-GAP reaches a human who owns and answers it. If people only type it into a box and never read it, field three of the block is theater.
falsifier is not reviewing comprehension. Reverse-review is the exercise that trains this.
Every conformance item describes something the team does, never something a person scores. None of this is politeness. A standard that produces per-person numbers becomes a performance instrument within a quarter. Then people optimize the number instead of the understanding, and you have paid for the ceremony without buying the comprehension.
A template that asks for the claim, and a gate that refuses a pull request without one, both short enough to read in full, which is deliberate.
## What and why
<!-- Required by the Comprehension Standard v0.1. Write this yourself,
before you ask the agent for anything. Level: L2 default, L3 for
money, security, data integrity, or a written policy. -->
```comprehension
does:
seam:
policy:
falsifier:
covered by:
```
level: L2
exception: none
import re, sys
REQUIRED = ("does", "seam", "policy", "falsifier")
PLACEHOLDER = re.compile(r"^(todo|tbd|n/?a|\.+|\?+)$", re.I)
def check(body):
block = re.search(r"```comprehension\n(.*?)```", body, re.S)
if not block:
return ["no comprehension block in the PR body"]
text = block.group(1)
# [ \t] not \s: \s spans newlines, so an empty field eats the next one
fields = dict(re.findall(r"^[ \t]*(\w+):[ \t]*(.*)$", text, re.M))
problems = []
for name in REQUIRED:
value = fields.get(name, "").strip()
if not value:
problems.append(f"{name}: empty")
elif PLACEHOLDER.match(value):
problems.append(f"{name}: placeholder ({value!r})")
falsifier = fields.get("falsifier", "").strip()
if falsifier and falsifier.upper() != "NONE":
if not re.search(r"covered by:[ \t]*\S+", text):
problems.append("falsifier: named, but no covering test")
return problems
if __name__ == "__main__":
found = check(sys.stdin.read())
for p in found:
print(f"comprehension-gate: {p}")
sys.exit(1 if found else 0)
Roughly twenty-five lines, and that is the whole enforceable surface. Everything else in this document is a decision a team makes. That split is the right division of labor: machines are good at insisting a step happened, and bad at judging whether it happened well.
It checks that four fields exist and are not placeholders. It has no opinion about whether they are true, so a confident, articulate, entirely wrong block passes cleanly, and any honest description of this standard has to say so. The gate buys one thing: nobody merges without making the claim, and a claim on the record invites dispute. Disputing it is human work. Reverse-review is how a team gets good at that work.
What this standard refuses to be, and where it is most likely to fail you, both stated before you adopt it rather than after.
falsifier is the field people fake first. The tell is a falsifier restating the happy path inverted ("it would be wrong if it returned the wrong value"). A real falsifier, by contrast, names a specific input and a specific wrong outcome.Diffs and reviews. Never people. If your adoption ends with a dashboard ranking engineers, you have built something else and should stop calling it this.
v0.1, CC BY 4.0. Forking is the expected case, not the exception.
seam for blast-radius. A team on regulated data might add data-class. Four to five fields is the working range, and past that people stop reading them.The standard sets the bar. Reverse-review is the weekly exercise that trains people to clear it and to dispute a claim that only looks cleared. The junior-to-senior workshop is the one-hour lab where the whole idea starts, with a green test suite and a customer quietly overcharged a nickel.