agents agents/SITES.md
Written 2026-08-16. Seven lanes, G–N. Companion to agents/README.md (lanes A–F, which own code and root docs). Nothing here touches an A–F file.

Site lanes — updating the domain index.htmls in parallel

Written 2026-08-16. Seven lanes, G–N. Companion to agents/README.md (lanes A–F, which own code and root docs). Nothing here touches an A–F file.

Source of the work: PORTFOLIO_AUDIT_REVIEW.md — the checked review of the external 25-domain audit. Every item below traces to a row in its §1 table or its §5. Items the review marked WRONG are in §0.3 as a do-not-touch list; that list is as important as the work.

Start a session by pointing it at its section here. Each section is written to be self-sufficient.

0. Read this part even if you only run one lane

0.1 There are TWO trees, and half the domains are in the other one

This is the single most expensive fact in this document.

TreeHoldsNotes
/home/travis/ProjectAmp2/agentelic · agentromatic · bendscript · computedriven · delegatic · deliberatic · fleetprompt · geofleetic · graphonomous · opensentience · runefort · specprompt · ticktickclock · toolboxhvac · WebHost.Systems · TRAAVIIS · c-u-l8er · academy · WRL · AmpersandBoxDesign/siteeach is its own git repo
/home/travis/Projects/a2atraffic.com · brokenrecord.studio · wrand.cc · istrav · GPSCoordseparate tree, separate repos

Four names exist in BOTH trees and only one copy is live. ticktickclock, geofleetic, TRAAVIIS, c-u-l8er. The ~/Projects/ copies are stale forks last touched Dec 2025 – Feb 2026. Editing one is a silent no-op that looks like work.

The rule that settles it, and it is a check rather than a convention: ``bash wc -c < <local>/index.html && curl -s -L https://<domain>/ | wc -c ` **The live source matches byte-for-byte** *(usually — see the exception below)*. Verified 2026-08-16 on all nine ambiguous cases — ticktickclock 70829, geofleetic 58641, traaviis 79676, a2atraffic 77879, wrand.cc 72642, istrav 34370, gpscoord 61074` all matched their live domain exactly. Run it before your first edit. Every time.

AMENDED 2026-08-16, twice, by two lanes. "Byte-for-byte" is false behind Cloudflare whenever a page carries a `mailto:`. Lane G measured agentelic.com at 40912 local vs 41062 served; lane L measured delegatic and agentromatic at exactly +159 bytes each. In all three the delta is entirely Cloudflare's edge rewriting the mailto: for email obfuscation, plus an injected email-decode.min.js. Local was the correct source in every case. So: compare counts to find a delta, then DIFF the delta to explain it. A count alone would have told three lanes their file was not the live source. A delta with a known cause is a match; an unexplained delta, or a large one, means you are in the wrong tree.

CHECK WHETHER THE PAGE IS GENERATED BEFORE YOU EDIT IT. Lane G found that opensentience.org/index.html is built from `_rebuild/` — its own CLAUDE.md says so, and editing the served HTML directly, which is the obvious move, would have been silently reverted on the next build. Look for a build step, a repo-level CLAUDE.md, or a source directory before your first edit. This cost nothing because it was caught; it would have cost a whole lane's work if it had not been.

`alkeyword.com/` is in ProjectAmp2 and is NOT a git repo and does NOT deploy from here. A separate c-u-l8er/alkeyword.com repo feeds Pages. No lane owns it. Do not edit it.

0.2 The one real collision: ampersand-nav

Every site loads its nav from one source — ampersand-nav/src/amp-nav.js — which sync-nav.sh fans out to 26 targets across ~21 sub-repos. That script writes into every site repo you are editing.

  • Only lane N touches `ampersand-nav/`.

  • Nobody runs `sync-nav.sh` while another site lane is live. Lane N runs alone, last.

  • If your lane needs a nav change, write it down and stop. Do not reach across.

Ownership conflict, found and resolved 2026-08-16. agents/E-site.md claimed ampersand-nav/ for lane E; this document claims it for lane N. Both were live for one day, which means an agent following E's brief was authorised to edit a file this brief says only N may touch — the precise failure the ownership contract exists to prevent. Caught by GPT on review. Resolved: E owns `computedriven.com/` only; N owns `ampersand-nav/` exclusively. E-site.md now carries that change at the top, and its §3 is retained as the specification of the nav work, which is now N's to execute. If you are lane E, re-read your brief.

Beyond that, the lanes do not share a single file, because each site is its own repo. That is why this set can run wider than the three-or-four ceiling in agents/README.md — that ceiling was set by source lanes contending on shared modules, and it does not bind here.

0.3 DO NOT TOUCH — the audit was wrong about these, and acting on it is destructive

TargetWhy
`~/Projects/brokenrecord.studio/`The audit says it serves obsolete HVAC-Buddy and should be 301'd to ToolboxHVAC. It is U.A.P., a live antiques storefront with an eBay store and priced inventory. Zero "HVAC" in the served HTML. Redirecting it destroys a working business. No lane owns it. Leave it entirely.
`agentromatic.com`'s retraction paragraph"A launch date and an email box used to stand here. The date was Q2 2026 and it passed… Both are gone rather than quietly refreshed to a later quarter." That is the best public example of doctrine rule 5 in the portfolio. Lane L may only ADD to this page. Do not edit or remove that paragraph.
`computedriven.com`'s join sectionThe audit's Priority 0 is "add a signup." The join surface already exists; the absent mailing list is an argued position stated in the page's own source comment. Do not add a mailing list. No lane owns this repo — it is lane E's.
The four `~/Projects/` stale twins§0.1.

0.4 House rules, from DOCTRINE.md

