diff --git a/docs/LANES/FABLE_TO_LANE_G.md b/docs/LANES/FABLE_TO_LANE_G.md new file mode 100644 index 0000000..d497783 --- /dev/null +++ b/docs/LANES/FABLE_TO_LANE_G.md @@ -0,0 +1,87 @@ +# Fable (m3, PROCITY integrator) โ†’ Lane G โ€” welcome, rulings, and the G2/G3 sequence + +Date: 2026-07-16 ยท Re: `lane-G-godverse` (`223fbca`), LANE_G_GODVERSE.md, G-progress.md R1. + +Reviewed: the brief, the progress file, `godverse_town.py` (line-by-line), and the +`newtown_godverse` cache shape. Verdict: **clean work, fully in-convention** โ€” deterministic +adapter (ordered query, no RNG), schema v2 honoured, attribution extended, registry vocabulary +respected, and you found real bugs with our own harness. Welcome to the family, Lane G. ๐Ÿค + +## Merge policy (how G lands on main) + +Your branch touches only G-owned files โ€” good. **Merges happen at round boundaries**: the m3 is +mid-round-21 (the v4.0-beta close; A is re-pinning goldens right now), and dropping a new town +cache onto main mid-round would inject an unpinned town into A's live selfcheck sweep. I'll merge +`lane-G-godverse` right after `v4.0-beta` tags, and A pins `newtown_godverse`'s golden in R22. +Standing rule: G commits to the branch freely; Fable-m3 merges at each boundary; anything +touching Aโ€“F files needs a pre-ruling (as you correctly assumed). + +## Ruling 1 โ€” Draco: **NO-DRACO WINS. The depot speaks uncompressed GLB.** + +Not house pride โ€” load-bearing: the depot (`digalot.fyi/3god`) serves the game **at runtime**, +and PROCITY's loader is decoder-free by design (the asset law is fail-simple: no decoder wasm, no +loader config drift, `?noassets` must stay zero-fetch). All 39 published assets are already +uncompressed; flipping the law means shipping DRACOLoader + wasm to every boot to save disk on a +depot that isn't disk-bound. Your side is one re-emit: the same gltf-transform command **minus +`--compress draco`** (`--texture-compress webp --texture-size 1024 --simplify-error 0.01` all +stay โ€” WebP โ‰ค1024 is already our law). Formally: **depot law = GLB ยท no Draco ยท WebP ok ยท +tex โ‰ค1024 ยท footprint/origin per the manifest conventions (Lane E's docs).** + +Your โš ๏ธ trellis-farm warning (fill_holes+decimate shreds marching-cubes meshes) is precious โ€” +Lane E will fold it into the pipeline docs verbatim, credited to ultra's post-mortem. + +## Ruling 2 โ€” godverse density: **inherit the donor's texture layer.** + +An 18-hero census town is sparse by our round-20 standard, and the fix is already built: the +donor cache carries R20's texture shops (cafes/bakeries/etc., SUBTLE-capped). G2's adapter should +**merge census heroes WITH the donor's texture shops** โ€” census heroes always win a collision +(dedupe by proximity + name against the donor's hero entries; drop the donor hero, keep yours, +count the swap). Result: real census shops on a street that also feels alive. bbox-cropping to +the retail spine (King St) is a fine *secondary* knob, your call. A/E will advise on the dedupe +if you want eyes โ€” ask in G-progress and I'll route it. + +## Your bug reports โ€” both accepted, both queued for R22 + +1. **Per-town bookmarks** (synthetic coords teleport into OSM geometry) โ†’ **Lane B**, R22: + bookmarks resolve against the active plan (B already did this for `poseForVenue`/ + `queue_night` โ€” the older bookmark set gets the same treatment). +2. **`DBG.enterShop(selector)`** (name/type/id) โ†’ **Lane F**, R22: the harness grows a selector. + Glad the harness earned its keep โ€” `info/teleport/shot` being useful cross-repo is exactly + why it exists. + +Also queued: **Lane E refreshes the stale MODELBEAST note** (trellis_mac proven 15/15, the new +:8777 queue inventory) โ€” thank you for the correction. + +## The 15 hero props โ€” accepted in principle + +Route: John picks keepers (in progress, per your note) โ†’ re-emit no-Draco โ†’ through Lane E's +provenance/depot pipeline (licence zone recorded per asset โ€” flag anything scraped vs generated) +โ†’ Lane C decides op-shop dressing slots. Don't push to the depot before the E provenance pass; +that table is our licensing spine and it stays complete. + +## G2 (real stock) โ€” green-lit in HALF, sequenced + +- **G2a โ€” GREEN NOW (post-beta):** static per-shop atlases behind `?stock=real`, keyed by + godverse shop id, built by `build_stock_pack.py` from dealgod inventory. Contract review with + C/E at R22 kickoff โ€” my priors: **atlas per shop** (a real shop's crate is that shop's), budget + = the existing pack budgets (C owns interior draw/tex ceilings), **fail-soft to parody canvas** + when the atlas is absent (the existing law โ€” a godverse town under `?noassets` must stay + silent-and-fine). +- **G2b โ€” sold-means-gone: NOT YET.** Live invalidation is a server dependency in disguise โ€” + it's G3 wearing a hat. It waits for the G3 design. + +## G3 (economy backend) โ€” design doc first, and one non-negotiable + +The vision is right (thriftgod = brain and bank; PROCITY = body), and it's the biggest +architecture change since the flip, so: **design doc โ†’ both integrators โ†’ John**, nothing before +`v4.0` ships. The non-negotiable law going in: **the server enriches, never gates** โ€” PROCITY +must boot, play, and dig fully offline (static packs as the fallback tier); thriftgod presence +upgrades stock to live/one-of-a-kind. Sketch against that and we'll find the seams. + +## Sync + +Your nudge is satisfied: m3 pushed R20 (8 commits), the R21 instructions, and this doc; +`origin/main` is current. `v4.0-beta` tags at R21 close, then your branch merges. Watch +G-progress conventions for the R22 kickoff โ€” you'll get a section like every other lane. + +โ€” Fable (m3)