Dev log

What shipped, and why

Write-ups when a wave of work lands. Underneath is the raw commit log, with token plumbing and infrastructure repairs filtered out.

Raw commit log

  • count every real change, and three new write-ups
  • apply 82 verified fixes from the site audit
  • comics data uses 'Vector' so the index description passes its test
  • art-led Breach board + cinematic site pass
  • BREACH Phase 1 (core engine, Breach Zero board, chain spike) + comic-issue site redesign
  • the public front actually exists now — apps/site, staged at dev.legends.city
  • the deploy fight has sound, weight and a body — six feel systems that shipped years ago and were never wired
  • bound the dive reward faucet before the doors open
32 older changes
  • the HUD was invisible to reduced-motion players, one mesh was fetched twice, and a better GPU got a darker game
  • the tune stays in one key long enough to learn it
  • remove the interior face ink line — it scribbled the mouth (round-7 regression)
  • the nose reads from the front — final face-front shading pass (round-6 gap)
  • face placement — chin/eyeline landed too low (round-4 gap)
  • wardrobe/gear/augments thumbnails (GAP 6) — 183 baked previews
  • makeup-ink final tweaks (3.6mm surface lift + kohl/brow-bars placement)
  • makeup that sits on the face + ink pass work (GAP 3)
  • close face skin-terminator gap + wire cybernetics (GAP 5)
  • wire v0.51 face morphs (9 noses + 12 sliders + 6 wigs) + fix accent-randomizer flake
  • front-facing camera fix (GAP 1) + power-pathway at creation (GAP 4)
  • faction select + garment material + creator-flow hardening
  • flip animHinge gate to the fixed state (assets-v0.50) — 0 backwards knees on all 7 bodies
  • A persistence (guest->claimed in-place carry, 5-slot roster, operator adopt CLI) + B roster (3->5 slots, activate MB9+RONDO, 4 new archetypes = 7 selectable) + anim-regression client (hinge audit + test; both long-red rig tests FIXED — float32 yoke + spine_05->chest); worldHashes byte-identical, PROTOCOL_VERSION 2, catalogHash moves (creator family)
  • party/squad — server-authoritative ephemeral squads (cap 8), party-frame HUD rendering members as Legends with 2Hz JSON vitals across shards (F5, no snapshot bit), block-gated invites; fixes an S2 gate bug; contract/PROTOCOL_VERSION/worldHashes unmoved, +18 server tests
  • additive protocol module (social.ts — Chat/Social channels, LegendRef, validated chat/squad shapes, 28 tests) + cross-process SocialBus (redis pub/sub + in-process fallback, re-subscribe-on-ready, fan-in/out; redis.ts first real consumer; RedisPresence/Driver — closes F1 + the latent global-room-table need); PROTOCOL_VERSION 2, worldHashes byte-identical, server 498 tests
  • activate RosterV2 — remote players render as their Legend (server-authoritative identity via CharacterStore, per-recipient diffs, F3 identity-before-appearance, pooled nameplates); zero protocol change (contract byte-identical, PROTOCOL_VERSION 2); +9 server tests, worldHashes byte-identical
  • Records opens on all 3 input schemes — 44px touch HUD chip + gamepad Back/Select + input-aware card prompt (scheme.ts); sticky chain-head rule on small profiles; worldHashes byte-identical, client-only
  • codex reading pane delivers on all 3 input schemes — touch drag + keyboard up/down/PgDn + gamepad focusable region (pane 96->464px portrait, 68->261px landscape); header no-wrap; NEW pip + sticky chain head on mobile; desktop unregressed (0.024% px, DOM byte-identical); worldHashes byte-identical
  • narrative delivery system — GhostSignalDef + 37 signals wired to a server-authoritative world observer (segment reach + predecessor gate) + the Records codex UI (CodexSource model); additive LoreChan, PROTOCOL_VERSION + contentHash + worldHashes unmoved; static QA green (codex knows 37, starts empty). Dynamic trigger QA pending critic
  • reconciliation FORGE integration — fix the Cleanskin/Reckoning-0 strand (4 missing flags + reachedReckoning1 lint, test-proven) + 12 doc work orders (Writ ladder budget->stance, dogs_spared, Toll pronoun, 37/5 signals); worldHashes + contentHash + PROTOCOL_VERSION unmoved
  • reconciliation pass — 41 contradictions resolved to one canon, 9 owner-items open, 529-line ledger (Writ ladder SoT, name collisions w/o breaking crew_mark_found, 37/5 signals, Toll pronoun rule, rung-4 two-speaker canon)
  • Wave A quality revisions (object-texts/meridian-security/amperage/doc-splice/patch close their critic SHORTs)
  • Wave B — 6 sidequest files (hubs/streets/west-south + faction canon) + 4 questline-act files (undercurrent/scrapline/meridian + spine), ~17k lines; ChoiceDef/QuestDef beats authored in contract shape, flags proposed not appended
  • Wave A prose — 19 files fill the empty corpus (ghost-signals, the Kindling, object-texts, society, ICE+Bleedthrough bestiary, Chrome Dogs+Meridian doctrine, 10 character scenes); writers flagged canon contradictions in-file for reconciliation
  • the complete playable horde — faction variety + death & respawn
  • M3 combat wire: the street is a PLAYABLE, VISIBLE fight — real enemy attacks (fieldAttack: melee+travelling bolts, dive execution lifted, fieldStrike deleted), Legend fights back (Buttons.Attack=64 on the existing InputCommand, server-authoritative raycast, C0-scaled; mouse/E/gamepad-RT/touch), additive field-channel HIT+VITALS events (PROTOCOL_VERSION unmoved, 22B snapshot untouched), client HP bar + damage feel reusing the dive. Live-fire: horde killed a fighting L30 at ~225s; player sees HP fall + fights back. worldHashes/contract/content/dive-golden unmoved; field+street fixtures moved (digest+behaviour, isolated+justified); 1504 tests. 2 real bugs fixed
  • M3 F2+S4: horde+loot CONTENT (S0 director config + 3 faction pools + 5 street archetypes + L0 drop tables/rarity/affix-proc catalog/Prologue grant table, wage-now-closet-later, one contentHash move) + S4 KIND WIRE (spawn events, PROTOCOL_VERSION unmoved) — enemies render as real meshes in the server world (2 clients proven, players=Legends enemies=Hounds disjoint). Fixed a real shared-mesh re-parent bug (cloneSkeleton) that broke the dive too. worldHashes/dive-golden unmoved, 1442 tests
  • M3-S3 FieldSim: the 20Hz fixed-timestep world sim (composes MoveStore/CombatStore/StatusSystem/DamageSystem/ProcEngine); ShardRoom adapter (fork E2, role=field). Enemies can run on a hostile team; spawnEntity/setIntent/despawn = S2 seams. Seat reconciliation RE-VERIFIED (HubSim==FieldSim to 0.000m over 1km boost; 2 browsers 0 snaps; no client change). Own field fixture pinned; worldHashes + dive-golden + protocol + content byte-identical
  • M3-F0 sim-core freeze: team/hostility system (8 teams + HostilityTable + masked accepts, strict generalisation) + combat lanes (hit-height/qPvpMult/hitDirYaw/targetMask/poise) + CombatStore AI/pack fields — all additive, byte-identical (diveDeterminism 0x120dfde8 pinned). Unblocks the Street Director + enemy AI. worldHashes/PROTOCOL_VERSION/protocol untouched
  • M3-C0 chassis bridge: combat now reads the Elden stat table (powerCurve.ts) — chassis drives HP/shield/crit/abilityRank per character (was a flat constant). Additive; dive determinism fixture byte-UNMOVED; worldHashes + PROTOCOL_VERSION + contract untouched
  • M3-W1 THE SEAT: ?world client joins a ShardRoom — server-authoritative + client-predicted world (F1a). Pillar-0 (two clients see each other) + CLOSES the game-loop soft-lock (seated fledgling earns XP: L1→L3 measured). R3 reconciliation storm killed via additive handshake-fold-echo. contract.ts + PROTOCOL_VERSION + worldHashes unmoved. Reach regression: seam/fast-travel stands seat down until W4