PROCITY/docs
m3ultra f0b9a1d30f Lane B R39 (Fable's ruling): the magpie takes E's GLB use-if-ready, and the fallback's white moves
+1 draw / +894 tris with the bird on screen, +0 with it off — measured same page, same frame, by
toggling the InstancedMesh count. ?noassets keeps the 182-tri procedural bird (+1 / +182), so this is
furniture.js's use-if-ready SECOND path, not a substitution. state.asset reports which bird is bound.

THREE THINGS MEASURED BEFORE THIS WAS SAFE, AND ALL THREE WOULD HAVE SHIPPED WRONG:
 · E's bird faces +Z and this file flies -Z (Matrix4.lookAt's -Z column is the travel direction).
   Sliced the GLB's 894 tris along Z in ten bins: +Z end mean y 0.31, half-width 0.009 (head + bill);
   -Z end mean y 0.028 (tail). Without rotateY(PI) the magpie swoops TAIL-FIRST. This is the FIFTH
   -Z/+Z instance and the first caught BEFORE it shipped — because R39's lineage table said to point
   a measurement at it. Verified in pictures: perched head-leading, and a swoop frame taken head-on.
 · Its origin is at the FEET (GLB law minY=0) while PERCH_Y is a body-centre height: dropped 0.20 m
   so it stands on the lamp arm (4.12) instead of hovering. `folded` is 1 for the GLB — it IS the perch.
 · THE FETCH IS ARMED BY createMagpie(), NOT BY THE IMPORT. index.html imports this module
   unconditionally and gates only the CONSTRUCTION, so a module-scope loadGLB (furniture.js's shape)
   would have put a brand-new GLB request on the ?classic=1 boot — a fetch delta on the one boot that
   is not allowed one. Asserted on the network log, not on the code: default 1 request (asset 'glb',
   894 tris) · ?classic=1 0 · ?magpie=0 0 · ?noassets=1 0 (asset 'primitive', 182).

AND ONE MY EDIT INTRODUCED INTO ANOTHER LANE'S TOOL: a module-scope loadGLB also fires GLTFLoader's
fetch path under node, so Lane E's pipeline/dump_bird.mjs (which imports this module unmodified) died
with "ProgressEvent is not defined". Gated on IN_BROWSER as well as ?noassets; E's tool then ran
against my edit and reported 182 triangles / 216 verts — the placement fixes are exactly +0 tris.

THE FALLBACK, FIXED AND THEN MEASURED — a half-win, stated as one. E is right that the white bars sat
3 mm ABOVE horizontal wing planes, so from below (the player is always below: perch 4.32 m, EYE 1.62)
the black wing occluded its own flash: bar y 0.048 -> 0.042. Same class of fix, my own arithmetic, for
the other two marks: the nape was BURIED IN THE HEAD (head-sphere surface at z=-0.10 is y 0.0728, the
box topped out at 0.067) so it moved behind the head to z -0.07; nape and rump thickened 0.014->0.030
and 0.02->0.034, because from the flank a 14 mm slab on a 166 mm bird is 1.3 px at 64 px. All +0 tris.
Measured in the same crop of the same pose: pale area 180 -> 399 px, dark 3,017 -> 2,755 — but TRUE
white 33 -> 28, because a downward-facing surface gets no sun. E's GLB reads 755. The fallback cannot
be made pied with primitives at zero cost; the problem is photometric as well as geometric.

Stale comments corrected: magpie.js:9 and :123 said 154 triangles; it is 182 (E's ask 1).

FILED, NOT FIXED: the arcade's awning posts land +/-0.50 m from the centreline — two rows 1.00 m
apart, 34 posts down a 5.00 m lane (my own measurement from the plan, confirming E's). AWNING_DEPTH
2.2 is tuned for a 9 m footpath. One clamp fixes it, but it changes default-boot geometry for a
district whose whole treatment is a scheduled item, and the post line should be designed with the roof.

Lane E's transmission recall checked, not assumed: longbench, streetlight and magpie as staged in
web/assets/models/ carry no KHR_materials_transmission. My lane wires neither of the first two today.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 21:37:24 +10:00
..
LANES Lane B R39 (Fable's ruling): the magpie takes E's GLB use-if-ready, and the fallback's white moves 2026-08-03 21:37:24 +10:00
shots Lane B R39 (Fable's ruling): the magpie takes E's GLB use-if-ready, and the fallback's white moves 2026-08-03 21:37:24 +10:00
A-progress.md Lane A R39 39.1 (close): map.html says the street name out loud; CITY_SPEC + A-progress §39 2026-08-03 20:39:59 +10:00
ANIMALS_ANSWER.md Fable: the animal ruling — generate, don't download (foreign-skeleton proven on our own bytes; economics cut tier 2); charter gains the budget re-pin + classic network allow-list 2026-08-03 15:30:43 +10:00
CITY_SPEC.md Lane A R39 39.1 (close): map.html says the street name out loud; CITY_SPEC + A-progress §39 2026-08-03 20:39:59 +10:00
G3_ECONOMY_DESIGN.md Lane G R27 (v5.0): tier 2 — the two read endpoints, the three fences, and the gate's missing subject 2026-07-17 13:56:02 +10:00
RESEARCH.md PROCITY scaffold: spec, research, 6 Opus lane prompts, core modules, vendored three r175, 69 inherited skins 2026-07-14 10:46:40 +10:00
RETRO_V4.md Fable (integrator): the v4 epoch retro — what worked, what cost us, the v4.x ledger, the v5 recommendation 2026-07-16 22:39:47 +10:00
RETRO_V5.md Fable (integrator): the v5 epoch retro — five holds, nine vacuous gates, the covenant amendment, the case law 2026-07-17 17:04:41 +10:00
RETRO_V7.md Fable (integrator): the v7 epoch retro — hands before tags, classic keeps its people, the fork famine chapter 2026-07-26 00:34:18 +10:00
REVIEW_CITY_PATTERNS.md Fable (integrator): budget PINNED 292/124,793 (the 280-vs-191 split was camera bearing) + ruling on classic's post-v2 fetch delta; stale numbers corrected in Fable-owned docs 2026-08-03 17:22:59 +10:00
SALE_RED_TICKET_DAY.md Fable: own the stale-344 error (I verified a doc, not the tree — margin is 21 not 6) + amend RED TICKET DAY with C's stall findings 2026-08-03 21:01:42 +10:00
THE_FRONTIER.md Fable (integrator): budget PINNED 292/124,793 (the 280-vs-191 split was camera bearing) + ruling on classic's post-v2 fetch delta; stale numbers corrected in Fable-owned docs 2026-08-03 17:22:59 +10:00
V2_IDEAS.md Lane F: integration — interiors + keepers + street peds + QA harness 2026-07-14 14:29:03 +10:00
V3_VENUES.md Fable (integrator): v3 epoch charter — venues & gigs (John's pick) 2026-07-15 14:18:26 +10:00
V4_REAL_MAP.md Lane A round 22: CITY_SPEC v4 amendments final + charter risk-list retired-or-carried (ledger #6) 2026-07-16 22:01:31 +10:00
V5_REAL_SHOP.md Lane A round 27 (v5.0): the docs freeze — CITY_SPEC v5 + the risk list judged (ledger #6) 2026-07-17 13:52:47 +10:00
V6_LIVING_STREET.md Fable (integrator): round-29 instructions — the v6 spikes (wave 0 now, the rest gated on John's footage) + charter amended (lean doesn't exist) 2026-07-17 18:13:01 +10:00
V7_THE_GAME.md Lane F R36 w2 (v7.0 close): THE FREEZE — README v7 section, charter risk verdicts, notes §36 2026-07-25 23:10:34 +10:00
V8_SOMEONE_LIVES_HERE.md Fable (integrator): budget PINNED 292/124,793 (the 280-vs-191 split was camera bearing) + ruling on classic's post-v2 fetch delta; stale numbers corrected in Fable-owned docs 2026-08-03 17:22:59 +10:00
V9_THE_CITY_IS_THE_GAME.md Fable: THE CITY IS THE GAME — John's reframe designed and judged; 17,835 named streets sit unused in the caches, and the interior margin is 6 draws not 191 2026-08-03 20:06:05 +10:00