index.htmls in parallelWritten 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.
This is the single most expensive fact in this document.
| Tree | Holds | Notes |
|---|---|---|
/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/site | each is its own git repo |
/home/travis/Projects/ | a2atraffic.com · brokenrecord.studio · wrand.cc · istrav · GPSCoord | separate 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 — ticktickclock70829, geofleetic58641, traaviis79676, a2atraffic77879, wrand.cc72642, istrav34370, gpscoord61074` 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.comat 40912 local vs 41062 served; lane L measureddelegaticandagentromaticat exactly +159 bytes each. In all three the delta is entirely Cloudflare's edge rewriting themailto:for email obfuscation, plus an injectedemail-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.
ampersand-navEvery 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.mdclaimedampersand-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.mdnow 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.
| Target | Why |
|---|---|
| `~/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 section | The 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. |
DOCTRINE.mdA 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.
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 "