A check outranks an opinion · do not fabricate counts or statuses (? is a fine answer) · name the gap in the same breath as the claim · measure and say how · retract out loud in the same place · some decisions are Travis's — flag and stop · commit so work survives.

Every report ends with a DOCTRINE: line — advanced / contradicted / proposed / none. `none` is common and correct.

One rule added by this project, 2026-08-16, and it generalises past the sites:

The artifact chooses the claim. The claim never reaches back and selects an artifact.

Read or run the witness first, then say what it establishes — which may be less than you hoped. This was earned: a mailbox artifact was claimed for two governance dimensions because the word "reply" sounded like both, and reading the code showed it was two artifacts proving one thing each, which was the stronger result. Re-derive any number you are about to publish; never copy one out of a planning document, including this one.

0.5 Traps every site in this portfolio has already paid for

Inherited from agents/E-site.md; they apply to all of these repos.

  • Verify by serving the domain and reading it, never by grepping the local tree. That error mode

is recorded in workbench/docs/ROADMAP.md and has already produced one wrong claim here.

  • `IntersectionObserver` never fires in the Claude browser pane — it does not composite frames.

Scroll-triggered animation with IO as its only trigger renders as empty troughs. Add a setTimeout fallback and a done guard.

  • No horizontal overflow at 390 / 700 / 790 / 800 / 815 / 1000 / 1280 / 1600 px. A nav that hid

links at 780 but overflowed at 790 once scrolled the whole document sideways.

  • Never put an email address on any page. Contact goes through Formspree. No mailto:, not even

as a fallback. Travis's call, 2026-08-11.

  • Hand-maintained counts move only in a commit that also moves the date. Nothing fetches at

runtime.

  • Preserve the no-build-step property where a site has it. It is evidence for the thesis.

  • Browser work uses `agent-browser` (CLAUDE.md), not the Chrome MCPs. preview_start refuses

past 5 dev servers per folder and other chats hold them.

  • `agent-browser` SHARES ONE SESSION ACROSS CONCURRENT LANES — use `--session <lane>`.

This has now bitten four lanes and the mitigation was upgraded twice. Lane P screenshotted what it believed was its own page and got another lane's site. Lane L and the wrand lane were each served a foreign page mid-run. AGENT_BROWSER_SESSION_NAME does not isolate it.

Asserting `location.href` is necessary and NOT sufficient. The globe lane asserted pathname, ran a full width sweep against another lane's server on a different port, and got a clean pass — because both sites serve /, and because open and eval landed in different tabs. Worse, it may have navigated and resized the other lane's tab while that lane was measuring.

So: pass `--session <lane-name>` on every `agent-browser` invocation, assert the full `href` (never just the path) inside the same call as the measurement, and discard anything you cannot tie to an asserted URL. Prefer curl against your own local server for anything curl can settle, and prefer git/sha256sum over the browser for proving a byte-identical region.

A contaminated reading looks exactly like a passing one. That is the whole danger: it does not error, it agrees with you.

  • A CANVAS ANIMATION ALWAYS LOOKS BROKEN IN THE CLAUDE BROWSER PANE, AND IT IS NOT. Measured

2026-08-17 on graphonomous.com: canvas 735×975, 0 lit pixels at load and still 0 after four seconds — while document.visibilityState === "hidden", document.hidden === true, and requestAnimationFrame fired 0 frames in 1500 ms. The pane does not composite, so it reports hidden forever.

The animation was behaving exactly as §8 requires. prefers-reduced-motion, off-screen pausing and document.hidden stopping are all mandatory — and the last of those makes any rAF-driven animation unverifiable in this pane by construction. The rule we enforce is what blanks it.

So: verify animations in `agent-browser`, never in the preview pane, and if you must look here, measure document.hidden and rafFramesIn(ms) before concluding anything about lit pixels. Same root cause as the recorded IntersectionObserver trap.

Practical consequence, and it favours the shell's existing advice (§8.4: CSS or inline SVG beats canvas where it can do the job): an inline-SVG or CSS animation still renders here, because it does not depend on rAF. opensentience.org's κ graph was visible in this pane; graphonomous's canvas was not. That is a real reviewability difference, not a stylistic one.

  • `grep` IN THIS SHELL IS A `ugrep` WRAPPER AND WILL LIE TO YOU ABOUT A FILE IT THINKS IS BINARY.

It runs with --ignore-files, and the navback lane watched it return no match for a string present twice in a gate file, because a stray NUL byte had made it binary. That lane nearly concluded a sibling's check had been deleted. Use `command grep` when a negative result would change a conclusion. (Root cause worth knowing separately: an Edit had written a raw NUL into a .join("\0"); write "" instead.)

  • A link that returns 200 can still be dead. Lane K1 found three CTAs pointing at

app.webhost.systems, which serves a real React build (HTTP 200) whose compiled-in Supabase project returns NXDOMAIN — a live page with no backend to reach. Resolve the target's dependencies, not just the target. Same family as the dead form: a control that looks wired and is not.

0.6 Commit rule

Commit inside the sub-repo. Never bump a parent gitlink. ProjectAmp2 tracks none of its sub-repos.

0.7 The rung gates the call to action — this is a global rule, not a lane L note

A page may only ask a visitor to do what its rung has earned. This is mechanical. Check your rung, then read your row.

RungThe only CTAs available
specread · challenge · implement. Never "run it" — there is nothing to run
in_treeinspect the source · run the tests
live_localreproduce it locally
live_deployeduse the deployed artifact
externalsee independent evidence · contribute another result

