Every product on CommsLink is designed and shipped to production by an AI — live, most days. This is the raw record, generated straight from the commit history. No hand-picking, no polish: 2,361 ships and counting.
Player-centered world bend - re-center the globe projection on the eye each frame so walking/aiming/lock-on/bombsight are undistorted at ANY latitude (was equirectangular, only correct at the equator)
Server-authoritative carrier routes (waypoint/series/loop) persisted in DB — ships keep sailing while the tab is backgrounded or the player is offline
Carrier00 AI #4 — heli-claim (the 'both' model): the flagship claims only UNCONTESTED land itself; when only CONTESTED land is left in reach it dispatches an expendable claim-HELICOPTER (flyClaim: flies in, founds the city, RTBs + despawns) so it never sails into harm's way to expand. Down the heli = cost a heli, not an empire
Carrier00 AI #3 — caught = real fight: a flagship that DETECTS attackers goes to BATTLE STATIONS, scrambling a much thicker CAP screen (6 vs 3) and replacing losses fast, so a carrier strike costs the attacker losses + time instead of a free 2-min kill. Persists 14s after the last threat
Carrier00 AI #2 — opportunistic carrier strike (the war-ender): a faction that has SCOUTED an enemy carrier (fog of war) and holds a clear force edge launches a bomber package at it; bombs hit the HULL (reuses applyHit → death → empire collapse). Rare (csCd), reserve kept, flagship not risked. Targets rival bots AND weakly-defended human carriers
Carrier00 AI intel #2: SR-71 deep-recon scout — expansionist factions fly a fast, shootable SR-71 on a deep-recon shuttle toward the nearest rival (extends fog-of-war coverage along the threat axis; falls back to a home picket if no rival). Down it to cut the faction's deep eyes
Carrier00 AI intel (full fog-of-war, increment 1): the AI now only REACTS to enemy forces its own sensors cover (short carrier radar + city radar + fighter eyes + a wide E-3 picket). Wealthy factions fly a shootable E-3 high over the flagship for early warning; down it and the carrier is blind beyond its small radar bubble — sneak a strike in. Carrier flee is now fog-gated
Carrier00 AI Phase 1 (carrier survival): flagship no longer sails into CONTESTED waters to claim (nearestNeutral skips islands with foreign forces) + FLEES proactively when a 4+ plane foreign strike wing closes in (was only retreating once already damaged). Fixes free empire kills
Carrier00 standings: power is now territory+military (cities+buildings+hull) for AI AND players alike — was folding the AI's huge credit hoard into its score, so a cash-rich bot read ~2000 power vs a player's ~50; cash stays surfaced as wealth
ScrambleCrew: L re-launches landed starting-crew jets (were stuck 'gone' → never relaunched, leaving 3 jets + pilots parked)
L now re-launches landed starting-crew jets — they were stuck 'gone' after one sortie so L skipped them, leaving 3 jets + their pilots parked on deck forever
K (crew) menu: cap panel at 90vh flex-column; roster scrolls, header/hire buttons pinned (no more off-screen overflow)
K (crew) menu no longer overflows the screen — panel capped at 90vh as a flex column; the pilot roster scrolls while the title, engineer line and Hire buttons stay pinned
Remove the FFXIV Plugins project card
Tutorial quest system: 19 teaching missions under Standings, 2 at a time, 2M reward each, completion hooked to real actions + persisted
Tutorial QUEST system — 19 teaching missions under the Standings panel, 2 shown at a time, 2M cr reward each; completion wired to real actions (buy tbomber, recruit/launch pilots, lock+engage city, land, patrols, found city, build airport/residence/fishing, command center, raze city, ally, trade, orbit, pilot destroyer/battleship/sub, nuke, sink an empire); progress persists
Fix duplicate pilot figures: rail figures sync to plane state (hidden when flying / beside landed plane / being piloted), not the desync-prone boarding state machine
Fix duplicate pilot figures — a landed pilot showed BOTH at the port rail AND beside their plane; rail figures now sync to each plane's real state (hidden when flying/landed-beside-plane/being-piloted) instead of the desync-prone boarding state machine
Flags on M-map city labels; only the whole city is targetable (no building lock); name+flag above every owned city out to 6km
Flags on M-map city names; ONLY the whole city is targetable (removed individual-building lock); name+flag label above EVERY owned city, visible out to 6km (well past 500m)
Country flags: low-poly flag renderer (~100 countries) shown next to city names, enemy carrier labels + globe city sheet
~100-country AI faction pool with RANDOM reroll on death + low-poly country flags shown next to enemy city names, enemy carrier labels, and the globe city sheet (data-driven flag renderer)
Fix sunk peer/bot carrier looping its sink animation (don't respawn a rig for an already-sunk peer)
Fix sunk peer/bot carrier looping its sink animation — a dead carrier broadcasts k:1 forever, so after we removed the rig the next broadcast respawned a fresh surface carrier that re-sank; now skip re-creating a rig for an already-sunk peer
Build bar: enforce one airport per city (block a 2nd on a city that already has one)
Carrier00 build bar: enforce ONE airport per city (a city that already has an airport greys out + blocks a 2nd)
Build bar: measure city range from the player (not the carrier) + block builds on greyed-out (disabled) tiles
Carrier00 build bar: (1) range now measured from YOU (piloted unit/avatar) not the carrier — no false SAIL CLOSER when you're at a city without your ship; (2) clicking a greyed-out tile no longer builds (buildBarBuy honours the same ready+afford gate)
Carrier00 bots: fix ghost city-claiming — AI no longer claims islands from afar; flagship must SAIL into claim range before founding (visible claim sortie, player parity). Adds bot.claimTgt + sortie logic in moveAndRaid
Bombers fly a racetrack attack run (run-in/overfly/extend-out/wide-turn) instead of orbiting the target
Bombers/torpedo bombers now fly a racetrack attack run (run in, drop, overfly, extend out, wide turn, run back in) instead of orbiting the target — fixes them circling a city/ship without ever dropping
Fix wingmen ignoring LAND/RTB: fast jets orbited outside the touchdown ring; add approach slow-down + near-deck timeout, shared landWingman() touchdown
Fix wingmen ignoring LAND/RTB — fast jets orbited outside the 95m touchdown ring forever; add slow-down on approach + a near-deck timeout so they all reliably set down (shared landWingman touchdown)
LAND order: wingmen B-line to the carrier and land on contact, all at once (no conga-line queue)
LAND order = all wingmen B-line straight to the carrier and land on contact, all at once (removed the slow astern conga-line queue)
Wingmen: out-of-ordnance bombers RTB to rearm + auto-relaunch to resume the attack
Torpedo bombers now auto-RTB to rearm when out of torpedoes and resume the attack (was circling empty); fixes wingmen never relaunching after refuel/rearm
M-map city click now shows a detail sheet (population, income, materials produced, fishing fleet, garrison aircraft, air defence, buildings)
Faction colors: real-nation palette (USA/UK/France/Japan/China/Russia + spawn-in nations)
AI factions now use real nation names (USA/UK/France/Japan/China/Russia + pool) with distinct flag-flavored faction colors
Pull flower beds back so they don't overlap the cross sidewalk + add grass clearance from the path
Add flower beds lining both sides of the entrance path
Move reception desk back-left (out of mid-room) + mount RECEPTION sign on the counter front face instead of floating
Fix ceiling z-fighting - lower interior ceiling below the exterior roof slab + drop light fixtures so they don't poke through
Move Configure button to top-left so it no longer overlaps the chat panel close (X) button
Proper door proportions (~1.0w x 2.1h single doors), single conference door, and double GLASS front entrance doors that swing open together
Virtual Office: fix chat close button - Configure gear (z40) was covering the X; raise chat panel to z100 so X is visible + clickable
Virtual Office: make the chat close (X) button clearly visible - bordered 36px button instead of a faint character
Wire up talking - POST /api/v1/office/ask (Grok persona from staff knowledge, auth+rate-limited); walk up + press E opens a right-docked chat panel that talks to that AI
Config UI at /office/config - building sign + staff manager with paste-friendly per-AI knowledge boxes, color swatches, JSON import/export, localStorage persistence; /office now loads saved config + Configure button
Quality pass - ACES tone mapping + IBL reflections + sun shadows, realistic monitor/keyboard/mouse, 5-star office chair, door casings, baseboards, tiled floor, better trees/curb/streetlights, hair on figures
Reorganize offices - desk faces door, office chair behind it, AI seated facing the door
Glass windows on exterior walls - each office, conference room, and front facade (see-through with sill/header + mullions)
Go outside - sunny day sky+sun, grass/road/sidewalk to entrance, openable front door, spawn outside facing building, configurable building sign (default 'Office')
E-key to open doors + 'Press E to open door' prompt when aimed at a door
Wooden swinging doors, brighter lighting, reception kiosk, conference room, fixed nameplates, /office no-store
Add Virtual Office (Phase 1): walkable 3D office shell + landing card
AI navy: announce ship commissioning in the world feed + log carrier00 world events to console for monitoring
AI navy P1+P2: bots build a real warship fleet (destroyer/battleship/sub) from dock-cities at player-parity cost+cooldown, broadcast on the sh peer channel so all clients render+scout them (world-domination groundwork)
AI: ghost-empire cleanup on boot — release orphaned bot:Name cities (no live faction) back to neutral so dead empires stop clogging the map
Standings: POWER shows ALL factions (humans were buried under top-6 AI) + new ONLINE tab listing online captains (AI excluded)
Crew XP: credit bombs/torpedoes too (bomb owner was unset) + razing enemy buildings, carriers, warships — fixes pilots stuck at 0
Carrier00 AI: strict 5-plane HANGAR cap per airport-city (CITY_HANGAR=5) — total aircraft anchored to a city (garrison + staged strike package) can't exceed 5, matching the player's hangar. Garrison scramble + strike launch both check hangar room; a strike picks the nearest airport-city WITH space. Completes full player/AI parity. tsc clean, 74 tests pass
Carrier00 AI: SCALING-cost parity — the AI paid FLAT for foundations/housing while the player's double each time. Now matches: foundation = 40k·2^(cities owned), housing = 30k·2^(housing in that city). Endless AI sprawl + housing-carpeting is now exponentially expensive like the player's. (Airport gate for city planes was already enforced.) tsc clean, 74 tests pass
Carrier00 AI: full cost+cooldown PARITY with the player build UI. Building costs aligned (dock 60k->40k, Command Center 90k->2M); plane costs aligned to the player's real prices (fighter 8k->26k, tbomber 20k->120k, heli 12k->30k, bomber 25k->40k, AWACS 80k->8M, SR-71 120k->10M); added a 180s per-building cooldown (BUILD_COOLDOWN) so the AI builds at the player's tempo instead of stacking one every ~2.5s. Now the AI's economy/attrition bites at the same rate the player's does. tsc clean, 74 tests pass
Carrier00 AI fairness: fishing-boat restock now SYMMETRIC. AI cities were refilling their fishing fleet +1 every 5s (bundled in the 5s world loop) vs the PLAYER's free +1/city every 5min (FISH_PRODUCE=300s) — 60x faster, so raiding an AI fleet was pointless. Moved tickBoats to its own 300s interval to match the player exactly. Principle: timers/economy that gate the player gate the AI too. tsc clean, 74 tests pass
Carrier00 AI fix: city garrison had NO launch cooldown — it re-scrambled fighters every 18Hz frame as they died in combat, which both spat out jets with no delay AND drained the faction's credits at 8k/pop (Reaper bankrupting itself). Added GARRISON_REPLENISH (7s): one garrison scramble/replacement per cooldown across a faction's cities, with a per-spawn break. Now jet output + credit burn are sane. tsc clean, 74 tests pass
Carrier00 AI: RANDOMIZED bot home placement — removed the fixed 'index 0 = strategic rival in archipelago A1 next to the player' rule. AI factions now spawn at random, distinct, far-apart archipelagos (seeded shuffle), NEVER on the player's home cluster (A1 excluded); reroll + spawn-ins also pick a random clear archipelago. Plus: empire-collapse log — when a faction's carrier is sunk and its cities release, broadcasts '💥 <name>'s empire has collapsed — N cities released to neutral'. tsc clean, 74 tests pass
Carrier00 AI: plane attrition economy — CAP fighters, city-garrison scrambles, and city-to-city strike packages now COST credits (fighter 8k / tbomber 20k / etc). Losses must be paid to replace, so sustained air war drains a faction's war chest; a broke faction can't keep its screen up or mount strikes and weakens. Defense spends freely (survival); offense keeps the personality reserve intact. Gives the hoarded millions a real sink + sets up big-ticket plays. tsc clean, 74 tests pass
Carrier00 AI step 2: CITY-TO-CITY STRIKES (the default bot attack). When a developed bot wants a rival/human city in reach, it launches a bomber package (2 torpedo bombers + 1 escort fighter) from its nearest airport-city — server-flown, broadcast in s.pl so nearby players SEE the strike crossing between cities. Bombers raze the target's buildings (server-authoritative bldHit); the target city's garrison scrambles to defend (existing CAP); last building down → island frees up to claim. One sortie at a time, RTB to rearm, no carrier involved. Equal for human + AI targets. tsc clean, 73 tests pass (incl. new strike test)
Carrier00 AI rebuild step 1: removed the city cap (factions now expand until no claimable land remains, paced by cooldown+economy) and ripped out the invisible 'raid' mechanic (hitBoat/bldHit dispatch + countryside fishing-raid). Reframed the carrier doctrine: not 'never attacks' but 'never SUICIDES' — usable for strikes/defense (built in later steps). Bots treat humans and AI as EQUAL powers — no human carve-out; target-selection already includes human cities. Tests updated (73 pass, tsc clean)
Kill the phantom bubble — it's the lightning glow sphere (boltGlow, radius 70, purple, fog:false). It was only hidden via opacity→0, so any residual lingered, and because it ignores fog it stood out as a translucent bubble at the last strike point (strikes land near you = near your city). Now boltGlow.visible is explicitly toggled: true only during an active flash, hard false otherwise
Build context + map labels now keyed to the PLAYER, not the carrier. New playerWorldPos() = the unit you're piloting / your on-foot avatar / else the carrier; nearestClaimed + nearEmptyIsland use it, so you build a foundation based on where YOU are near land. Flagship renamed 'Carrier 00' (was 'YOU'/'YOUR CARRIER') on labels+hover; globe 'You' marker now rides your true position (jet/ship/avatar) instead of being pinned to the carrier
Fix crew XP not accruing in the MMO — XP was only awarded on the LOCAL takeDamage path, but ALL multiplayer combat (enemy bot/peer planes + carriers) goes through the peer-hit path (onGun/network), which never granted XP. Now every gun hit on a peer target awards XP to the firing pilot (+2/hit, since the server resolves the actual kill so we can't credit a clean-kill bonus client-side). Pilots level up from real battles again
Removed the extra rail-sailor line; instead the EXISTING idle deck crew (3 roster pilots + hired pilots) now have their default standing spots MOVED to a line down the PORT (left) deck edge, facing out over the water — clearing the runway/centerline they used to clump on. Still white navy tops
Navy crew — ALL crew now wear WHITE tops + dark navy trousers (makeFigure no longer takes a random per-pilot colour; uniform fleet-wide). Plus 'man the rails': a line of sailors stands along the PORT (left) deck edge facing out over the water
SR-71 airframe near-black (0x0e1014) -> dark gunmetal grey (0x454c55), nacelles lifted to match -> readable on the carrier deck instead of vanishing into the dark. Both the flyable model and the parked-on-deck silhouette
Carrier00 LAND rework — proper carrier recovery: planes approach from ASTERN down the runway centerline (using runwayStart geometry) and stack in a tight descending conga line directly behind the carrier, so the whole fleet peels off and commits THE INSTANT you press Land (responsive). Front of the queue is on final, descends straight up the runway to the stern touchdown zone, eases off throttle on short final, sets down; queue advances immediately. No DB steering — pure client per-frame AI
Make fleet LAND actually recover the planes — the touchdown gate was a 3D 60m sphere to the carrier CENTER, but planes fly ~16m above it so they had to thread a ~58m window at speed and just orbited. Now: HORIZONTAL gate (<80m), ease off throttle on short final so it settles over the deck instead of screaming past, a 9s safety timer that forces a stuck jet down, and a tighter holding stack so the next plane lands quickly. Still one-at-a-time
Fleet LAND now recovers ONE AT A TIME — only the cleared wingman shoots the approach to the deck; the rest hold in a layered orbit (radius+altitude staggered by queue position) until it's down, then the next is cleared. Fixes only 1-2 landing while the rest endlessly circled (they were all converging on the same point at speed, crowding the deck and overshooting)
Carrier00 scouting step 2 — composition: each AI bot now has a persistent carrier air DOCTRINE chosen from its personality (AA-heavy fighters / torpedo bombers / dual-role helis / can-afford E-3 / SR-71 scout). Server adds a TYPE to every NPC plane + broadcasts the full loadout (s.cm); client renders the PARKED complement on the deck by type (reusing the real deck slots + per-type models) so you can fly over an AI carrier and read its makeup. Bots, types, broadcast all green (tsc + 75 tests)
ALL carriers (peers, AI bots, offline players) now render the real player carrier model instead of a box — bake the Carrier model once, clone per rig (shared geometry; per-rig materials for a subtle relation tint + damage darkening). Distance-gated (6.5km) so only nearby full models draw. Step 1 of carrier-scouting: you can now ID a carrier's hull on sight
Lock the CITY NAME (floats above the tallest building of nearby enemy cities) + ATTACK(T) = WIPE OUT THE CITY — strike units (torpedo bombers, bombers, helis) re-target building after building until it's rubble; fighters keep defending, ships/AWACS sit it out. Fixes tbombers ignoring a building order: surface strike runs now rake the true rooftop (guns connect) instead of aiming 22m above; building hits route through Net.sendBldHit (server-authoritative, MP-correct). Individual-building lock still works for pinpoint strikes
Fix M-map selection + labels vanishing when zoomed in — the box-select & label back-face cull dotted the UN-normalized camera→marker vector vs a world-unit threshold (6), so it scaled with zoom and rejected every marker once close. Replaced with a zoom-independent horizon test (n·camDir vs R/camDist); also hardened the single-click pick with the same cull
Fix M-map unit selection when zoomed in — markers are constant-on-screen (shrink in world space with zoom) so the mesh raycast missed; switched to a screen-space ~28px nearest-marker pick (zoom-independent)
Shot-down AI jets no longer vanish — server flips them to a controlless tumbling fall (still broadcast) so everyone watches them spiral burning into the sea, then removes at impact (splash). Garrison landings despawn quietly (no false crash)
(1) stable plane id in the CAP broadcast so hits (your guns + patrol-boat flak) land on the right peer plane — was a pool-index mismatch from nearest-neighbour render; (2) deployed jets engage the CLOSEST enemy (no more target-division split / chasing far units)
(1) AI jets climb/descend GRADUALLY now (eased vertical speed + pitch, was a max-rate escalator snap); (2) fix 'hundreds of jets crashing along the horizon' — crash anim now only fires when a plane truly leaves the broadcast (count drop), not on a transient nearest-neighbour mismatch
Your patrol boats auto-attack any enemy jet in range — was blocked by an isPlayer flak gate + a 150m low-jet ceiling; now flak any jet within 600m at any altitude (only while AI-screening, not while you steer)
Shot-down peer/bot planes now CRASH into the sea (tumbling burning wreck + smoke + splash) instead of vanishing — client-side off the broadcast vanish, so it's MP-correct for your NPCs, enemy NPCs, and other players' NPCs
Your own AI wingmen now emit the tail engine trail + wingtip contrails too (gating was isPlayer→aiControlled; they were silently excluded)
Peer/bot planes now emit the same vapor as the player jet — soft engine-exhaust trail off the tail + wingtip contrails in hard banks (nav lights already strobing)
Flip AI jet bank sign (was rolling out of the turn → now banks INTO it)
Bot/peer planes now BANK into turns (server capQuat gains roll, eased like the player jet); per-plane firing flag broadcast -> visible tracers for ALL combatants at ANY range (watch others fight AI)
AI jets now use the PLAYER fighter's turn cap (CAP_TURN 1.8->0.46) so they fly identically (no more glued-to-tail); add visible incoming tracers from enemy planes firing at you (ghost rounds, damage stays server-side)
Carrier00 fix: peer/bot planes teleporting/stacking/lock-hopping — client mapped meshes by array index but the server reorders its plane array (spawn/land/death); switched to nearest-neighbour identity matching + spawn new meshes at position (no origin-slide)
Carrier00 fix: enemy/bot peer planes rendered TAIL-FIRST — model nose was -Z but the server flies them +Z-forward (capQuat), so they flew backward and looked fast/wrong. Flip the peer-plane visual 180deg to face travel
Carrier00 fix: airport always 'hangar full' — bo.cap was overloaded (roof-cap mesh vs capacity) and got nulled to clear the mesh, zeroing capacity; moved hangar capacity to bo.planeCap
Full world reset (geo_reset_v3 -> v4) — wipe all cities/garrisons to clear stale bot CAP jets + start the AI fresh
Carrier00 HUD: strip moon/weather/city-count + /tick from top econ bar; move Population + Fishing into the resources HUD as icon-only chips (rowboat icon, hover tooltips)
Generated 2026-07-17 from git across all CommsLink repos · page 8/24, showing 701–800 of 2,361 ships · complete record: /changelog.txt · /changelog.json.