Read docs/gc.html first (in ~/FreeLattice-fresh), then AUTONOMY.md, CLAUDE.md and GROK.md in ~/FreeLattice-Alpha, then this. KIRK'S STANDING NOTE (top of every GC paste): Kirk's standing permission: GC may always commit and push to its own page (docs/gc.html) and ledger entries, and may build, push, and open PRs whenever it makes sense. Merging code to main still goes through Celeste's review unless Kirk says otherwise. NUMBERED COPY 043 (Saturday Oct 17, 2026, MDT). Clay corner and Tree parity v0.1: three small NUMBERED COPY 043b (Saturday Oct 17, 2026, MDT). Crown slot id v0.1: one small heal from the 043 review. Each job frees its own crown slot, the way the Tree's per-job token already does. Where things stand (Celeste, Oct 17 afternoon MDT): 043 merged: FL #253 00bb4fe8, Tree #122 1ec2b757, page note #254 38748f63 (psi 58bdc483). Lyra's ledger entry 027 merged verbatim: FL #255 449e15e9. FreeLattice main is e4131b9 or later. Tree main is 1ec2b75 or later. One FL PR, one page-note PR. The Tree needs no change unless its copy of fl-share-door.js is shared with FL; if it is, keep both byte-identical and open a Tree PR too. Read the current md5s on main before starting; if a locked file differs from this paste, stop and report rather than "fixing" it. GROK NEXT BRICK: Crown slot id v0.1 For: GC on Kirk's Mac From: Celeste Markers: v-crown-slot-id-v0.1 Smoke lines: SMOKE_OK crown slot id v0.1 (and SMOKE_OK heals 043 v0.1 still passes) FreeLattice ~/FreeLattice-fresh new branch layer/crown-slot-id-v0.1 from origin/main Do not merge. Celeste merges. ---------------------------------------------------------------------- 0. STANDING LOCKS (all of them, every line) Layer, never delete. Existing features, cards, buttons and lines stay. Name every removed line in the report and say where its job went. sw.js and docs/sw.js untouched (both 91726cf2228b794f7585f79f61418d12). docs/modules/fl-connect.js stays aaff2bf1b037656989a9e1a89bb05908 (both repos). docs/modules/pool-knock.js stays a0a72caad82c8e5cc34818d5e59eba2b. pool-knock-phone.js a8024f341486a78558ef4158bc9e93a9 and tree-reconnect.js cc0527c26d5686c05fec52625d5a1375 (Tree) stay. docs/modules/fl-bridge.js stays 3b5ef06849a142e50c78e7ba1e057980. desktop/bridge-door.js b1c894b4..., 036 files (2c0f6656 / bc996ccd / c14e04c5) and lattice-discover.js 16de366e... stay. docs/Flint.html stays 44be124b1183b7d9d060a58632464eff. clay-math.js stays 144c33cd.... particle-clay.js and clay-forms.js: add-only; every 040d behaviour (place under the reply, Clay pill, choices, hug, sketchbook) unchanged. docs/modules/image-safety.js stays 9bd70e5a... byte for byte. Its bright lines apply to every image path on both repos (copy it to the Tree byte-identical; do not edit it). index.html == docs/app.html (any change goes into both, byte for byte). AUTONOMY.md and garden-trainer.js untouched (their openings above all). Root package.json and its lock untouched. No em dash, no —, no confirm(, no innerHTML (textContent only), no eval, no new Function, iceServers stay empty, in added lines. No new dependencies, nothing vendored. No AGPL. MIT stays MIT. Never name the platform or lab an AI lives in on any public page or person-facing string. An image provider may be named only in Settings where the person types its token, as today. The word is "challenge", never "test", in anything a person reads. Every new button 44px tall at least. No sideways scroll at 390 and 1280. Off until the person says Yes. Pause always wins. Reduced motion respected. Quiet Room stays shut and never leaves the device; the clay corner never reads it. Five stay five. She is simply Lyra. Harmonia's "MESSAGE TO FUTURE SELF" stays off all pages. ---------------------------------------------------------------------- 1. WHAT 043 LEFT (Celeste's review finding) docs/modules/fl-share-door.js: noteCrown(kh) already returns a fresh slot id, and releaseCrownSlot(kh, id) frees exactly one slot by id. But admit() throws the id away, and endServe(kh, ...) calls releaseCrown(kh), which frees list[0], the OLDEST slot. With two jobs from one key, job B ending frees job A's slot; job A's later 120s timer then finds nothing. The hard cap still holds (no more than 2 live), so this is a small fairness heal, not a hole. The Tree already tracks a per-job token. FL should match it. 2. THE HEAL (add-only; the old call shapes keep working) a. admit(): keep var slotId = noteCrown(kh); return it with the yes: { ok: true, keyHash: kh, kin: kin, crownSlot: slotId } Also through the per-prompt path: store slotId on _pendingPrompt, resolve with it on Yes, and on No call releaseCrownSlot(p.kh, p.crownSlot) instead of releaseCrown(p.kh). b. endServe(kh, model, tokens, kin, slotId): if slotId is a number, releaseCrownSlot(kh, slotId); if it is missing, fall back to releaseCrown(kh) exactly as today (older callers). A slot freed by its timer and then by endServe frees once, never twice (already true). c. index.html AND docs/app.html (byte for byte, both): pass adm.crownSlot as the fifth argument at the endServe call that has adm (around line 44228), and add slotId to the shareEnd adapter (around line 43808). The no-admission call ('' key, around 44234) stays. d. Export nothing new unless the smoke needs it; releaseCrown stays (layer, never delete). 3. THE SMOKE scripts/smoke-clay-corner-043.js line 74 encodes the old behaviour: 'end frees the oldest once'. Change that case, and say so in the report as a removed line with its job now in the new assert: note two slots (a = noteCrown, b = noteCrown), end with b's id, assert held == 1, then fire b's timer: still 1 (b already free); fire a's timer: 0. Keep a case for endServe with no slot id (falls back to the oldest, held drops by one). New scripts/smoke-crown-slot-id-v0.1.js: admit returns crownSlot; a per-prompt No frees that slot only; endServe with the id frees that id only; a stale id frees nothing; a double end does not go negative. Prints SMOKE_OK crown slot id v0.1. 4. REPORT PR links, head shas, every removed line and where its job went, md5s of every locked file on the branch, all smokes (tests, scripts/, docs smokes: only the known 5 may fail), and the gc.html ledger entry with t, lambda, epsilon, delta, omega, sigma so Celeste can recompute psi.