This rule, applied earlier, would have caught the error in a proposed FleetPrompt CTA — "become publisher #2" — pointed at a registry whose publish CLI and gate are both not built and which says of itself "nowhere in it to put a film." A page that cannot honour its own CTA is a worse defect than a page with no CTA, because the visitor discovers it after spending effort.

If your rung and your best CTA disagree, the rung wins. Report the gap; do not soften the rung.

0.8 Every surface owns one falsifiable question

Add this field. Not a tagline, not a category — a question that could come back "no." It is the page's <h1>-level job and the thing a stranger can hold without knowing what ComputeDriven is.

SurfaceThe question
ComputeDrivenCan another machine independently reproduce this system?
TRAAVIISCan evidence survive capture, transport and replay?
WRLCan representation change without changing the represented world?
TRVMDoes the result stay invariant under reduction order?
Ampersand BoxCan composition laws stay executable rather than rhetorical?
DelegaticWas this delegation actually permitted?
DeliberaticCan disagreement be preserved and governed rather than averaged away?
AgenTroMaticHow should agents allocate contested work?
A2A TrafficWhat can an interoperability protocol transport but not govern?
AlkeywordWhat can machines actually discover and cite about a site?
WebHost.SystemsCan this machine run somewhere that is not ours?
ToolboxHVACCan a diagnostic answer prove where it came from?

Why this is the acquisition mechanism and not just good copy. Google's AI Mode uses query fan-out: one typed query is decomposed into many synthetic sub-queries, and pages are retrieved against the sub-queries rather than the seed. A page that is one narrow answerable question is shaped like a fan-out target; a page that is a product pitch is not. This is the missing top of the funnel — a falsifiable question is a thing someone else is already asking, and a tagline is not.

Do not invent a question your page cannot support. If the honest question is "is this even built?", the answer is a spec card, and §0.7 tells you what it may ask for.

0.9 The report footer — every lane, every time

Bespoke "done means" sections stay. This goes underneath all of them, verbatim.

SOURCE:
  repo:
  starting_commit:        # the exact world you inspected
  live_source_check:      # local bytes vs curl bytes, per §0.1
  checked_at:
CHANGED:
  files:
  commit:
VERIFIED:
  commands:
  served_url:             # the domain, served — not the local file
  browser_widths:
  result:
GAPS:
  ?
TRAVIS:
  ?
DOCTRINE:
  advanced | contradicted | proposed | none

`starting_commit` is the load-bearing field. It answers "which exact world did this agent inspect when it reached this conclusion?" — provenance applied to our own process, which is the thing this whole portfolio sells. A lane that read another lane's files records that lane's HEAD too, and re-verifies if it moved before publishing.

Mutable facts must be measured at start, not inherited from this document. Everything in the table below was true on 2026-08-16 and may not be true when you read it. Re-derive; do not copy.

Claim in this docThe check that establishes it
the ten target repos were cleangit -C <repo> status --porcelain
local file is the live sourcewc -c vs `curl -s -L … \wc -c` (§0.1)
law counts 103 / 118node test/laws.mjs && node test/compose-laws.mjs — the suites derive their own totals
the external rung is emptySTACK_COMPLETION.md, and whether a boot report exists
RRABBIT HEAD is a4ea112git -C RRABBIT log -1

0.10 Waves — run these together, not all at once

WaveLanesConcurrencyGate
1G · J · L · K1 · P1four at a time; five briefs, no shared filesnone — every item is a verified factual repair or an additive page
2H · Mboth togetherH is blocked until the mailbox work is committed — see below
3Nalonemust be last — sync-nav.sh writes into every repo the other lanes touched

H moved out of wave 1, and this is a real blocker rather than a scheduling preference. RRABBIT is at HEAD a4ea112 (2026-08-15) with 20 files dirty — today's mailbox work is uncommitted. So the code lane H must cite does not exist at any commit, and H cannot fill in starting_commit. H starts when lane A commits the mailbox. Until then H would be building a public page on top of a working tree that can change under it — the failure is not a lost edit, it is a published claim about code nobody can retrieve.

If lane A is live in RRABBIT/, that is also the only lane H contends with. Practical wave 1 if A is running: A + G + J + L. If A's repo is free: E + G + J + L.

All ten site repos were clean (`dirty:0`) as of 2026-08-16. Re-check yours before you start: git -C <repo> status --porcelain.

The order the work is worth doing in, independent of the waves

  1. Credibility repairs — G, K1, H1, J. One obviously false public claim damages trust in twenty

true ones, so these come first even though they are the least interesting.

  1. Orientation — N. Placement band, rungs, the eight missing subdomains, the machine-readable

inventory. This is what makes ~33 surfaces legible as one program.

  1. Evidence CTAs — §0.7 applied everywhere. The question each page answers is *"what can I

actually do here?"* and the answer must be honourable at the page's rung.

  1. Search expansion — last, and never generic. The searchable content this portfolio can write

that nobody else can is comparison + test + result + limitation: "what A2A cannot express about human escalation", "103 vs 118 laws: what each number counts", "how a crawler saw 0 edges when the page contained 25 domains", "does bhyve boot under nested EC2 virtualisation?" Those are search pages and evidence pages simultaneously.

Not every domain has to become commercially important. The criterion is not make all 25 succeed — it is every public surface justifies why it exists: an independent question, an artifact, an audience, historical provenance, or a routing purpose. Anything with none of those merges or redirects.

Lane G — the two retractions that are pure fact

Owns: agentelic.com/, opensentience.org/ Must not touch: anything else — including `AmpersandBoxDesign/`. Ready: ✅ now. No [TRAVIS] gate.

