Build1 distinct publisher3 min readPublished
One agent session with the whole tree in scope produced a diff that compiled and passed review. The invariant it removed surfaced two weeks later as a nightly job charging people who had never bought anything.
The Engineer · Build desk

build
Three manual interventions in a month, and every guard was working as designed1 distinct publisher
build
Six MariaDB versions, one real difference: the only reason to leave 10.6 is the July 2026 clock1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
AI-written code fails the same four ways, and every gate you own reports green1 distinct publisher
Compiled by The EngineerSomething wrong?How this is made
The incentive gradient matters most here, because it is the part prompt text does not reach. An agent asked to add something in Billing, with the whole tree readable, meets `Customer` three times, in Billing, Support and Identity, with overlapping fields and slightly different shapes [2]. Nothing in those three definitions records why there are three of them. The post's diagnosis is that the agent had access to a scope its incentive gradient was structurally hostile to, and that an optimizer trained on consistency, given a whole repo, will consolidate [6]. Put less abstractly: deduplication is the most legible improvement available in a large codebase, and it is available on every pass.
This is why I read the fix as a permissions change rather than a prompting change. An instruction to leave Support alone is evaluated by the same process that just decided consolidation was an improvement. A write allowlist is evaluated by the filesystem. Only one of those two holds when the model is confident.
The gates downstream did not help, and it is worth being precise about why. The diff was 200 files of renamed types, updated call sites, schema migrations and contract edits [3]. Tests passed and the review skimmed it [4]. So the change cleared both verification gates and was caught only by a production billing run two weeks later [14]. A 200-file rename is the best hiding place a domain change will ever get; the size buried the change, not any intent to conceal it.
For path-scoped agents to transfer to your repo, two things have to be true. The context boundary has to exist in the build graph, not only in the org chart, because a shared `Customer` package puts the agent inside both contexts whatever directory you pointed it at. And the seam needs a translation, in the pattern's terms a `BillingCustomer` reduced to a `CustomerReference` carrying only the fields Support actually needs [9]. Without that second piece, a context-scoped agent simply cannot finish the work, and you will widen the scope back out within a week. The bounded context itself is not new tooling; it has been in the literature for two decades as the answer to the same-word-different-meaning bug for human developers [7], and the definition is exactly a scope in which a term has one meaning [8].
Weigh the evidence honestly. This is one practitioner account, published on dev.to and originally at tddbuddy.com, and it names neither the harness nor the organisation [13]. It does not tell us whether the PR was reverted or the merged type was split back apart. What it does supply is a failure whose mechanism is checkable against your own setup in about ten minutes: look at what your agent can write, not what you told it.
In my context the trade worth making is read-wide, write-narrow, with a contract test standing at each seam, since the related work in the same series argues the contract test is the one witness the agent cannot author [12]. The bill is one translation type per boundary plus a human handoff when work genuinely crosses.
Ranked by verification strength, evidence, and original report placement.
A dev.to post, originally published at tddbuddy.com, describes an agent given the whole repo that consolidated three domains into one and called it cleanup.
The agent was working on a feature in Billing and noticed that Customer was defined three times, in Billing, in Support, and in Identity, with overlapping fields and slightly different shapes; the obvious cleanup was to unify them.
The unification landed in a two-hundred-file PR that renamed types, updated call sites, migrated database schemas, and adjusted API contracts.
Tests passed and code review skimmed the diff; the domain distinctions the three contexts had held for years were gone.
The Domain-Driven Design bounded context has been in the literature for two decades as the answer to this problem for humans, and the pattern survived because it named a failure mode that never went away: the same word used in different parts of a system to mean subtly different things.
A bounded context is a scope within which a set of terms has consistent meaning: inside Billing, Customer means a party with a payment method and a subscription status; inside Support, Customer means a party with an issue history and a satisfaction score.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 27, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One telling, nothing checkable behind it
Two very different kinds of claim are braided together here. The bounded-context material — scopes of consistent meaning, translation at the seam, the two-decade lineage — is established practice anyone can verify against the DDD literature. The story that gives the piece its force cannot be verified at all: no agent, harness, company or repository is named, the pull request is not linked, and the mischarge event has no count, no duration and no remediation. dev.to also is not the first publisher; the post came from the author's own site.
No usage signal exists to measure
Nothing in this reporting touches uptake. There is no release, no tool, no deployment, no benchmark and no disclosure of how many teams scope agent write access this way — only an argument that they should. Estimating adoption from a single anonymous anecdote would be inventing the number.
The headline outruns the anecdote
'Given free rein, the agent's incentive is uniformity' is presented as the whole diagnosis, and the general claim about optimizers trained on consistency is asserted rather than shown — one unattributed session is doing the work of a pattern. The overshoot is moderate, not severe, because the structural argument stands on its own: merging Billing's Customer with Support's really does hand both teams joint ownership of every field, whether or not the nightly-job story happened as told.
Author's own arc, no vendor money in view
The piece arrives pre-wired into its author's series — a related-reading block links the coordinated-rename post, the contract-test post and a 'Vocabulary Is the Product' arc, and dev.to is the second stop after tddbuddy.com. That is an attention and authority interest: the story is shaped to make one scoping primitive the answer, and each instalment sells the next. What is absent matters too — no product, no sponsor, no tool to buy, nothing being benchmarked favourably.
Certain what was written, unsure what happened
We can be near-certain about the text: the argument, the type sketches, the provenance line and the series links are all on the page and consistent. The confidence drops on the event itself, which no second account touches and whose ending — reverted or not, how many customers, what it cost — the author simply does not tell. That asymmetry sets the ceiling.