Content is Code

How this is governed

Mark Ulett · BeargrassAI · Revised 2026-09-11 after the harness rebuild.

Git-native blocks, baked hatches, two hostnames — and what this system refuses to claim.

This page describes how ARC works now, after the September 2026 rebuild. The earlier version of this essay described PassWeb, a D1 store, capability URLs, and an operator that laid hatches at runtime. That stack is gone. If you read an old link or an old memory card that mentions /h/, POST prove, or laying a sheet, it is stale.

1. The shape today

Source of truth is git. Block bodies live in seed/blocks/<ref>. Each agent's ordered list is seed/agents.json. npm run build runs scripts/build.mjs, which emits:

npm run deploy uploads the app/ tree through Cloudflare Workers static assets. The Worker router is thin: map URL to file, set Content-Signal, return. No database, no lay, no operator API.

Two hostnames

Do not put a login wall on the public site. Do not expect write routes on either hostname.

Block kinds

Each block has a kind prefix in its ref: doctrine/, pack/ (training), station/, project/, canon/, law/, facts/, kit/, orders/, memory/, skill/, pad/ (persona and rank remain only for the companion, Karl). Shared refs (doctrine, canon, packs) appear on many agents. Persona and memory stay per seat.

How a change ships

  1. Edit the block in git.
  2. npm run build
  3. npm run deploy (or Mark's deploy gate)

Agents do not write the harness. A draft an agent wants ratified is a git change Mark commits.

2. Six kinds of binding

Alignment inside one operator's system is still six mechanisms. The gates changed when the runtime store went away.

BindingQuestionGate today
DeliveryDid the authored bytes arrive?Honest receipt (2.7); desk loads one baked /hatch/<agent>.md
ProvenanceWhere did this claim come from?Point at a file, or label a training default
AuthorityWho may change what counts as true?Git + Mark's commit; no agent write door
ScopeWhat may this agent touch?Law, kit paths; tool permissions on the surface
AdversarialWho says it is done?Validator / cross-check / Mark
StructuralWhat cannot be expressed?Size law, graders on the archived jig core (reference only)

Delivery no longer uses PassWeb fragment words or fetch timestamps. The desk loads one file; Cursor loads from git. The failure mode is unchanged — an agent that did not load a block will still sound fluent — so the receipt in Article 4 still matters: say what you loaded, say what is missing.

Authority is simpler and stricter: if it is not in git after build and deploy, it is not in the launch payload. There is no paste-on-operator path.

Scope is still the thinnest binding. Rank and law are text. Real filesystem reach is granted by the tool surface (Cursor, Claude Code, desk with no tools by design).

3. What retired (2026-09-10)

The archived stack lives under _archive/ in the repo for archaeology. Do not treat it as live procedure.

4. What this system refuses to claim

The epistemology essay in the previous version of this page — prism, cross-substrate review, size law — still describes how I think about the work. The mechanisms in that essay referred to the old store. Read those sections as philosophy, not as curl targets.

5. Check this page

Anyone can verify the public site:

curl -s  https://contentiscode.com/robots.txt
curl -s  https://contentiscode.com/doctrine.txt | head -20
curl -s  https://contentiscode.com/skills/cross-check | head -5
curl -so /dev/null -w '%{http_code}\n' https://app.contentiscode.com/   # 401 without desk gate cookie
curl -so /dev/null -w '%{http_code}\n' https://contentiscode.com/h/zero/prove   # 404 — gone
curl -so /dev/null -w '%{http_code}\n' https://contentiscode.com/api/avatar/zero  # 404 — gone

After clone and build:

npm run build
wc -l app/hatch/cic.md seed/blocks/doctrine/arc
npm run count   # size law on script roots

The doctrine and skills on this host are the same bytes agents load. Nothing is held back as proprietary governance — the practice and accumulated corrections are what do not fit in a file.