---
title: "Three Copies of the Firewall Page and Version 18, 27, 31"
canonical: https://dxdev.com/blog/agents-write-humans-verify/
datePublished: 2026-10-04
---
The first two edits to the search query bounced off a hook at 3:55 PM. The agent had swapped the `LIKE` escape character from a backslash to `!`:

```sql
(p.slug LIKE @q ESCAPE '!' OR p.title LIKE @q ESCAPE '!' OR p.bodyMarkdown LIKE @q ESCAPE '!')
```

The pre-edit hook refused both with the same message. The ticket was still in `preparing`, and the first write to a repo has to follow three things: a transition to CODING, an intent comment, and a filled-in Step/Action/Details field. The ticket had been in `preparing` since 3:17 PM. The agent posted its intent comment at 3:54:58, three seconds before the edits. That wasn't enough, because the transition hadn't happened.

We're keeping the hook as it is. It's a small version of the rule the whole change is about.

## What the change was

The ticket said it plainly: repo-synced pages were locked, wiki-imported pages were still treated as copies, so the knowledge base couldn't be the official source. The work was to flip the lock flag and the source marker on imported pages, so edits are accepted and revisions are kept. The done-condition was one staff member editing a formerly imported page and a revision landing in the history.

Alongside that, three more things:

- an adopt path for repo pages
- a review scope that lets agents act
- body search, which is the query above. It matches slug, title and `bodyMarkdown`, and ranks a slug or title hit at 0 so it beats a body-only hit.

Staff and agents can now both edit. Agents can start a review. Only staff can mark a page verified.

## Three sources, no owner

Before this, CDN firewall facts lived in three places, and nothing said which one owned what. On 2026-08-31 the three described the same ruleset three ways:

- the repo doc said 8 rules at version 18
- the private index said 11 at version 27
- the live API said 13 at version 31

The repo doc also still taught that the known-good-automation skip was phase-only, which had stopped being true ten weeks earlier. That stale sentence is the misunderstanding behind a payment webhook going down. Three copies can't all be current, and nothing marked which one you were reading.

Letting agents edit makes this worse unless something stops it. An agent can rewrite a page in minutes, and nobody can re-read pages at that speed. If an agent's edit and a human's sign-off look the same, the page's status stops meaning anything.

## The first page through the loop

The pilot was one firewall page, and the brief spelled out the steps. The agent collects live state with a scoped token, then builds a fact table where each claim from the sources is marked `matches live`, `conflicts with live` or `cannot verify`. It then merges everything into one page, published as a `manual` page under a new slug so no synced page gets overwritten. The frontmatter carries `Audience: engineering`, a `System` property, and source and verified dates.

The brief also said where to stop: leave it at `unreviewed` or `in_review`, and the sign-off to `verified` stays with a person.

It named two conflicts up front. The AI-crawler section in the repo doc was stale, since training crawlers are now allowed. The old wiki DNS page named the wrong DNS provider. Checking rows against the live zone is work an agent can do. Whether the merged page is right still takes a person who knows what the rules are for. The agent can say "every row in this table was checked against the live zone", and that is useful evidence. It still isn't the same claim as "a human who owns this agrees."

## The rung that stays human

So the ladder has three rungs we can point at, `unreviewed`, `in_review` and `verified`, and agents can climb the first two. The third needs a person.

An agent can start a review. It can't finish one, because finishing means putting your name on the claim.

The pre-edit hook enforces the same boundary in the tracker. An agent can write code, but it can't skip the ticket state that says the work has started. Both systems let agents move fast and keep a human at the one step that has to mean something.