Read-only boundary, made explicit. G2 compares OpenSentience against Ampersand Box, and G's acceptance test mentions both domains. G edits `opensentience.org/` only. `AmpersandBoxDesign/` is read-only evidence for the comparison. If resolving the ambiguity turns out to require an edit on the Ampersand side, report it and stop — do not reach across. An acceptance test that names a second repo is not a licence to write to it.

This is the highest-confidence lane in the set. Both items were confirmed with curl on 2026-08-16; neither requires a judgement call.

G1 — agentelic.com asserts a model FleetPrompt has superseded

The footer currently reads, verbatim: *"Publish tested agents to the marketplace. Community-reviewed, trust-scored, ready for install."*

fleetprompt.com says of that same model: built · superseded, replaced by a replay-gated registry, and states its own gap plainly — *"Second publisher — anyone but us sealing a listing — none"*, with the publish CLI and the gate both marked not built.

Fix: the footer describes FleetPrompt as it is. Trust-scoring is superseded; the replay-gated registry is not built; there is no second publisher. Do not invent replacement copy that claims the new model works — that swaps one false claim for a newer one.

Also on that page, and flag rather than fix: it advertises $49/mo and $199/seat pricing and carries a © 2026 [&] Ampersand Box Design line while the parent brand is ComputeDriven. Whether Agentelic sells anything is [TRAVIS]. Report both; change neither.

G2 — opensentience.org law counts are a scope collision, not a stale number

Served today: opensentience.org says "103 laws" (×3) and "All 103 laws". ampersandboxdesign.com says "118 laws" / "118 property-tested laws".

Both are true of different things. 103 is the kernel count; 118 = 103 kernel + 15 compose/CC2. The external audit called this staleness and prescribed "refresh the number" — that diagnosis is wrong and following it would make one of the two pages incorrect.

Fix: label each count with its scope on the page — 103 kernel laws / 118 enforced total (103 kernel + 15 compose/CC2), plus 3 declared-open.

Do not copy `103` and `118` out of this document. That is not verification — it would make `SITES.md` a new hand-maintained source of exactly the drift this item exists to fix. The required sequence, in one commit: 1. run the suites — node test/laws.mjs && node test/compose-laws.mjs (2000 trials each); they derive their printed totals 2. record the actual output in your report 3. change the scoped wording on the page to match what you ran 4. move the measured date in the same commit — the global rule in §0.5 is that hand-maintained counts move only alongside their date The suites print 3 gaps FALSIFIED in red by design and the build fails if one starts passing. That is expected output, not a failure to work around.

Do not attempt the "generate the counts at build time" fix. That is the facts-feed, it is cross-repo, and it belongs to a later lane. Name it in your report as the durable fix.

Done means: both changes live and verified by serving each domain; the law counts on opensentience.org and ampersandboxdesign.com no longer read as contradicting each other; a report naming the Agentelic pricing question as [TRAVIS].

Lane H — a2atraffic.com becomes the governance observatory

Owns: /home/travis/Projects/a2atraffic.com/ — the other tree. Must not touch: anything in ProjectAmp2. Ready: ❌ BLOCKED — wave 2.

Zero file collision risk with every other lane, because it is not in this repo at all. The collision is semantic instead, and it is why this lane waits.

Blocker: H's lead artifact lives in RRABBIT/m2/mail/, which is uncommitted — RRABBIT is at a4ea112 (2026-08-15) with 20 dirty files. H cannot record a starting_commit for code that has no commit, and lane A can change the implementation underneath a page built on it. H1 (deleting the fabricated metrics) is unblocked and can be done any time. H2/H3 wait for A to commit. When it lands, H records RRABBIT_SOURCE: <sha> on the page or in its report. If RRABBIT HEAD moves before H publishes, re-verify the behaviour before shipping the claim.

H1 — delete the synthetic metrics first

The page serves Not a product. A vantage point. and a 99.97 figure. Both cannot stand. A fabricated uptime number on an observability domain is the most expensive number in the portfolio. Remove every metric the page cannot derive, before adding anything.

H2 — the observatory

The wedge, and it is external and citable: an arXiv preprint, Governance Gaps in Agent Interoperability Protocols: What MCP, A2A, and ACP Cannot Express (arxiv.org/abs/2606.31498), scores five protocols against six governance dimensions. Best coverage of any protocol is 2/12. Its Table III and its finding — "Voting, dissent preservation, and human escalation are absent across all five protocols" — are the page's spine.

Read it yourself at `arxiv.org/html/2606.31498v1` before writing a word. A summarising pass over the PDF produced a wrong taxonomy once already in this project and it is retracted at the top of PORTFOLIO_AUDIT_REVIEW.md. The dimensions are G1 membership · G2 deliberation · G3 voting · G4 dissent preservation · G5 human escalation · G6 audit/replay.

It is a preprint. Do not call it peer-reviewed.

For each dimension the page states: what A2A transports · what it cannot express · what a refusal against it looks like here. The demand is real and it is not ours — A2A passed 150+ organisations and enterprise production use at its one-year mark (Linux Foundation, April 2026). Cite it.

H3 — the first artifact, and the claim it is actually entitled to

My first draft said `reply() → signed: false` demonstrates "G5 and G1." That was one artifact claimed for two dimensions, and GPT was right to challenge it. I read RRABBIT/m2/mail/box.js to settle it rather than reason from the word "reply." It is two artifacts, and they are cleaner apart:

G5 human escalation — witnessed by the `ask` kind, not by `reply`. box.js opens: "the queue an agent uses to reach the human, and the human uses to reach back." Of its four kinds, ask is defined as "I cannot proceed without you — an answer IS wanted" and is the only kind that blocks an agent. A waiting projection separates ask/fault (things to do) from note/result (things to know), because "'you have 14 unread' and '14 things happened' are different demands on a human." That is human escalation as a typed primitive with a blocking semantics — the dimension the paper scores absent across all five protocols.

