What BPOS runs · Plan

The code was right.
The reach was wrong.

When people reject an AI coding agent's work, it is rarely because the code does not compile. It is because the change did not reach far enough. This is how BPOS measures how far a change reaches, and why that measurement has to be found, not declared.

The blast radius of a change is everything else the change can affect: the code that depends on what it touches. In BPOS it is found by descent. The target is resolved level by level until the level where something new is born; that level is written whole, and its blast radius is read one level up.

This article belongs to What BPOS runs. It sits between Every job is a contract, which says what a job must do, and the work itself.

The code was right; the reach was wrong. Of 113 reasons reviewers gave for rejecting agent work, 5% cite a compile or type error, at least 29% cite what else the change should have touched, and 35% say part of it was right. Distance is found by descent, never declared: repository, same; package, read this; file, born here; region, inside it. Write the level where the change is born, whole, and read one level up: that is the blast radius. When a job was labelled create, the file already existed 25 times in 86. Like a coastline, a change has no scale you can know before you measure it.

What reviewers actually reject

We read 113 reasons our reviewers gave for rejecting agents' work. Only 6, about 5%, cite a compile or type error. At least 33, about 29%, say the change should also have touched something else; that count is a lower bound from keywords. And 40, about 35%, say explicitly that part of the work was right. The code is almost never wrong. The reach of the change is.

One rejection shows the shape. An agent added a new data model and imported it. The reviewer's note: the index registers every model in two lists, and the new one was in neither. Nothing about the new model was wrong. The agent had not read the one file that lists all the models, one level above the file it wrote.

Create and edit are one operation

Most coding tools sort work into two kinds: create a file, or edit one. It looks natural, and it is wrong. Writing an article creates and edits in the same motion. The real variable is distance: how far the result is from what exists now. A new file is an edit whose previous content is empty. Changing one function is a creation at a small radius. Same operation, different magnitude.

We used to label each job create or edit from its title and tags, before reading anything. Between 18 and 29 September we recorded the label beside what actually existed. Of 86 jobs labelled create, the file already existed in 25. A scale declared before looking was wrong almost a third of the time, so we stopped declaring it.

Why it has to be found: the coastline paradox

In 1967, Benoit Mandelbrot asked in Science how long the coast of Britain is, and showed that the answer depends on the ruler. Measure with a long ruler and you miss the bays; measure with a short one and the coast grows, because detail keeps appearing at every scale. Some things have no scale you can know before you measure them. That was the start of fractal geometry.

A change to software is one of them. From its title you cannot know whether it is a new repository, a new file or one changed line. So in BPOS the scale is never declared. It is found by descent.

How distance is found

A target is resolved at each level its kind declares: for code, repository, package, file and region; for any other kind, wherever that kind stops declaring levels. That stopping rule is what keeps the method the same for every language and every kind of artefact. At each level the target is either the same, changed or born.

  • The depth of the job is the coarsest level at which something is born.
  • The job is then always one sentence: write that level whole, given its parent. The parent is recomposed, never patched.
  • What to add is what is born.
  • What to read is the blast radius: the dependencies of what is touched, one level up. In the rejection above, the new model is born at file level; one level up is its package; and the package's dependencies lead straight to the index that lists the models.

Distances are compared as rates, not totals, so describing the same change in finer pieces does not make it look bigger. It is the same reason the rule that weights our procedure divides credit by the length of the path.

The same procedure at every scale

The idea is fractal in a second sense: the same procedure repeats at every level. Writing a site, a section of pages, a page, a paragraph or a rule is one operation: write the declared scope whole given what is around it, judge it against its contract, and move on. And the test for whether a part matters is the same at every level: remove it, and see whether the successful paths still reach the goal. That is the test behind the stages every route must cross in A goal has necessary stages.

Where it stands

  • Measured: since 18 September every job with a target file records whether that file existed and what it contained. The create-or-edit label read from a title or tags is no longer used.
  • Designed, not built: depth across every level, and the blast radius handed to the agent as what it must read. Today a node still chooses its own reading; the next article in this series is about that choice.
  • Open: what "dependencies" means for things that are not code, where nothing declares an import; and how depth reads when nothing is born and something is only changed.
  • The test we have designed but not run: if the missing reading is the blast radius, rejected attempts should have read less of theirs than approved attempts at the same job.

Common questions

What is the blast radius of a code change?

Everything else the change can affect: the code that depends on what it touches. In BPOS it is found by resolving the change level by level, finding the level at which something new is born, and reading the dependencies of what is touched one level above.

Why do AI coding agents make incomplete changes?

Because they write what they were asked to write and do not read far enough around it. In 113 reasons reviewers gave for rejecting agent work, only 5% cited a compile or type error, while at least 29% cited something else the change should have touched.

What is the coastline paradox?

The measured length of a coastline depends on the length of the ruler: the shorter the ruler, the longer the coast, because detail keeps appearing at every scale. Benoit Mandelbrot used it in 1967 to introduce fractal dimension. It means some things have no scale you can know before you measure them.

Sources

  • Benoit Mandelbrot, "How Long Is the Coast of Britain? Statistical Self-Similarity and Fractional Dimension", Science 156(3775), 1967.
  • Our own records: 113 reviewer rejection reasons, read in September 2026; declared and measured origin of 174 job targets, 18 to 29 September 2026.

Related writing