88 lines
5.3 KiB
Markdown
88 lines
5.3 KiB
Markdown
# 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)
|