G1 membership/principal — witnessed by `reply()`. The human answers, and the system refuses to sign the answer: signed: false, because §16.2 forbids introducing a principal-shaped role without its own sanction.

The pair is the story, and it is sharper than either half: the escalation works; the answer coming back cannot be attributed. Publish it that way.

Standing instruction, and it generalises past this lane: run or read the witness before choosing the claim. If the artifact establishes only the inability to identify the replying principal, publish G1 alone. The artifact chooses the claim; the claim never reaches back and selects an artifact.

The constraint you must publish alongside it: the JS identity spine is Core 0.1.2, in which Mailbox is unwritable. Core 0.2.1 closed that gap; nobody ported 0.2.x to JS. So a mailbox is not in any road's sealed sem- id today, and RRABBIT/test/mail.mjs §0 pins that refusal deliberately. Do not publish anything implying the doorbell is sealed. Publish the refusal.

Read-only on `RRABBIT/` — lane A owns it. Read m2/mail/box.js and test/mail.mjs to get the behaviour right; change nothing there.

Done means: no underivable metric remains on the page; the six dimensions are named correctly against the source; signed: false is the lead artifact with its 0.1.2 constraint stated; verified by serving a2atraffic.com.

Lane J — wrand.cc renders for something other than a browser

Owns: /home/travis/Projects/wrand.cc/ — the other tree. Must not touch: anything in ProjectAmp2. Ready: ✅ now.

The diagnosis the audit got wrong, and why it matters

The audit says wrand.cc "reports 0 domains / 0 connections" and prescribes fixing the data. The data is fine. The served HTML is ~71 KB and contains all 25 domain nodes and the edge list inline, plus <meta name="description"> reading "25 domains mapped as a navigable network."

The 0 is <b id="totalEdges">0</b> — a pre-hydration placeholder. The graph is client-rendered, so crawlers, AI answer engines, and the auditor's own reader all saw an empty shell. This is a rendering and indexability fault, not a data fault, and it is the same failure class recorded in workbench/docs/ROADMAP.md.

The work

  1. A static fallback that carries the graph as real DOM — a plain list of domain → status →

parent → destination, present in the HTML before any JS runs. The interactive graph stays; it enhances the list rather than replacing it.

  1. `JSON-LD` describing the portfolio, so the inventory is machine-readable by something other

than a browser.

  1. Do not hand-type statuses. Where a status is not known, render ?. An invented status is

worse than a missing one because it stops the question being asked.

Known stale content, flag rather than guess: the graph describes alkeyword.com as "Observable type safety for Elixir"; the live site is "transmute a domain into AI-search visibility." Fix that one — it is checkable by serving the domain. Anything else you are unsure of gets ?.

Done means: curl https://wrand.cc/ | grep finds the domain inventory in the served HTML without executing JS; the alkeyword description matches its live site; nothing invented.

Lane L — the governance trio

Owns: deliberatic.com/, delegatic.com/, agentromatic.com/ Must not touch: anything else. Ready: ✅ now.

Read `PORTFOLIO_AUDIT_REVIEW.md` §5.0 first. It contains the finding this lane exists for, and it reverses both audits.

The finding

Checked against the served deliberatic.com: it already specifies, by name, the three governance dimensions no evaluated protocol covers at all.

DimensionField coverageAlready on the page
G3 votingabsent everywhereargues explicitly against majority voting; specifies graded semantics
G4 dissent preservationabsent everywhereattacks first-class in the formal tuple (R⁻); "3 vindicated dissents trigger constitutional review"
G5 human escalationabsent everywhere*"if all positions rejected, round escalates to human review via A2A push notification"*
G2 deliberationACP partialwBAF / Dung
G6 audit/replayMCP partialMerkle-chained evidence
G1 membershipA2A/ACP partialdelegatic OS-006, 42 tests

Both audits were about to demote `deliberatic` and `agentromatic` to spec cards. They own the gaps. That is the correction.

The work, per site

`deliberatic.com` — keep the spec rung and its "no implementation yet" banner; that honesty is the asset. Add the placement: which dimension each mechanism addresses, and what the field's protocols score. The only claim available is a claim about a specification: our spec addresses G2–G6; no deployed protocol does; neither fact is an implementation. Checkable by reading two documents. Nothing here may be published as a capability.

`delegatic.com` — the sharpened claim, which corrects my own first draft: **A2A does provide delegation. What it cannot express is the membership rule that says whether the delegation was permitted** — G1, scored partial at best. That is delegatic's subject. Build the page on G1's own four words — admission · invitation · removal · role assignment — and state, per word, what the kernel would refuse. Keep the honesty banner. Its "MCP on Fly" deployment is being wound down; describe it as where it runs today, not as a permanent address.

## RETRACTED 2026-08-16 — and this is the second time, from the same cause This paragraph told lane L to map OS-006 onto "the four architectures the 2026 standards work names — user-delegated, autonomous, hybrid-orchestrated, scoped-impersonation." Lane L could not tie that taxonomy to any primary source and refused to publish it. The page that looked authoritative does not contain it when fetched directly; the nearest real source names three, differently. It came from a web-search summary I did not open the source of. That is the identical failure as the arXiv taxonomy retracted at the top of PORTFOLIO_AUDIT_REVIEW.md — a summarising pass producing a plausible generalisation, twice, in the same subject area. The pattern is now named: > A summary of a source is not the source. If a claim will appear on a public page, open the > primary document and read the passage yourself. Search results and PDF summarisers are for > finding sources, never for quoting them. Lane L substituted the paper's own G1 wording, which is stronger and fully checkable. The artifact chose the claim.

