Skip to content

site: rename the blast-wall position — "Never Let Your Agent Touch the Database"#98

Merged
datumwise merged 2 commits into
mainfrom
site/rename-agent-position
Jul 26, 2026
Merged

site: rename the blast-wall position — "Never Let Your Agent Touch the Database"#98
datumwise merged 2 commits into
mainfrom
site/rename-agent-position

Conversation

@datumwise

Copy link
Copy Markdown
Owner

Huayin's terminology-collision ruling. The homepage says "data model" three times and "the model" three times eleven lines apart, so a stranger could coherently read the entrance as a rule about Columna's own Manifold — inverting the pitch at the exact block designed to convert.

The grep list — every surface the string travels to

# surface what changed
1 corpus/position_never_let_the_model_v1_1.md:1 the piece's H1
2 positions/never-let-your-agent-touch-the-database.astro:26 <BaseLayout title> metadata
3 positions/index.astro:16 the index entry
4 index.astro:50 the entrance block link title
5 index.astro:23 the ordered-path rung
6 learn.astro:39 the Positions group
7 data/latest.ts:44 the Latest rail
8 llms-full.txt.ts:60 the anchor comment (the H1 itself flows through by import — verified in built output, not assumed)
9 PrecisionRecallFigure.astro:2 the header comment — which my first grep MISSED

On #9: the title is line-wrapped in that comment ("Never Let the Model Touch / the Database"), so a fixed-string grep for the full title could not see it. Found on the follow-up sweep for the partial string. Worth recording: a grep for a multi-word string silently misses every wrapped occurrence — the same referent-probe failure mode, in a new disguise.

Slug + redirect

/positions/never-let-your-agent-touch-the-database, with a path redirect in astro.config.mjs. This is precisely the case Astro's redirects: handles — unlike #exhibit-b, where the fragment never reaches the server and only a client-side shim could work. Verified: the old path emits a static stub with http-equiv="refresh" to the new URL. (Live verification follows the deploy.)

The disambiguation sweep — the exposure wasn't where it looked

The body's first the model (line 13) already sits in a sentence opening "an LLM with database credentials" — so that use was never ambiguous. The real exposure was the opening two lines, which named no actor at all: a reader landing there had nothing to anchor on.

The opening now reads: "…for three different reasons — the one where an AI agent holds your database credentials and writes its own queries." Title stays clean; the first sentence does the disambiguating work, exactly as ruled.

Entrance one-liner, re-ratified

"Why your agent should never hold database credentials — and what to put between them. Three minutes."

🟡 One thing the screenshot exposed — flagging, not changing

The /positions index pull quote is still the piece's own thesis sentence, quoted verbatim: "The model never touches the database…" It's ratified copy and it's inside the piece, so I left it — but on the index it now sits directly under the new title, and that adjacency reproduces the collision in miniature: "Your Agent" in the heading, "The model" in the line beneath.

Options: (a) leave it (the body legitimately says "the model" once context is set); (b) re-quote from the piece's later, unambiguous thesis line; (c) ratify a one-word change in the body. Your call — I won't edit a verbatim pull quote unasked.

Gates

Build green (29 pages) · prose-coherence green · new title on all five HTML surfaces + llms-full · old title absent from dist except the redirect stub · ordered ladder unchanged, argument still at rung 4 · screenshots of the entrance and the positions index.

🤖 Generated with Claude Code

claude added 2 commits July 26, 2026 12:22
…e Database"

Huayin's terminology-collision ruling. The homepage says "data model" three times and "the model"
three times, eleven lines apart, so a stranger could coherently read the entrance as a rule about
Columna's OWN Manifold — inverting the pitch at the exact block designed to convert. Zero external
links point at the piece, so the rename is free.

RENAMED ACROSS EVERY SURFACE THE STRING TRAVELS TO (grep list in the PR):
  · the piece's H1 (corpus) and its <BaseLayout title> metadata
  · the /positions index entry
  · the homepage entrance block (link title) AND the ordered-path rung
  · /learn's Positions group
  · the Latest rail (data/latest.ts)
  · llms-full — the H1 flows through by import (verified in built output, not assumed)
  · PrecisionRecallFigure's header comment — WHICH MY FIRST GREP MISSED, because the title is
    line-wrapped there. Found on the follow-up sweep; a line break defeats a fixed-string grep.

SLUG: /positions/never-let-your-agent-touch-the-database, with a PATH redirect in astro.config.mjs.
A path is exactly the case Astro's `redirects:` handles — unlike #exhibit-b, where the fragment never
reaches the server and only a client-side shim could work. Verified: the old path emits a static stub
with http-equiv refresh to the new URL.

ENTRANCE ONE-LINER re-ratified: "Why your agent should never hold database credentials — and what to
put between them. Three minutes."

DISAMBIGUATION SWEEP. The body's first "the model" (line 13) already sits in a sentence opening "an
LLM with database credentials", so that use was never ambiguous. The real exposure was the OPENING
two lines, which named no actor at all — a reader landing there had nothing to anchor on. The opening
now reads "...for three different reasons — the one where an AI agent holds your database credentials
and writes its own queries." The title stays clean; the first sentence does the disambiguating work.

Verified: build green (29 pages); prose-coherence green; the new title on all five HTML surfaces plus
llms-full; the old title absent from dist except the redirect stub (which carries no title); the
ordered ladder unchanged with the argument still at rung 4.

Co-Authored-By: Claude <noreply@anthropic.com>
Huayin's pull-quote ruling: change the BODY, not the display. The thesis line is the piece's quotable
claim — it gets excerpted into the index, the channels, and other people's screenshots — and a
quotable line must survive separation from its context. Fixing only the display surface would have
left the collision live in every future quotation.

  was: "The model never touches the database. Not directly, not through generated SQL, ..."
  now: "Your agent never touches the database. Not directly, not through generated SQL, ..."

The /positions index pull follows the body and remains a VERBATIM quote of it. Verified on all three
surfaces (the piece, the index, llms-full); the old wording is absent from dist entirely.

NO SWEEP, as ruled. The body's six other uses of "the model" stay: they sit inside established
context and several are precise as written — line 85's "the model holds no database credentials" is
exactly right, because it is the model specifically, not the agent process, that holds no credentials.

BUILD-DOC LINE — the wrapped-grep proverb, promoted to #4 (the sentinel proverb becomes #5):
"A fixed-string grep cannot see a LINE-WRAPPED occurrence. Sweep for a distinctive SHORT partial,
never the full phrase, whenever the target is prose that may wrap."
It earned the entry by biting TWICE in one turn: the full-title grep missed PrecisionRecallFigure's
comment (title wrapped mid-phrase), and then a grep for "the model holds no database credentials"
missed line 85, where the line breaks after "no" — and even the shortened "holds no database" still
spanned the wrap. Same failure family as name/path/package/tree-state, in a fifth disguise: the probe
did not match the referent's actual shape.

Also recorded: the disambiguation placement correction — line 13 was already anchored by "an LLM with
database credentials", so the real gap was the opening two lines naming no actor at all. Checking the
text rather than applying the instruction literally is what found it.

Build green (29 pages); brace-balance verified on the stylesheet.

Co-Authored-By: Claude <noreply@anthropic.com>
@datumwise
datumwise merged commit 2792f78 into main Jul 26, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants