Changelog
Major changes to the SRD site, the In The Union Now builder, and the Discord bot. For full commit history see the GitHub repository.
- Site
v2.5.0
- load the package stylesheet, layered below Tailwind's utilities (#816) (2eb54ba)
- declare three packages the workspaces import but never listed (#777) (250af17)
- give the SRD route grammar one owner (#768) (19902db)
- name a guide's tone instead of storing a second palette (#769) (18974c3)
- stop four unactionable browser errors filling Sentry (#790) (786df13)
- Data
v2.11.1
- define "an unset pool means full" once, and enforce it (#780) (5269c60)
- give the SRD route grammar one owner (#768) (19902db)
- name a guide's tone instead of storing a second palette (#769) (18974c3)
- delete the corrupt .tool-versions that breaks mise (#766) (ae0931e)
- stop the schema catalog embedding the package version (#825) (b46ec67)
- check the docs a contributor actually reads first (#782) (d0a4d22)
- Data
v2.8.0
- mark rules-bearing prose inline on entity cards (#630) (2e72c3b)
- activated contributions with manual expiry — Squeeze It In, Hull Magnetiser (#635) (9156601)
- split cap overrides from manual adjustments; derivations return breakdowns (#608) (7139ab8)
- abilities can declare stat contributions — Beefcake now applies (#615) (1ad2625)
- add the rules-parity audit — the gate that keeps content honest (#627) (2221de8)
- give effects a target — Bio-Wings grants the MECH the Fly Trait (#640) (04b7d07)
- Data
v2.6.0
- Partner Sheets — statted drones/companions owned by a pilot or a mech (#578) (7ee4d1b)
- name self-actions after their entities so book facets fold (6 entities + Bio-Rifle matcher) (#566) (b0598b3)
- correct Generic ability data against core book p.248-249 (#570) (531cb10)
- point nine equipment records at their entry page + an index-backed name/page scan (#569) (baddaec)
- restore Eggs Mayhem module facets and roll table (#563) (4049a8a)
- render guide steps — most guide prose was missing from every guide page (#564) (de44fd1)
- Data
v2.4.0
- mechanically enforce architecture invariants (Biome + supplementary scripts) (#387) (9bb37d2)
- unify artwork on WebP, shrink about-page map (#321) (f94082a)
- audit sweep — 13 high-priority UX/DX/gameplay fixes across ITUN, suref-web, bot, packages (#366) (04b854f)
- audit sweep — 30 high-impact changes across ITUN, suref-web, bot, and packages (#334) (afddf9d)
- derived release changelogs + ref public-surface gate (ADR-024/025) (#472) (4f10b63)
- high-value batch — ITUN cross-links/Sentry, suref-web e2e/Sentry, bot tests, CI (Dependabot/CodeQL/coverage/visual), package hardening (#339) (1131678)
- built-in Starter Set workspace (Reclamation of the Wastes roster) (698d36e)
- built-in Starter Set workspace (Reclamation of the Wastes roster) (#371) (698d36e)
- close rules-vs-ITUN gaps (Phases 0-2) (eef9059)
- crawler wizard — book-order steps + type/weapon/SP enforcement (Phase 5) (#426) (3b9680e)
- mech wizard — book-order steps + 20-Scrap budget enforcement (Phase 4) (#422) (cf2b587)
- model Eldridge Coast companions as equipment loadouts (2/2) (#464) (c18d6a5)
- pilot wizard — book-order steps + hard creation enforcement (Phase 3) (#421) (0c566d8)
- rebuild in-the-union-now as a local-first app; remove itun-legacy (#239) (c162917)
- single-surface live sheets — poster redesign + section-based editing (#395) (daaead6)
- sum installed system/module stat bonuses into mech derived maxima (#327) (bcc73e2)
- migrate entity artwork off Supabase to Netlify Blobs (#298) (8b678bb)
- PASS sprint + suref-web cleanup (#170) (199e86f)
- model vehicle loadouts as actions, not installable systems (#269) (f4a49fe)
- add expansion crawler bays (#266) (0585206)
- move Tier 1/2 rules modules into the package (ADR-006) (#382) (52eb79c)
- unified validation runner + CST-preserving data editor (#381) (56f0faa)
- SRD audit remediation — licensing, data fidelity, search/UX, SEO/perf/PWA, DX (#268) (ab3648e)
- SRD + shared design-system restyle (#260) (1072bb2)
- add /schema/v1 JSON API endpoints (#107) (d9922ae)
- filter abilities by tree (#459) (5f747f3)
- archive Salvage Union Starter Set content (#180) (2cfae8d)
- equip Iron Lady with mech modules and theme new sources (#181) (edb63d7)
- actions audit — data quality and PDF accuracy fixes (b2ff5b7)
- remove broken Elite Blade Squad asset_url (#299) (f846fa0)
- update Wader chassis stats to Rainmaker 2.0a (#337) (9617842)
- heat check trigger fires unconditionally (dbf472f), closes #174
- pilot armor reduces HP damage in cascade calc (3ad5776), closes #175
- seed only base crawler bays on new crawlers (#325) (7fbdfa4)
- add missing Fabrication Bay options (#290) (210042c)
- align Adv. Epoxy Applicator self-action name for bubble-up (#293) (df60536)
- remove spurious 2 AP cost from First Aid Kit (#288) (ce25085)
- render mech action/ability costs as EP by source (Auto-Doctor + chassis) (#274) (9566eb0)
- add missing Smuggler hybrid class to classes.json (a8d579e)
- full copy audit — 120 fixes across all source PDFs (13d8fe3)
- resolve CodeQL js/polynomial-redos in nameToSlug (#384) (a3302ed)
- skip prepare script in CI to fix Render deployment (1c8ecc3)
- drive Legal Starting Pattern badge from data tag (#292) (09d0745)
- eliminate Zod JIT eval to satisfy strict CSP (#283) (2693869)
- use --ignore-scripts for Render build to avoid lifecycle failures (a5c3857)
- Site
Support the project on Ko-fi
- The About page now has a Ko-fi support link, so you can chip in toward hosting and development.
- Site
Chassis patterns open their loadout again
- Clicking a pattern on a chassis page now opens its pattern-specific systems and modules in a modal, instead of re-opening the chassis page in a new tab.
- Site
Filter abilities by tree
- The Abilities listing now has a Tree filter, so you can narrow abilities down to a specific ability tree (e.g. Hacking, Ranger, Legendary Soldier). Like the other filters, the selection is shareable via the page URL.
- Site
Simpler entity pages
- Removed the Previous/Next paging links from entity pages — use search or the category listing to move between entities.
- Site
Bot Terms & Privacy moved to the Discord page
- The bot's Terms of Service and Privacy Policy links now live at the bottom of the Discord page instead of in the site footer.
- Site
Link to the character builder
- The top bar now has a BUILDER link out to In The Union Now — the no-account character builder & game manager — so you can jump straight from the reference to building pilots, mechs, and crawlers.
- Site
Faster page loads
- Entity and category pages now download only the reference data they actually need, instead of the entire dataset — item and listing pages load noticeably faster, especially on slower connections.
- Search now runs against a small pre-built index instead of downloading the full dataset, so search starts working faster the first time you use it.
- Site
Discord bot Terms & Privacy pages
- Added Terms of Service and Privacy Policy pages for the Salvage Union Discord bot, linked from the site footer.
- Site
First-class search and shareable filtered views
- A dedicated search page shows the full, uncapped list of matches (press Enter in the search box, or open it directly at /search?q=…) with type filters to narrow by category.
- On phones, a search button now sits right in the top bar — no need to open the menu first.
- Filtered listing views are now bookmarkable and shareable: your Tech Level, Source, and name filters live in the URL and survive back-navigation.
- Entity pages gained Previous/Next links to page through the rest of their category.
- Site
No more text flash when opening an entity
- Opening a chassis, system, ability, or any other entity no longer briefly flashes an unstyled text-only version before the full card appears — the styled card (or its loading skeleton) is what you see from the first paint.
- Site
Discord bot: install page and the /su command
- New Discord page (in the nav) with a one-click install button and a reference for using the bot at your table.
- Bot commands now live under a single /su namespace — /su roll and /su lookup — so they no longer collide with other bots' /roll in the command picker.
- Site
55 community Mech Monday patterns
- Seven chassis — Mule, Scrapper, Thresher, Spectrum, Mazona, Goliath, and Bobcat — now carry the community-designed patterns from Leyline Press's official Mech Monday compilations: 55 new patterns in all, each transcribed from the published cards.
- A handful of cards that reference homebrew or ambiguous items were left out rather than guessed at.
- Site
Builder: safer data, session drafts, printable sheets
- Wizard progress survives refreshes and accidental taps — pilot/mech/crawler builds save a session draft as you go, and Cancel asks before discarding changes.
- Scrapping a mech, moving cargo, and salvage deposits now apply all-or-nothing, so scrap value can no longer duplicate or vanish if something goes wrong mid-action.
- Every sheet has a Print action with a clean paper layout (pips and current stats included) — use "Save as PDF" in the print dialog for a PDF copy.
- Snapshot sharing renders a real scannable QR code, and internal links no longer trigger full page reloads on crawler pages.
- Site
Discord bot: /lookup and full table coverage
- New /lookup command searches every entity type — chassis, systems, modules, equipment, keywords, and more — with autocomplete and a link to the entity's SRD page.
- Both "Salvage Cache Table" roll tables are now individually rollable (one previously shadowed the other), and slash commands re-register automatically on every deploy.
- Site
Builder: live-play rules controls across every sheet
- Mech sheets gained Take Damage (with the Critical Damage table), Heat Check escalation, Salvage rolls, Scrap-this-Mech, and per-item condition tracking; pilot sheets take damage and injuries; crawler sheets run the full economy — upkeep, upgrades, and trade.
- A Downtime control walks the between-mission steps (repairs, healing, training, crafting), and a floating quick-roll button rolls any table from anywhere.
- GMs get an encounter tray: track reference NPCs with live HP/SP and roll on the Mediator tables.
- Global search (Cmd+K) finds any rule or entity from anywhere in the builder.
- Site
Shadowed table restored, smarter search, tidier sitemap
- The two "Salvage Cache Table" roll tables (We Were Here First! and Reclamation of the Wastes) shared one URL, so only the first was reachable — they are now disambiguated by source and both have their own page.
- Search understands multi-word queries: "heavy laser" now finds Heavy Laser instead of returning nothing, with word-prefix matching and better ranking.
- Removed 712 orphaned internal pages (inline-only entries like raw actions) from the sitemap and breadcrumbs — every indexed page now has a working parent listing.
- Site
Builder: smarter mech & crawler building
- Installed Heat Sinks, Capacitance Banks, cargo holds and similar passives now raise your mech's maximum Heat/EP/SP/Cargo automatically.
- The mech loadout supports duplicate systems and modules (two Heat Sinks are two Heat Sinks), with per-item Add buttons, installed counts, and remove-one controls, plus Bio and Nanite tiers in the tech filter.
- New crawlers seed only their base bays — the three expansion bays (Bio Bays, Nanite Processing Bay, VR Tubes) are add-ons you install — and crawler system capacity follows the crawler type.
- Site
"View details" opens the full entity page
- Clicking "View details" on a nested entity (chassis pattern, formation member, integrated system, ability) now opens that entity's own page in a new tab instead of a modal, so you can read it alongside the original and link straight to it.
- Site
Link previews now mirror the entity card exactly
- The preview image shown when you share an entity link is now a 1:1 render of the actual entity display card — the same header, stats, traits, and styling you see on the page — instead of a separately-designed preview.
- Site
Faster, lighter artwork
- All entity artwork now serves as WebP from a dedicated asset store — noticeably smaller downloads on art-heavy pages, with the about-page map shrunk to a fraction of its old size.
- Site
Non-advanceable classes call it out
- Classes that cannot advance to a hybrid class now show a "Non-Advanceable" tag, instead of silently omitting the "Advanceable" label and leaving it ambiguous.
- Site
Steadier catalog grid on load
- Fixed a hydration mismatch on catalog (/schema) pages where the masonry grid rendered one column on the server but two or three in the browser, throwing a React error and forcing the whole grid to re-render on tablet and desktop widths.
- Site
Branded link previews for every entity
- Sharing a link to any chassis, system, ability, creature (or any other entity) now shows a branded Salvage Union preview card — the entity name, tech level, key stats, traits, and source — instead of a generic banner. Generated at build time for all entity pages.
- Site
Small data & display fixes
- The "Legal Starting Pattern" badge is driven by each pattern's data tag instead of being computed, fixing patterns that were mislabeled.
- The Adv. Epoxy Applicator's self-action now bubbles up correctly, and entities whose stats live on a matching action show those stats in the resolved data row.
- First Aid Kit no longer shows a spurious 2 AP cost.
- Site
Fabrication Bay options restored
- The Fabrication Bay system now lists its four activation options — restore up to 15 SP, restore up to 2 EP, repair damaged Systems/Modules, or repair damaged Chassis/Vehicles. Previously the text promised "choose one of the following options" but showed none.
- Site
In The Union Now rebuilt — local-first, no account needed
- The character builder & game manager was rebuilt from the ground up as a local-first app: your pilots, mechs, and crawlers live in your browser (with export/import backups) — no account, no server, works offline.
- Redesigned pilot/mech/crawler wizards with auto-fill selection grids, a floating step footer, and a crawler Crew step with selectable crawler types and editable tech level.
- Share read-only snapshots of any sheet via link — the one place a server is involved, and only when you ask for it.
- The Discord bot also got steadier: it now finishes loading game data before answering commands.
- Site
Filters above the catalog, smoother window resizing
- Catalog filters (name, tech level, source) now sit in a bar above the results at every screen size, instead of in a left sidebar on desktop.
- The catalog grid no longer stutters when you resize the window — large schemas (chassis, abilities, equipment) stay smooth.
- Site
Smoother loads on catalog & entity pages
- Fixed a hydration mismatch that could make a catalog or entity page throw away the server-rendered HTML and re-render (a brief flicker) once game data finished loading.
- Site
Buy links on source books
- Each source book and expansion now shows a Buy button — in both the catalog listing and on its page — linking straight to the publisher's store.
- Site
Vehicles read as actions, not installable systems
- Conventional vehicles now list their loadout — weapons and locomotion — as actions, the way their statblocks read, rather than as installable Mech Systems.
- The Power Loader's rigging arm now shows its own melee profile (Close, 1 SP), distinct from the mech utility arm, and two placeholder systems (Integrated Amphibious Locomotion System and Shanty Home) were folded into the vehicles that use them.
- Site
Audit sweep: search fixes, offline support, faster pages
- Search no longer breaks if you type before game data finishes loading, Enter now jumps to the top result, and category matches no longer crowd out item hits.
- The SRD now works offline after your first visit — install it to your phone for table use on bad venue wifi.
- Every page loads ~1.3 MB less JavaScript, schema listings gained a name filter plus loading skeletons and clearer empty states, and printed pages drop the site chrome.
- Item pages link their traits and keywords directly, trait tooltips fixed for six pilot-equipment items (armor/armour mismatch), and the Salvage Cache Table now references SRD listings instead of print-book page numbers.
- Site
Expansion crawler bays added
- Four expansion / found Crawler bays now appear in the reference: the Bio-Mech Bay and Bio-Crafting Bay (We Were Here First!), the Nanite Processing Bay (False Flag), and the VR Tubes (Rainmaker).
- Unlike the core fixed facilities, these are player-addable upgrade bays — each shows its build cost (Scrap and/or Bio-Salvage), tech level, or salvage value instead of a crew member and damaged effect.
- Site
Bio-Titans restored; Iron Lady reclassified
- The Titans schema is once again Bio-Titans, and each Bio-Titan now shows its bio-salvage value (equal to its Structure Points).
- The Iron Lady — an android, not a Bio-Titan — now lives under Drones with a salvage value, while keeping her Titanic Actions and equipped Mech Modules.
- Site
Mobile fix for guide entity grids
- Side-by-side entity cards in guides (e.g. the Base Classes and abilities on Create a Pilot) now stack into a single column on mobile instead of overflowing off the right edge, and still show two balanced columns on wider screens.
- Site
Site restyle + interactive equipment customisation
- New Salvage Union 'Cargo' brand header with a breadcrumb description sub-bar that surfaces each schema's description as you browse.
- Refreshed entity-card and typography styling across the SRD, and the old landing-page hero has been removed.
- Pilot equipment with player choices (weapon type, modifications) now shows an interactive customisation panel — toggle options to watch the damage, range, and traits update live.
- Site
Iron Lady modules + custom expansion themes
- Iron Lady (titans) now lists its equipped Mech Modules — Comms Module, IR Night Vision Optics, Firewall — as compact entries you can click through.
- Titans schema accepts optional `systems` and `modules` arrays; both render as compact cards beneath the titan actions.
- New custom themes for Reclamation of the Wastes (wind-blown dust), The Hive (honeycomb mesh), Thatcher's Mech Base (industrial steel grate), and Relics of a Time Gone By (weathered parchment).
- Changelog entries are now rendered as readable bullet lists instead of paragraphs.
- API page documents that appending `.json` to any schema or item URL returns the raw data.
- Site
Salvage Union Starter Set archived
- Reclamation of the Wastes and the Asset Pack mini-adventures (Hive, Thatcher's Mech Base, Relics of a Time Gone By) are now reachable: chassis patterns, systems, modules, abilities, equipment, drones, creatures, titans (monsters and bosses), NPCs with unique statblocks, lances, and roll tables.
- New `titans` schema (replaces `bio-titans`) consolidates monster-class and boss-class mech-scale enemies, including Iron Lady.
- Mobile schema list pages no longer overflow horizontally.
- Data
v2.0.1
- Fixed utility functions that incorrectly extracted properties from `actions[0]` for multi-action entities
- Updated `getActivationCost()`, `getActionType()`, `getRange()`, `getDamage()`, and `getTraits()` to only extract from `actions[0]` when entity has **exactly 1 action**
- Previously, these functions would extract from the first action even when entities had multiple actions (e.g., Chassis with 4 actions)
- Now correctly returns `undefined` for multi-action entities, ensuring properties are only "promoted" for single-action entities
- Fixed `getEffects()` to only check base-level properties (effects don't exist in action schema)
- Added comprehensive test coverage for single-action, multi-action, and base-level property precedence scenarios
- Data
v2.0.0
- `description` (string) - Replaced by `content` array
- `effect` (string) - Replaced by `content` array
- `effects` (array) - Replaced by `content` array
- `notes` (string) - Replaced by `content` array
- `options` (array) - Replaced by `content` array
- `content` (array of ContentBlock) - Unified structured content system
- `grantable` - Replaced by enhanced `grant` definition
- `damage` - Now defined inline within `action` definition
- `effect` - Replaced by content blocks
- `effects` - Replaced by content blocks
- `baseEntry` - Redundant with `baseEntity`
- `action` - Now uses `content` array instead of separate text fields (`description`, `effect`, `notes`)
- `baseEntity` - Added `content` property
- `npc` - Changed `description` field to `content` array
- `grant` - Enhanced to support both schema references and choice types
- `pattern` - Changed `description` field to `content` array
- `techLevelEffect` - Changed `effects` from reference to inline array definition
- `content` - Array of content blocks
- `contentBlock` - Individual structured content block with type, value, label, level, and nested items
- `combatEntity` - Entity that can perform actions and has traits
- `mechanicalEntity` - Mechanical entity with structure points and equipment stats
- New schema for range/distance definitions
- 34 distance/range entries with structured data
- `contentType` - Content block types: `paragraph`, `heading`, `list-item`, `list-item-naked`, `label`
- Added top-level `description` field (summary text, distinct from action-level content)
- 2,609 line changes
- 3,298 line changes
- 1,552 line changes
- 1,566 line changes
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Complete migration to content blocks
- Simplified and cleaned (304 line reduction)
- Enhanced type inference for content blocks
- Added `ContentType` enum
- Better organization and exports
- Enhanced full-text search with content block support (95 line changes)
- Added content block helper functions
- Improved search result relevance scoring
- Better handling of structured content in search
- Auto-generates type guards and property extractors from schemas (277 lines)
- Utility functions including type guards and property extractors
- Generate utility functions from schemas
- Auto-generates markdown docs from schemas (173 lines)
- 25 auto-generated schema documentation files:
- abilities.md, ability-tree-requirements.md, bio-titans.md, chassis.md
- classes.advanced.md, classes.core.md
- crawler-bays.md, crawler-tech-levels.md, crawlers.md
- creatures.md, distances.md, drones.md, equipment.md
- keywords.md, meld.md, modules.md, NPCs.md
- roll-tables.md, squads.md, systems.md, traits.md, vehicles.md
- `docs:schemas` - Generate schema documentation
- `validate:references` - Validate cross-references in data files
- Validates generated code is current (130 lines)
- Validates data cross-references (172 lines)
- Updates schema references (101 lines)
- General content block migration (231 lines)
- Ability-specific migration (155 lines)
- Using `npm-run-all` for faster builds
- Updated `generate` script to run type generation in parallel, then index generation, then utilities generation
- Enhanced GitHub Actions CI workflow
- 68 files changed
- 14,330 insertions
- 3,230 deletions
- 25+ schemas updated
- 20 data files completely restructured
- Import new `ContentBlock` type
- Remove references to old `effect`, `effects`, `notes`, `options` fields
- Use `content: ContentBlock[]` instead
- Replace `objects.schema.json#/definitions/effect` with `objects.schema.json#/definitions/content`
- Replace `objects.schema.json#/definitions/grantable` with `objects.schema.json#/definitions/grant`
- Remove references to `baseEntry` (use `baseEntity` instead)
- Ensure `content` arrays contain valid `ContentBlock` objects
- Validate `type` field against `contentType` enum
- All text content uses the same structure
- Support for rich formatting (headings, lists, labels)
- Easy to add new content types in the future
- Better TypeScript inference and validation