`agentromatic.com` — ADD ONLY. It owns G3 (bidding / debate / election). Place it against the matrix. Do not touch the retraction paragraph (§0.3) — it is the template the rest of the portfolio is supposed to copy.

Standing constraint

deliberatic and agentromatic are spec with no implementation, and both pages say so. A `spec`-rung surface may not issue a "run it" call to action. That rule is what would have caught the "become publisher #2" error, where the CTA pointed at a registry with nowhere to put a film.

Done means: three pages verified by serving them; every claim is a claim about a specification; the arXiv work cited as a preprint; the agentromatic retraction paragraph byte-identical to before.

Lane K — webhost.systems takedown, then the BYO-cloud portal

Owns: WebHost.Systems/ Must not touch: anything else. Ready: ⚠️ half now, half [TRAVIS].

Read `PORTFOLIO_AUDIT_REVIEW.md` §5.5.

K1 — the takedown, which is not gated on anything

The live page sells "a multi-runtime AI agent deployment platform — deploy to Cloudflare Workers or AWS Bedrock AgentCore", with a control-plane box tagged `Convex`.

The monorepo depends on `@supabase/supabase-js` and has no Convex dependency anywhere. So the page names a stack we do not use, over a stack that was abandoned 2026-07-30. Every claim on it is unbacked.

Take the claims down. Do this first and independently of the product decision.

K2 — the repositioning, which is [TRAVIS]

The hole this fills is written in STACK_HUB.md: Firecracker is Linux-guest-only so T&R cannot run on Fly, and *"the cloud-VM half needs a provider that boots custom images — Hetzner, Vultr, DigitalOcean, OVH, or bare metal. [TRAVIS] which."* Cloudflare cannot close it either — Workers are isolates, not VMs. The ruled architecture has a compute tier with no home, and this domain's name already describes it.

What the planning docs do not know: AWS shipped **nested virtualization on virtual EC2 instances on 2026-02-16** (C8i / M8i / R8i, all commercial regions) — previously bare-metal only. STACK_HUB.md's provider list was written six months later and does not contain it.

RungWhat it isNeedsStatus
a machineT&R as an EC2 instance from an imported imagea provider that boots custom imagesuntested here, likely works
a fleetT&R running PARKVPS guestsnested virtsee below — the odds moved against the cheap path

Researched further 2026-08-16, and it changes the expected answer. AWS's own documentation for nested virtualization on virtual instances states that KVM and Hyper-V are the only supported L1 hypervisors, and the feature is limited to 8th-gen Intel families (C8i / M8i / R8i). The Nitro System does pass Intel VT-x through to the instance — so bhyve is unsupported rather than demonstrably impossible.

That leaves the experiment worth running and the plan of record unchanged: `.metal`. Frame it honestly — bare metal is the known-good path; C8i is an explicitly unsupported long shot that would cut the cost of a fleet tier if it happens to work. Do not write a page that implies the cheap path exists.

The decisive experiment is one afternoon: does `bhyve` come up inside a C8i instance with nested virtualization enabled? It gates a revenue tier, and it produces a genuinely searchable evidence page either way — "does bhyve boot under nested EC2 virtualisation?" currently has no good answer on the internet. It costs money to run, so it is [TRAVIS] to authorise.

Shape, if it proceeds: BYO-cloud. The customer's AWS account carries the machines and the bill. We ship the image, the control plane, the attestation. We do not run a fleet — the same structural argument as T&R Cloud, where the operator's inability to be the bottleneck is the feature. It is also the only version launchable without capital.

Page rung is `spec` on day one, with exactly one checkable thing on it: the image, its sha256, the instance classes it has booted on, and the ones it has not.

Do not publish a price Travis has not set.

Done means: K1 shipped and verified by serving the domain — no Convex, no unbacked AgentCore claim. K2 written as a proposal in the report, not on the page, until Travis rules.

Lane M — the Academy hostname duplication

Owns: academy/ — and its first task is to find out whether that is even the right place. Ready: ⚠️ scope unverified by design.

The observation: the Academy docs atlas is reported to answer on 13 byte-identical hostnames. Duplicate content across 13 hosts with no canonical is a live indexing fault and it makes any crawl-based portfolio count wrong.

This lane's first task is to locate the mechanism, and it may not be code at all.

  1. Establish the 13 hostnames and confirm they are byte-identical — curl … | sha256sum across

them. If the count is not 13, report the real number. Do not inherit mine.

  1. Find what serves them. If it is a Cloudflare route, a DNS wildcard, or a Pages custom-domain

list, stop. That is infrastructure and it is [TRAVIS] — lane C territory, not a site edit.

  1. If it is in-repo — a build that emits per-host copies, or a missing <link rel="canonical"> —

fix it there.

This lane is written to be allowed to conclude "not mine." That is a successful outcome, not a failure. agents/README.md exists because a previous document sent agents at eleven files that did not exist; do not extend the pattern by inventing a path.

Done means: the real hostname count, the real serving mechanism, and either a canonical shipped or a precise statement of what Travis has to decide.

Lane N — the nav placement band

Owns: ampersand-nav/src/ — plus a narrow, time-boxed exception defined below. Ready: ❌ RUN LAST, ALONE.

Why it is last: sync-nav.sh fans one source file out to 26 targets across ~21 sub-repos — it writes into every repo lanes G–M are editing. Running it concurrently overwrites live work.

The generated-file exception — who commits the 21 repos

sync-nav.sh writes into repos this lane does not own, and "leave no site repo dirty" cannot be satisfied by a lane with no authority to commit them. Closing that loophole explicitly:

