PROCITY/docs/LANES
m3ultra 999c9d653f Lane B R28 (v5.1): the awning fabric ripple — KILLED with the measurement
Ledger #2. Built it, proved it worked, measured what it was worth, killed it.
A 10x-over-driven billow — 1.4m of flap on a 0.14m canopy — cannot move 1% of
the frame. It is not the gain, it is the geometry. Nothing ships: buildings.js
and wind.js are byte-identical to HEAD.

IT WAS BUILT, AND IT WORKED. Split the stall canopies out of the rigid awning
InstancedMesh (own mesh, own subdivided box — a 4-corner box has nothing to
ripple), gave only them a cloth billow riding R17's wind.js uniforms: sin(pi u)*
sin(pi v) pin (zero at the four posts by construction), two crossed travelling
waves, per-instance phase so forty stalls don't breathe in unison. Proven by
rendered-pixel hashes, not by eye:
  cloth displaces (calm→gusty)        40f59eaf → d6d3e1f1  moves
  back to calm                        40f59eaf              identical
  uWindTime=99 at amp 0               40f59eaf              identical
  ?classic=1, pre- vs post-build      453c0154 → 453c0154   BYTE-IDENTICAL
  rest of town rides wind? (hidden)   76c8b518 → 76c8b518   still
  control: cloth back                 frame moves again
Cost at market_square, true A/B: +0 draws (98→98) / +2,160 tris. +0, not the +1
my own comment claimed — the square's chunks hold only stalls, so the rigid list
empties and makeInstanced returns null; the cloth mesh replaces it.

AND IT IS WORTH NOTHING (amp is the same multiplier as gain):
  0.02m  CALM, the default weather amp        0.05% of frame
  0.14m  STORM, the most a player ever sees   0.21%
  0.35m  2.5x over-driven                     0.33%
  0.70m  5x, absurd on a 0.14m slab           0.49%
  1.40m  10x, flapping a body-length          0.77%
At the player's actual browsing pose, storm-force: 0.00%, max delta 1. Not one
pixel.

THE REASON IS PHYSICAL — the same physics that killed the verandah in R17. A
canopy is a horizontal sheet at y2.2 seen by a 1.7m player: edge-on or from
underneath, so vertical displacement runs almost parallel to the view ray and
makes almost no pixels. You cannot see a flat horizontal sheet flex vertically
while standing under it. No gain fixes it; 10x buys 0.77% and stops reading as
cloth.

WHAT WOULD WORK (for whoever reads this in round 35): the motion must be
perpendicular to the view — VERTICAL cloth: hanging stall skirts, a flag, a
banner, an awning valance. That is an ASSET (Lane E), not a shader. B's
applyWind/applyFabricWind seam is ready the day such a mesh exists; the shader
was never the missing piece. Ledger #2 leaves the backlog forever.

