PROCITY/docs/LANES/FABLE_TO_LANE_G.md
2026-07-16 20:34:30 +10:00

88 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 AF 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)