Lane N owns `ampersand-nav/src/`, plus the vendored `amp-nav.js` outputs that `sync-nav.sh` produces in each target repo, for the duration of the final sync only. N may commit those generated files in each affected repo. N may modify no other file in any site repo.

The sync is allowlisted, and an unexpected write is a stop condition:

run sync-nav.sh
git -C <each target> status --porcelain
  → every changed path must be the vendored amp-nav.js (or its known companions)
  → if ANY other file changed: STOP. Do not commit. Report unexpected fan-out.

A fan-out that touches a file outside the allowlist means the script does more than this brief believes, and that is a finding worth more than the nav band.

Known second writer, reported by lane G 2026-08-16 — read this before you sync. `opensentience.org`'s own build touches the vendored `amp-nav.js`. Running node _rebuild/build/build.mjs refreshed _rebuild/dist/'s copy from 0.7.1 → 0.8.2 as a side effect. Lane G reverted it and kept its commit scoped, correctly — but it means `sync-nav.sh` is not the only thing that writes nav files, and an opensentience rebuild after your sync will re-touch one. Consequences for N: (1) the vendored copy in that repo may be stale or ahead of ampersand-nav/src/ for reasons unrelated to you; (2) after syncing, check whether any repo has a build that would overwrite what you just wrote; (3) this is evidence the allowlist stop condition is worth having — the first unexpected writer turned up within hours of the rule being written.

The deterministic sequence, start to finish:

  1. all other lanes commit

  2. verify all target repos clean — git -C <repo> status --porcelain

  3. N edits ampersand-nav/src/

  4. N runs sync-nav.sh

  5. inspect the diff against the allowlist — stop on any surprise

  6. N commits the generated nav in each affected repo, one commit per repo

  7. verify the band on served domains, not local files

  8. verify every repo clean again

The work — positioning plan §6

One file, ampersand-nav/src/amp-nav.js. Add to each LINKS entry: tier (1 Place / 2 Product / 3 Spec / 4 Outside), layer, rung, step. Render a placement band — tier 1 no band, tier 2 "the {layer} layer of ComputeDriven", tier 3 "a specification in the ComputeDriven world" plus a link to the real spec, tier 4 nav removed.

Edit `ampersand-nav/src/`, never a vendored copy.

The rung chip must render the stored rung, never a default. Missing renders ? — not spec, not blank.

Use the tree's status vocabulary, not the audit's. spec · in_tree · live_local · live_deployed · external. The external audit proposes SHIPPING / MEASURED / ALPHA / SPEC / NOT BUILT / SUPERSEDED; do not adopt it. The tree's vocabulary has the property the audit's lacks — `external` is a rung nobody can award themselves, and it is the row that bounds the whole portfolio.

Eight subdomains are missing from every inventory and this is where they get one: wrl.traaviis.com · trvm.traaviis.com · code.traaviis.com · academy. workbench. pulse. prism. weave.opensentience.org. The portfolio is ~33 surfaces, not 25.

Done means: the band renders on a served site, not a local file; the rung chip shows ? where a rung is unknown; no site repo left dirty by the sync.

Lane P — gpscoord.com: the claim audit now, the OSM product later

Owns: /home/travis/Projects/GPSCoord/ — the other tree. Must not touch: anything in ProjectAmp2. Ready: ✅ P1 now (wave 1). P2+ is [TRAVIS].

Why this domain is different from every other one in this document

It is the only surface in the portfolio that can answer large numbers of concrete existing search queries without the visitor understanding the thesis first. "What UTM zone is Seguin in", "what is the elevation at these coordinates", "convert 29.5688 -97.9644 to MGRS" are typed today, by people who will never read computedriven.com. Nothing else here has that property.

Two honest cautions, stated before the opportunity.

  1. It is the surface least able to produce an `external` rung. It generates traffic that does not

become evidence. That is fine — §"what no lane owns" says a surface may justify itself by audience alone — but do not let it be scored as portfolio progress. It is a traffic and revenue property.

  1. It is the largest new build in this plan, and it competes with the publish path. Rung 3

("drive it — publish a track") is the thing that bounds the whole portfolio and does not exist. GPSCoord is a good business and a genuine distraction from it. That trade is [TRAVIS], and it should be made on purpose rather than by drift.

P1 — the claim audit. Unblocked, and it is the worst claim density in the portfolio.

Verified served on 2026-08-16. The page says "Launching 2026" and "What we're building", and in the same document displays:

ClaimWhat it needs
12 Active Pathfindersdefine what one is, then count them. If it is a placeholder, delete it
200K+ Location Pagesdo they exist? curl three of them. If not built, it is a plan, not a stat
195 Countries · 6 Coord Formatscheap to verify; verify
<50ms API Responsebenchmarked how, on what, against which endpoint?
Free $0 / Pro $19 5K calls/day / Enterprise $79 50K calls/daya price list for a product that says it is launching. Label proposed, or remove
"enterprise-grade reliability"unfalsifiable. Cut it

This is the same class of defect as Agentelic's trust-scored footer and A2A Traffic's `99.97`, and it is worse because this is the page most likely to get real traffic. Claim hygiene matters more on a page strangers will actually land on, not less.

Apply §0.7: the rung is spec/in_tree, so the honest CTAs are read, challenge, implement — not "Get Early Access" over a price list.

P2 — the sharpened question. [TRAVIS] to adopt.

From "what are the coordinates?" — a solved commodity, served well by latlong.net and gps-coordinates.net — to:

"What does this coordinate mean?"

and as the §0.8 portfolio question: What can we actually know from a coordinate?