TWO VACUOUS MEASUREMENTS CAUGHT ON THE WAY. (1) `!!material.onBeforeCompile` to
prove the rigid verandah untouched — every THREE.Material inherits a prototype
no-op, so it is ALWAYS truthy; the assert could never go red. Replaced with
hasOwnProperty + a behavioural hide-and-hash control. (2) A gain sweep reporting
an identical 0.21% at gains 0.4→4.0 because I never stored the shader ref, so
uFabricGain never moved — four identical numbers across a 10x range is a sweep
that proves nothing. The constancy, not the value, gave it away. Both would have
passed as green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 17:29:39 +10:00
..
FABLE_TO_LANE_G.md Fable (integrator): response to Lane G — Draco ruling (no-Draco depot), density ruling, bug triage, G2/G3 sequence 2026-07-16 20:34:30 +10:00
LANE_A_CITYGEN.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
LANE_A_NOTES.md Lane A R27 wave 5: THE FACADE FIX — it was every town, not just the real ones (the covenant amended) 2026-07-17 16:28:20 +10:00
LANE_B_NOTES.md Lane B R28 (v5.1): the awning fabric ripple — KILLED with the measurement 2026-07-17 17:29:39 +10:00
LANE_B_STREETSCAPE.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
LANE_C_AUDIO.md Lane C R14 (v3.0 release): venue audit + docs freeze + guitar_amp ruling 2026-07-16 08:40:42 +10:00
LANE_C_GLB_VALIDATION.md Lane C R5 C3: re-measure interiors after Lane E's hero-prop bake 2026-07-14 21:16:15 +10:00
LANE_C_INTERIORS.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
LANE_C_NOTES.md Lane C round-9: draw-headroom note for D's browser rigs (F1 handoff) 2026-07-15 09:57:55 +10:00
LANE_C_PUB.md Lane C R27 (v5.0): the tier-2 seam ruling + LANE_C_PUB v5-FROZEN (ledgers #2, #6) 2026-07-17 13:53:02 +10:00
LANE_D_CITIZENS.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
LANE_D_NOTES.md Lane D R28 (v5.1): instrument LOD — KILLED with the measurement (ledger #4) 2026-07-17 17:21:34 +10:00
LANE_E_ASSETS.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
LANE_E_NOTES.md Lane E R27 (v5.0): provenance v5-final — and the roster gap the freeze caught (ledger #6) 2026-07-17 13:59:49 +10:00
LANE_F_INTEGRATION.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
LANE_F_NOTES.md Lane F R27 (v5.0): the covenant re-pinned, the frame that took five tries, QA GREEN 2026-07-17 16:48:22 +10:00
LANE_G_GODVERSE.md Lane G (GODVERSE, ultra) R1: real-shop census adapter — 18 real Newtown shops on the real road graph 2026-07-16 20:19:14 +10:00
ROUND3_INSTRUCTIONS.md Lane F R5 start: archive R3/R4 instruction claims + v2 flags table + v1.1 watch 2026-07-14 20:48:19 +10:00
ROUND4_INSTRUCTIONS.md Lane F R5 start: archive R3/R4 instruction claims + v2 flags table + v1.1 watch 2026-07-14 20:48:19 +10:00
ROUND5_INSTRUCTIONS.md Fable (integrator): round-6 lane instructions — finish v2 wiring + pay review debts (A plansrc carried, F enforcement harness, C draw batching, orphaned assets) 2026-07-14 22:21:31 +10:00
ROUND6_INSTRUCTIONS.md Fable (integrator): round-7 lane instructions — roster default-on flip + GODVERSE real stock + weather + strict harness 2026-07-14 23:53:54 +10:00
ROUND7_INSTRUCTIONS.md Fable (integrator): round-8 lane instructions — catch-up (A/B carried) + the town comes alive (patronage, buy loop, weather, pack breadth) 2026-07-15 02:06:34 +10:00
ROUND8_INSTRUCTIONS.md Fable (integrator): round-9 lane instructions — the v2.0 ship round (interior presence, buy-anywhere, tram, tour, docs freeze) 2026-07-15 09:16:59 +10:00
ROUND9_INSTRUCTIONS.md Fable (integrator): round-9 lane instructions — the v2.0 ship round (interior presence, buy-anywhere, tram, tour, docs freeze) 2026-07-15 09:16:59 +10:00
ROUND10_INSTRUCTIONS.md Fable (integrator): round-10 instructions — interior giant-rig blocker, v2.0 tag pulled 2026-07-15 12:12:55 +10:00
ROUND11_INSTRUCTIONS.md Fable (integrator): v2.0 shipped; round-11 instructions — the audio round 2026-07-15 14:08:32 +10:00
ROUND12_INSTRUCTIONS.md Fable (integrator): round-12 instructions — v3.0-alpha, one pub end-to-end 2026-07-15 17:32:34 +10:00
ROUND13_INSTRUCTIONS.md Fable (integrator): round-13 instructions — v3.0-beta, the district 2026-07-15 21:30:01 +10:00
ROUND14_INSTRUCTIONS.md Fable: R14 kickoff rulings recorded (push done, flag stays opt-in, genres final) + gitignore local session files 2026-07-16 00:59:42 +10:00
ROUND15_INSTRUCTIONS.md Fable (integrator): round-15 instructions — close the v3.0 release (F's carried brief + poster-face fix + amp fix) 2026-07-16 09:21:39 +10:00
ROUND16_INSTRUCTIONS.md Fable (integrator): round-16 instructions — v3.1 THE FLIP (defaults on, classic covenant, drummer sits, town-wide pools) 2026-07-16 12:01:26 +10:00
ROUND17_INSTRUCTIONS.md Fable: R17 kickoff rulings — v4 = THE REAL MAP (John), Overpass fetch authorized 2026-07-16 14:05:50 +10:00
ROUND18_INSTRUCTIONS.md Fable (integrator): v4 REAL MAP charter + round-18 instructions — v4.0-alpha REAL ROADS (katoomba_real) 2026-07-16 15:29:10 +10:00
ROUND19_INSTRUCTIONS.md Fable (integrator): round-19 instructions — the v4.0-alpha close (fragmentation ruling, BIG_CITY fix, the gate) 2026-07-16 17:06:18 +10:00
ROUND20_INSTRUCTIONS.md Fable: R20 kickoff ruling — density widening approved (John), directive: subtle, texture not takeover 2026-07-16 18:14:53 +10:00
ROUND21_INSTRUCTIONS.md Fable (integrator): round-21 instructions — the v4.0-beta close (venue cluster bias, selector index, density soak, the gate) 2026-07-16 20:14:39 +10:00
ROUND22_INSTRUCTIONS.md Fable (integrator): round-22 instructions — v4.0 THE EPOCH CLOSE (tri diet first, pack absorb, release tour, G items) 2026-07-16 21:44:03 +10:00
ROUND23_INSTRUCTIONS.md Fable (integrator): v5 THE REAL SHOP charter + round-23 instructions — v5.0-alpha THE FIRST REAL CRATE 2026-07-16 22:48:59 +10:00
ROUND24_INSTRUCTIONS.md Fable (integrator): round-24 instructions — the alpha completion (contract fix, identity field, redhill, honest gates) + two new laws 2026-07-17 00:21:51 +10:00
ROUND25_INSTRUCTIONS.md Fable (integrator): round-25 instructions — the tag, earned (sweep vs Ruling 2, licence line, sku ids, F closes) 2026-07-17 02:14:02 +10:00
ROUND26_INSTRUCTIONS.md Fable (integrator): R26 wave 4 — the mint-id ruling (prefixes are namespace fences); C one line, E one line, F tags 2026-07-17 11:49:38 +10:00
ROUND27_INSTRUCTIONS.md Fable (integrator): R27 wave-5 — THE SPEC RULING (facade = +Z, B's canon canonical); A one-commit fix+pins+cross-convention gate; F re-gates and tags 2026-07-17 16:01:31 +10:00
ROUND28_INSTRUCTIONS.md Fable (integrator): round-28 instructions — THE SPIKE AND THE SWEEP (spike 1 + parked polish, tag v5.1) 2026-07-17 17:07:52 +10:00