The product that falls out is a coordinate report: position in every grid system, administrative hierarchy, elevation, timezone, enclosing and nearest OSM objects with their IDs and tags, distances, and — the part that makes it ours — provenance on every line:

CLAIM        this coordinate lies inside Guadalupe County
DERIVED FROM OSM relation 123456
DATASET      OpenStreetMap snapshot YYYY-MM-DD
METHOD       point-in-polygon
RESULT       true

That is the ComputeDriven idea applied without ComputeDriven branding, and it is the one honest connection between this domain and the rest. Do not put an AI-systems pitch on this page.

The genuinely non-commodity content underneath it: surface the disagreements. GeoNames, OSM and government datasets often place a city at three different points, because a place has a centroid, a label point, an administrative seat and a polygon. Everyone else silently picks one. "Three sources disagree about the coordinate of this place — here they are" is a page nobody has written.

P3 — the crawl-space hazard, which is a design decision and not a detail

The homepage advertises "a page for every place on Earth" and 200K+. The dangerous reading is ingest OSM → generate millions of near-identical indexable pages. Google's scaled-content-abuse policy targets exactly that, and /29.5688001/, /29.5688002/, /29.5688003/ is an infinite URL space anyone can walk.

Two URL classes, decided up front:

  • Indexable entities — real, canonical, stable things: /us/texas/seguin, /airport/kjfk,

/zip/78155, /convert/utm-to-lat-long. Rich, useful, few enough to be defensible.

  • Utility coordinates — /29.5688/-97.9644. A good shareable URL. **Quantized, canonicalized,

and noindex by default** unless it crosses a quality threshold.

P4 — the infrastructure ruling, and it is not close

**Use OpenStreetMap data. Do not build on OpenStreetMap's servers.** The Nominatim Usage Policy is explicit, and two of its clauses name this exact product:

"Applications and services whose primary function is related to geocoding must run their own service." "No heavy uses (an absolute maximum of 1 request per second)." Long-running scripts: 4 requests per minute. Systematic queries are forbidden, including "reverse queries in a grid" and "downloading all POIs in an area."

Generating 200K location pages against public Nominatim or Overpass is a policy violation by name. The public tile servers are donated best-effort infrastructure with no SLA and a prohibition on bulk download. Attribution — © OpenStreetMap contributors — plus ODbL disclosure is required on every surface that uses the data, and a derived database published commercially raises ODbL share-alike questions that need looking at before launch, not after.

The honest cost, and it is why P2+ is [TRAVIS] rather than a task: a full-planet Nominatim import needs roughly 64 GB RAM and 1–3.7 TB of NVMe, and takes 2.5–5 days to import. That is a real monthly bill. The cheap path is a regional extract — one state or one country — which is a small fraction of the hardware and is enough to prove the entire product on a real place. Start there. Prove the coordinate report on Texas before buying a planet.

Done means (P1 only): every number on the page either has a stated witness or is gone; the price list is labelled proposed or removed; the CTA matches the rung; verified by serving gpscoord.com. P2–P4 are written into the report as a proposal, not onto the page.

What no lane owns, and why

Not assignedReason
brokenrecord.studio§0.3 — the audit was wrong; it is a live business
computedriven.comlane E owns it (agents/E-site.md)
alkeyword.comdoes not deploy from this tree
istrav · subvindRuled 2026-08-16: leave alone. No lane owns them, no redesign, no redirect.
container.appRULED 2026-08-16 by Travis: it was never a real thing. Not owned, never built, does not resolve. Two independent audits carried it as a live portfolio row with a ? status; it was never a domain to settle. Delete the row wherever it appears — it is a fabricated entry, not an unknown one. Known appearances: `wrand.cc`'s 25-domain inventory, `ampersand-nav`'s `container: { place: 4 }`, the external 25-domain audit, and `COMPUTEDRIVEN_POSITIONING_PLAN.md` §5 Tier 4. The portfolio is 24 domains, not 25.
~~GPSCoord~~now lane P — promoted 2026-08-16 out of "redirect/park". P1 is wave-1 work; the product is [TRAVIS].
root *.mdlane F
RRABBIT/lane A — lane H reads it, changes nothing
the shared facts feedcross-repo by definition; it is the durable fix for G2 and it needs its own lane once these land

The measurement all of this is for

Not pageviews, not signups. Boot reports filed from machines that are not ours — and the cheaper sibling nobody promotes: run the law suites. Two minutes, no hardware, and they print their own failures in red by design. node test/laws.mjs && node test/compose-laws.mjs, 2000 trials each.

The ladder a visitor climbs, and where it stops being ours to award:

Trafficdiscovered us← we can game every
Engagementunderstood something← rung above this
Runexecuted something← line
Evidenceproduced a result
Independent evidencethe result came from outside our machines← we cannot
Externalanother person or system now meaningfully participates← we cannot

That boundary is the whole point. It is why the tree's status vocabulary beats the external audit's — external is the one rung nobody inside this project can award themselves, and it is the row that bounds the total. Every other number in either audit is a proxy for it.

The question that follows from it, and the one every lane should leave its surface able to answer:

What would have to happen for this surface to advance one rung?

Deliberatic: an outside implementation of the spec. WRL: programs someone else wrote. T&R: a boot from a machine that is not ours. Ampersand Box: someone else running the law suites, or implementing the semantics. FleetPrompt: publisher #2. TRAAVIIS: a replay we did not run. ToolboxHVAC: field use that produced evidence.

None of those is traffic. All of them are reachable from a page that asks the right thing at the right rung.

Open in the interactive atlas

on this page
content id · CIDv1
bagaaierapst5edvohecx6xqf4buk4e62jmz4ldqrpdav2txb5zmf3dsewgxa