The Build Log
What we shipped
The LoomMaster build log, in the open. Every batch below already shipped
and is live and playing right now - features, fixes, catalog, and closed
audit findings, one entry per shipping day. Newest first.
Suite green · updated 2026-06-26 · live and playing now
2026-06-26 · Batch 37
The first twenty minutes, rebuilt - your opening written for your hero, and the path to your first craft lit
We rebuilt the start of the game around one idea: a newcomer should FEEL the
depth, never drown in it. Your opening scene is now written for your exact
character, the quest log leads with a single clear objective, and the game
quietly leads you to forge your first real gear.
Getting started
- Your opening, tailored to you: the moment you begin, the Loom writes a short opening scene for YOUR hero - your race, class, background and backstory woven into Lastlight - instead of a generic intro. Your very first screen is already yours.
- One objective, not a wall: the quest log now leads with a single Main Objective and tucks the side threads under an optional heading, so a new player sees where to go, not a pile of tasks.
- Led to your first craft: the mender plants the idea early, and when you come home from your first delve the things you carried out of the dark are named as makings - a charm to bind, a vial and a petal to brew - with a gentle nudge to learn the craft. The first thing you build is yours.
The living world, made legible
- Read the Houses at a glance: the rival-Houses panel now opens with one plain line that tells you the whole game - your deeds move them, and where you stand decides what the world opens or closes to you.
Reliability
- An attack always lands as an attack: a weapon whose name happened to begin with a crafting word could be mistaken for a crafting command and refuse your strike. Fixed - and we hardened the whole class of that bug, so a future item name can never hijack a swing.
2026-06-26 · Batch 36
Companions who can walk away, worlds you can hand to a friend, a seal duel, and async play-by-post
A wave about what makes a campaign truly yours - bonds with real stakes, the
ability to hand a friend the exact world you are in, and caster gear that
finally makes a spellcaster's build feel like a choice.
Companions & party
- Companions can be lost, not just leveled: every companion arc now reaches a crossroads - betray what one of them stands for and they do not sulk, they leave for good. A bond you can lose is a bond that means something.
- Play-by-post, on your own time: start an asynchronous table - solo at your own pace, or a co-op group where each player takes their turn whenever they can. 5e and PF2e alike.
Share what is yours
- Hand a friend your exact world: every campaign world is generated from a seed, so one link now drops a friend into the SAME world you are playing - same regions, same factions at war. Your story through it stays your own.
- Challenge a rival to a Seal Duel: put your sealed dice head-to-head with another player's - whose natural 20s, whose fumbles, on the same honest dice. The proof, made a contest.
Build identity & the living world
- Caster gear that picks a side: new spellcaster set bonuses and endgame uniques reward a chosen playstyle - a wizard's spell save DC, a druid's thorns, a bard's opening tempo - so your loot finally expresses your build.
- The enemy you made comes for you: wrong a House badly enough and it becomes your nemesis - the plot that schemes against you between sessions now targets the faction YOU drove to enmity, not a random rival. The world remembers exactly who you crossed.
- An honest mercy: roll a natural 1 in a desperate moment and the Loom can turn the disaster into a sliver of its Favor - the engine's own grace, never the AI's whim.
2026-06-26 · Batch 35
Foes close the distance, the reach feats answer - plus an honest funnel sweep
The positioning game got its other half. Melee foes now CLOSE the distance,
Polearm Master punishes them on the way in, Sentinel guards your companion,
and Lucky learned to turn a foe's hit aside. Then an audit of the new-player
funnel fixed three real conversion leaks - no new pages, just the ones that
already exist working harder.
Combat
- Foes close the gap: a melee bruiser you keep at range now steps INTO your reach to fight - the mirror of the caster kite that already shipped. Seeded and deterministic, behind a flag so it is byte-identical until switched on.
- Polearm Master, in full: the enter-reach opportunity attack - the last missing half of the feat - now fires when a foe steps into your reach with a glaive, halberd, pike, quarterstaff or spear in hand.
- Sentinel guards the pack: it still locks a fleeing foe in melee, and now strike your beast companion and a Sentinel hero answers with a reaction blow of its own.
- Lucky, on defence: spend a luck point to FORCE an attacker to reroll and keep the worse die - the panic button against a crit, alongside the reroll-your-own-roll you already had. Works on weapon AND unarmed strikes.
Getting started
- The builder path gets the warm welcome: heroes you build from scratch now land on the same guided opening + share-this-moment beat that the one-tap quick-start gives - the highest-intent path was quietly getting the least.
- The upgrade nudge, with room to decide: the trial upgrade card now reaches you a couple of turns before the wall, not one - an ask with agency converts better than a dead stop.
- A door for the healer: a one-tap "Warden" quick-start joins the Vanguard, Adept and Shadow, so the support/family fantasy has a place at the fastest entrance.
Under the hood
- The narration tells the truth: when Sentinel locks a foe or your polearm catches it on the way in, the Director is told what actually happened in the sealed engine - never the opposite (a faithfulness fix from the standing adversarial audit).
2026-06-26 · Batch 34
Feats that move the dice - Lucky, Sentinel, Polearm Master, War Caster, Inspiring Leader, Healer
The feats you pick at level-up stopped being flavour text. Lucky rerolls a
d20, Sentinel locks a fleeing foe in melee, Polearm Master adds a bonus
strike, War Caster's reaction can be a cantrip, Inspiring Leader and the
Healer feat carry their own kit. Each a real sealed die - nothing the AI gets
to decide.
Live now
- A feat-resource lane of its own: Lucky grants 3 luck points a long rest - say "use my luck" and the engine rerolls the d20 and keeps the better die, never wasting a point on a natural 20. Inspiring Leader's ten-minute oration wraps you and your allies in temporary HP (your level + Charisma). The Healer feat patches a wound for 1d6+4+level or stabilizes a dying creature. All three show on your sheet and as tappable Skill Book tiles.
- The reach feats, on the opportunity-attack engine: Sentinel turns your OA into a trap - hit a foe trying to kite away and its speed drops to 0, pinned in melee at your side. Polearm Master adds a bonus-action butt-end strike (1d4) with a glaive, halberd, pike, quarterstaff or spear. A War Caster's opportunity attack can be a cantrip - a Fire Bolt instead of a feeble jab - on top of the advantage it already grants to hold concentration.
- Documented and discoverable: every feat above has a Codex entry that tells you exactly what it does and the words to invoke it, and the tappable ones type the move for you.
Under the hood
- Built on what already shipped: the foe-kite, opportunity-attack and one-reaction-per-round systems were already live - these feats hook onto them rather than reinventing them, so the combat you know is unchanged until you take the feat.
- Determinism held: every reroll, butt-end and OA-cast draws from a separate seeded die stream, so a hero without the feat plays byte-for-byte identical to before. Off by default, on when you choose it.
2026-06-26 · Batch 33
Every subclass gets its signature move - and now you can see and tap them
Channel Divinity, Metamagic, Wild Magic, the ranger's marks, a paladin's
sworn vow, the feats you took - the moves that define your build now move
real numbers in the sealed engine, and every one is a tile you can tap in
the hotbar and Skill Book. No more guessing the magic words.
Live now
- Your subclass, made real: a Tempest cleric maximizes a thunderclap; a War cleric calls a Guided Strike to land a near-miss; a Grave cleric marks a foe for doubled damage; a Light cleric blinds an attacker or scours the room with dawnlight; a Lore bard cuts a foe's roll down with a word; a Wild Magic sorcerer bends fate with Tides of Chaos - and the chaos comes due on the next spell. Each one a real, sealed roll, not flavor text.
- Hunters and the sworn: a Monster Slayer's prey and a Horizon Walker's planar mark now stick to a foe across turns, and a Hunter punishes any wounded enemy for an extra die. A Vengeance paladin can swear a Vow of Enmity and strike the sworn foe with advantage until it falls.
- Reactions you can see coming: when a foe swings at you, the moves available right now appear as tappable chips - Warding Flare, Cutting Words, a Battle Master's Riposte, a duelist's Parry. One reaction per turn, exactly as 5e means it.
- Feats that move the math: War Caster holds your concentration through a hit, Alert puts you first, Savage Attacker rerolls a weak blow, Defensive Duelist turns a hit into a miss - alongside the Great Weapon Master and Sharpshooter power-attack trades. Your feats finally do something on the dice.
- Know your build at a glance: the character sheet opens with a YOUR BUILD card - class, subclass, the threads you've woven - and every signature move now has a tap-to-use tile that types the move for you. The Codex documents all of it and tells you the exact words to say.
Under the hood
- Determinism held, every time: each new move draws from the same seeded die stream in a fixed order, so a hero who never uses one plays byte-for-byte identical to before. The proof you can verify never changed.
- An adversarial audit, by hand: a fleet of skeptics combed the new combat code and caught two real bugs before you could - a multiclass that could refund a Channel Divinity use, and a way to stack too many reactions on one swing. Both closed, both smoke-locked.
2026-06-25 · Batch 32
Real multiclassing, signature builds, and a Skill Book you can actually read
Your hero can now branch into a second class as it levels - a true 5e multiclass,
with its own hit die, spell slots and kit - and the Skill Book and Threads panels
were rebuilt to show it all without the scroll wall.
Live now
- Branch your hero: from level 2, your next level-up can dedicate itself to a NEW class - Fighter into Wizard, Paladin into Sorcerer, and more. You gain that class's hit die, spell slots, and signature kit, and the Game Master plays both halves of you.
- Signature Builds: the quick-start and the full builder now open with a deck of classic multiclass paths - Sorcadin, Eldritch Gish, Hexblade Striker, Shadow Skirmisher and more - each telling you what to start as, what to branch into, and why the pair sings.
- A Skill Book you can read: spells sit in a dense grid grouped by level with a search box and a "ready now" filter, and a detail rail shows the full card - range, damage, upcast, woven threads - the moment you open it. Class features pack into one tidy grid per class.
- Weave from the spell: the Threads panel is spell-first now - tap a spell, see its threads as sockets, and weave a new one straight onto it. No more hunting through a catalog.
Under the hood
- Determinism held: a single-class hero is byte-for-byte identical to before - the multiclass math is a pure read, never an input to the sealed dice - so nothing about the proof you can verify changed.
2026-06-24 · Batch 31
Crafting that shows you what to make - and a satchel that shows you what to wear
The workshop and the satchel got a lot clearer. The Pattern Book leads with what
you can craft right now, tells you where to find what you are missing, and an
upgrade in your bags announces itself.
Live now
- Craft, don't just sell: the Pattern Book now leads with what you can make right now - a "ready to craft" count up top, the craftable recipes sorted first, and the live craft button lit while the locked ones recede into the background.
- Know what you need, and where: every missing material now names where it forages - "moonleaf - the Darkwood" - and you can tap it to drop a gather straight into your next move. New to all this? When nothing is ready, the book points you at your very first craft.
- Made to use, not just to sell: a craftable potion now shows what it does - "Restores 2d4+2 HP" - right alongside its price, and the day's House order tells you when you can simply weave it to fill the commission.
- Upgrades announce themselves: a drop in your satchel that beats what you are wearing now wears a green UPGRADE badge, so your bags read as a treasure hunt, not a pile to sell off.
Under the hood
- Built clean: every new line is a pure read of what you already carry - the sealed dice and the proof behind them are untouched - and the satchel's overlapping-button tangle is fixed.
2026-06-24 · Batch 30
The realm keeps turning while you are away - and coming back shows you what changed
Step away for a day and the world does not wait for you. Come back, and the
recap now tells you what the realm itself did - not only what you did - and
points you at the stories still waiting.
Live now
- The world moved while you were gone: when you return after time away, your recap now surfaces what changed in the realm itself - an omen kindled over a region, a House risen to power - so the living world is something you come back to discover, not just a backdrop you left behind.
- More than one thread to pull: the return card now shows the breadth of your open stories - naming a second thread still waiting alongside the first - so picking a campaign back up feels like choosing your next move among several, not following a single rail.
Under the hood
- Built clean: every new line is a pure, replay-safe read of what the engine already recorded - the sealed dice and the proof behind them are untouched, and the recap's cross-language proof vector stays byte-for-byte identical.
2026-06-22 · Batch 29
A four-theme depth wave - bigger boss fights, an endless endgame, a world that remembers, and the full build loop
Today went deep on the things that keep a table coming back: boss fights that
feel like set-pieces, an endgame with no ceiling, a world that records what you
did to it, and a build loop you can chase, share, and swap.
Live now
- Bosses fight like bosses: a marquee foe now shows its colours in the turn order - a crown, an "in its lair" tag, and a row of Legendary Resistance diamonds that tick down as it shrugs off your control, so you can see exactly when your lockdown will finally land. The chamber itself acts at the top of the round, called out plainly in the log.
- An endgame with no ceiling: past the final rank the climb keeps going - a visible Paragon Depth and its next-depth reward, plus a "Deepest Seal" record (your best Tier and Paragon ever sealed) to beat. The Court always names your next goal, so you never feel done.
- A world that remembers you fought back: the return card now leads with what the villain is about to do, you can move against the shadow to push their scheme back, and the realm's chronicle records your counter-blow - not just what the world did to you, but what you did to the world.
- The full build loop: a single Build Power number that moves when you get stronger, a shareable Build Code so you can hand your build to a friend, a synergy-discovery tracker, a "find the last piece" set chase, and named gear loadouts you can save and swap in one tap.
- Leave on a cliffhanger, return to the stakes: step away mid-story and come back to a parting hook keyed to what was about to happen - and the recap's "step back in" now drops you straight into your next move.
Under the hood
- Every climax is a set-piece: all 14 region apexes and all 28 Court Witnesses now fight in a living lair that escalates when they are bloodied - no more static rooms at the top of the ladder.
- The Codex caught up: new and tightened entries explain the Legendary Resistance track, lair actions versus legendary actions, and the endless Paragon Ascent, so every new on-screen signal is learnable.
- Built clean: every new surface is a pure, replay-safe read of what the engine already proves - the sealed dice and the proof behind them are untouched, and the whole wave passed its determinism and proof gates green.
2026-06-22 · Batch 28
Durable honours · the rewards now scale with the Court, so nothing re-stales
Today refined how the endgame rewards you - a redesign so the titles, the
collection, and the Gauntlet always read right no matter how big the Court
grows. Nothing pinned to a fixed number that drifts.
Live now
- The Collection Crown: a new auto-scaling honour for the fraction of the Court you have sealed - Half-Court Sworn at half, Keeper of Every Seal when every Witness is yours. It always reads right, no matter how the roster grows.
- A durable title ladder: the prestige ladder is now a fixed, evocative arc capped by Loomwright of the Whole - mastery of the entire Court, whatever its size.
- The Gauntlet pays off: a clean clear of the curated boss-rush - ten of the Court's harshest Witnesses and the Warden, back to back - now earns a Sigil premium plus the feat title Walker of the Gauntlet.
Under the hood
- Rewards are scope-relative, not count-pinned: Sigils scale by run depth, Seals and the Collection Crown by the live roster - so the endgame economy never re-stales as regions are added.
- Sync pass: the world-map endgame beacon now reads the live terminal region (it had drifted to one the campaign moved past), and the Witness roster (now 28) is consistent everywhere - the landing, the Codex, and the features.
2026-06-21 · Batch 27
The mega-wave - a wider world, deeper builds, and shared co-op decisions
The biggest single day yet. Forty-plus new foes across two new endgame regions, three subclasses with real combat payoffs and a paragon build board, the full six-set synergy suite, five living-world systems, and three new surfaces - the Ascendancy board, the Sealed Ladder, and the Party Council - all shipped behind the same determinism gate.
Live now
- A world-breadth blitz: 40+ new foes (14 plus 29 across two new endgame regions, the Tidewrack and Stormspire), four more Witnesses, six branching quest arcs, eight uniques, two synergy sets and a cross-set legendary - and full 180/180 telegraph coverage so every foe reads distinctly.
- The Loomwoven Ascendancy: a paragon board that opens past the level cap - spend the Ascendancy Points you earn felling Witnesses to weave permanent edges across three lanes, earned by play and never bought.
- The Gauntlet: a new endgame run for the worthy - a curated boss-rush of ten of the Court's harshest Witnesses and the Warden, back to back, every seat frayed, no respite, sealed into one shared Proof. It rides the same honest dice and felling path as a Testimony, just longer and harsher.
- Build-craft depth: three subclasses wired into the live exchange (Eldritch Knight, Veilstalker, Arcane Traditions), six castable cantrips with class fidelity, and your chosen feats surfaced to the Director.
- Combat as a puzzle: six tactical primitives wired live, signature per-phase boss tactics, scripted opener-build-climax combos for marquee bosses, and a bloodied phase-shift moment for every boss and elite.
- The full set-synergy suite: six sets with real identity - Unwoven glass-cannon crit range, Warden’s Aegis thorns, Bonechoir undead-hunter, Dragonsworn boss-slayer, Veilthief elite-hunter - legible on the gear card, with Witness-pair Resonance rewarding a fully sealed region.
- The Sealed Ladder + the Party Council: a public leaderboard of every verified Loom Seal ranked by natural 20s (in-game and shareable), and a co-op Council where the whole table votes on the fork and the host enacts the party’s will.
- A living, reactive world: five living-world systems - factions, NPC life-arcs, omens, paragon powers, a weekly ladder - plus NPCs that recall a specific past deed, not just that they met you.
- Honest footing in combat: the Director now narrates the ground you stand in (slick, frost, vapor) and which foes are too stunned, paralyzed, or unconscious to strike back when you move past them.
Under the hood
- Affix god-rolls: a rare seeded chance to perfect a roll above its normal ceiling - the build-defining loot chase.
- The whole bestiary in the Codex, every foe now searchable, and mobile HUD + drawer fixes straight from real phone screenshots.
- Determinism held throughout: new content is additive or grounding-only and proven byte-identical where it must be; a stale endgame smoke was brought back to the live 28-Witness roster.
2026-06-20 · Batch 26
Forge your gear, fray the Court - the Loom Forge, set synergies, two new regions, and the true ending
Crafting got an endgame and the Court got teeth. The Loom Forge can now reforge, transmute and set-bias your gear; gear sets unlock playstyle bonuses; two whole new regions opened; and the Loom Seal can finally be made whole.
Live now
- The Loom Forge, fully: surgical per-affix reforging and sealing, Transmute to reroll an item’s base within its slot, and Set-forging that biases a reforge toward a themed set - all at the bench in the Satchel. Quality and affixes only, never base power.
- Set synergy: gear sets unlock playstyle-defining bonuses (the Dawnward three-piece becomes a real undead specialist), and the crueller the docket modifier, the bigger the prestige premium it pays.
- Two whole new regions: the Hollowdeep, a mid-ladder region with a full roster and painted portraits, and the Unwoven Verge, a tier-12 frontier with endgame integration - the world grew to eleven regions and twenty-two Witnesses.
- The Sealhouse fights back: Witness and region-apex lair set-pieces that auto-fire their surface or status each round, and the tactic-changing Court modifiers (the Withering Seat joined the set), each with a reward carrot beside its warning.
- The true ending: make the Loom Seal whole - the completionist apex of the whole climb.
- Quality of life: a dev console to test everything, the Wardrobe cosmetics hub on B, fail-forward onboarding, and level-ups that land like a moment.
Under the hood
- A balance fix restored the difficulty treadmill - the curve had quietly inverted across four tiers.
- Revenue plumbing: a shared seal’s ?ref= now threads to a measurable dollar, and the abandoned-checkout win-back email armed.
- A mega-audit closed real lair and forge bugs - a dead lair boss could fire an action; per-affix forging is now fully serialized against overspend.
2026-06-19 · Batch 25
The Sealhouse is born - the endgame, plus a wave of class and content depth
The endgame took shape across three phases: a Court that opens at the true campaign end, vows with real stakes, a Forge for your signet, and a docket you craft yourself - alongside new immune elites, mounted combat, environmental hazards, and a Skill Book made legible.
Live now
- The Sealhouse endgame, Phases 1-3: it opens at the true campaign end, with region-bound Witnesses around the Loom Seal on a Woven Thread map. Swear your own Clauses (vows with honored or broken stakes), craft your docket with the Reading Stone, spend the Ascendant Token, and chase the Archetype and the quarterly Seasonal Seal with an earnable title.
- The Loom Forge (Court Signet): Temper, Rebind, and Seal the weave of your signet - cosmetic identity, never power. The prestige currency became Sigils.
- New elites and content: the Gloomweaver (necrotic-immune), the Hoarfrost Seer (cold-immune), the Cinder Archon (fire-immune), the Ash Herald as a multi-phase lair, the Umbral Reach tier-8 frontier, and Pen the Bard, a third companion.
- More combat truth: environmental hazards that bite, mounted combat by 5e RAW, multi-phase boss lairs that escalate once bloodied, co-op ally Stabilize at 0 HP, the helpless auto-crit gap closed, plus Draconic Bloodline Elemental Affinity, Empowered Spell, and Metamagic spend from the Font of Magic.
- A living world that moves: Houses that rise and wane on their own, surfaced on a "while you were away" panel that spawns its own player hooks.
- The Skill Book made legible: zero duplicate skills, a loadout-first arsenal, and "how Threads work" plus "how the Sealhouse works" explainers.
Under the hood
- Ten verified Codex findings fixed across combat, spell, money, and co-op paths.
- An evidence-based smoke triage de-staled the suite - stale tests pinned to retired SKUs and old enums, brought back to green.
2026-06-18 · Batch 24
Every class plays like itself - class fidelity, combat depth wired live, and a world with consequence
A 130-commit day. All twelve classes and their subclasses now fight like themselves, the martial action economy came alive in the UI, foes started fighting smart, the world began remembering your deeds across epochs, and shared seals turned into real visual proof.
Live now
- All twelve classes, played right: caster parity for Sorcerer, Druid, Bard, Wizard, Cleric and Warlock; Ranger Hunter, Paladin auras and Divine Smite, Battle Master and Champion, Monk Stunning Strike and Open Hand, Barbarian Rage as a real resource with Brutal Critical and Relentless Rage, and the full Rogue kit (Sneak Attack, Expertise, Uncanny Dodge, Evasion, Assassinate, Cunning Action) - all on a new PC saving-throw resolver.
- Combat depth made real: a martial action menu so a fighter is never "only a dagger," a resource HUD (Rage, superiority dice, Sneak Attack), tap-to-trigger reaction chips for the reactions you actually have, Champion crits and Battle Master maneuvers in the resolver, and a "what unlocks as you level" preview.
- Foes that fight smart: a threat model that picks targets, morale (flee or surrender at low HP), lair actions at initiative 20, forced movement into hazards, foe-laid surfaces and high ground, charmed and exhaustion by RAW, and every foe in a group taking its turn.
- A world with consequence: a durable epoch chronicle you watch accumulate, major deeds that tilt the realm’s feuds, House standing that colours how recurring NPCs treat you, open feuds that shutter a House’s stock, NPC lives that walk a continuity arc, and region-falls that mark the realm’s march.
- Proof you can share: per-seal Open Graph image cards so a shared seal unfurls as visual proof, a dice-cam single-roll page, an embeddable live seal badge, a public replay viewer with a highlight reel, and the fair-dice trust page.
Under the hood
- The conversion path sharpened: the trial-complete card leads with the build that keeps growing, the triumph offer names the tactic that won, and returning-player checkout is attributed.
- Playtest fixes: a P0 where a spent reaction was never registered (a turn could fail), seal "see the proof" links now carry the real chain id, a claimed account is never treated as a guest, and non-casters get an honest spell refusal.
2026-06-17 · Batch 23
The Sealhouse · the endgame is live, playable, and glorious
Beat the campaign and the Veil pulls back - to the Sealhouse, the Court
beneath the world. Twenty-eight Witnesses sit bound around the Loom Seal, and the
whole climb now ends before the Warden of the Final Thread. You sign a
Testimony, confront its Witnesses in order, and every kill is sealed into the
chain forever - no save-scumming, no taking it back. This batch made the
endgame fully playable, gave it a final boss, and put it on the map and the
front page.
Live now
- The Court is playable: click any Witness in the ring for its dossier, then CONFRONT to drop straight into the real, seeded fight - the engine stages the exact boss server-side, no guesswork.
- The Warden of the Final Thread: a new authored apex boss - the Loom Seal itself, risen as a guardian woven of cooling gold thread. Every worthy Testimony ends before it. Fell it, and the Testimony is sealed.
- The Verdict, sealed forever: the moment a Witness falls, the Court flashes the seal and the beat lands - "a Verdict enters the chain, and cannot be unwritten." It is a real, publicly provable Proof.
- The tier ladder + the Fraying: as your rank climbs, your dockets climb with it - and at the apex the Witnesses Fray, one harsher seat at a time. Provable difficulty, never pay-to-win.
- Sealed Threads to spend: the prestige you earn now buys cosmetic Court ring skins and worn titles, plus two challenge tokens - a Fray-Key (Fray one more seat) and a Witness-Pin (call a Witness of your choosing into the docket). Never power, only pride and choice.
- The Court reads at a glance: a standing-Testimony banner shows who you face and how far through the docket you are, the ring lights your path, and a pressure band tracks the mounting weight of the run.
- Signposted everywhere: a new endgame beacon on the world map shows every player the summit and how far off it is, and a dedicated Sealhouse section now headlines the landing page.
Under the hood
- Two real bugs the verification pass caught + fixed: the Verdict used to seal before the turn committed (an aborted turn could record a phantom kill) - now it seals only after the turn lands; and the whole tier/apex/Fraying ladder was unreachable in live play because signing defaulted to tier 1 - the offer now draws at your rank's cap, so the ladder actually climbs.
- Determinism held throughout: the apex boss, every mutation, and both challenge tokens are sealed into the Proof BEFORE its hash is taken, so a shared Proof always reproduces the exact same fight. Spend balances re-derive from the event chain; HP math moved to exact integers.
- Sixteen endgame smoke suites, all green - the Court loop, the Confront path, the apex capstone, the Fraying ladder, the Thread spend rail, and the two consumables, each driven end to end.
2026-06-15 · Batch 22
Spell-Truth wave · the spells now do exactly what the rules say
We audited every spell against its own tooltip - and fixed the ones that
were bluffing. Bless, Bane, Banishment and both Invisibilities now do
EXACTLY what the rulebook says, with every die rolled by the seeded engine
where the AI cannot fudge the result. The whole Codex is illustrated, and a
data fix cleaned up five boss save blocks.
Live now
- Bless is real: +1d4 on your attack rolls AND your saving throws, rolled straight into the dice on the engine while you concentrate. A near-miss can land; a lingering condition can shake loose sooner. It does what the rules say, not what a chatbot would guess.
- Bane is real: a foe that fails its Charisma save takes -1d4 on its attack rolls for the duration, dragging every swing down while you hold concentration.
- Banishment is real: a banished foe is gone - no turn, no counter-attack. You take it out of the fight until your concentration ends. The engine simply does not let it act.
- Greater Invisibility is real: you attack with advantage and foes strike at you with disadvantage, for as long as you concentrate - the math flips cleanly, both directions.
- Invisibility is real - and honest: it hides you the same way, but ends the instant you attack or cast a spell, exactly as written. The unseen blow that breaks it still lands with advantage first.
- The Codex is fully illustrated: all 208 entries now carry their own painted icon - every rule, condition, class, system and spell, open to everyone.
- Save-block integrity: five boss statblocks carried inconsistent saving-throw math (two different proficiency bonuses inside one creature). Corrected so every save derives from a single proficiency bonus, the way a real statblock works.
Under the hood
- Seven new spell-truth smokes, all green: Bless/Bane on attack rolls, Bless/Bane on saving throws, Bane landing through the real cast path, Banishment denying the counter, Greater Invisibility moving both dice, and base Invisibility ending on attack-or-cast while Greater survives - each driven end to end through the seeded engine.
- The +1d4 and -1d4 draw from the same seeded die stream as every other roll, in a fixed order - so a turn with no Bless or Bane is byte-for-byte identical to before. Determinism is law.
2026-06-13 · Batch 21
Cosmetics that stay on · and the deterministic engine, published in the open
The aura you equip is still there when you come back - and the core
that rolls every die is now public: v3.1.1 on npm, PyPI and crates.io,
five hand-checked security rounds deep.
Live now
- Your look, kept: auras, frames, and your Founder marks now persist across every reload and exit - no more silently falling off. Equipping one is a quiet confirmation, not a wall of repeated text in the log.
- The public engine reaches v3.1.1: the deterministic core that makes "the AI can't fudge the dice" literally true reached v3.1.1 - a hardened new release of the already-public engine on npm, PyPI and crates.io, one Rust core byte-identical across TypeScript, Python and Rust, for anyone to read and verify.
Under the hood
- Five release-audit rounds closed by hand on the engine before it shipped, plus a fresh security pass on the app: reuse pools serve only curated text, every paid path is auth-gated, and a prototype-pollution finding from the public code scanner is closed.
2026-06-12 · Batch 20
The dice you can see · distance in combat, the first dungeon, and a chip that IS the roll
The tagline goes literal. A suggested action can now carry a real
skill and a real die - tap it and the SERVER rolls before a word is
written, your sheet modifier printed right on the chip. Plus combat
learns distance, the first true dungeon opens under the fens, and the
Loom shows you the memories it is actually using.
Live now
- The chip is the die: when an option is a real attempt with stakes, the Director tags it - [Persuasion · tricky] - and the chip face shows YOUR actual modifier, a proficiency mark, and a risk read (routine / tricky / dire). Tap it and the server rolls that exact check at that difficulty BEFORE the scene is narrated, then binds the tale to the result. The band is locked the moment it is offered; the Loom cannot move the goalposts after you commit.
- The Loom remembers - and shows its work: when a past memory actually shapes a turn, a quiet line appears beneath the scene citing the real record it drew on. Not a vague "she recognizes you" - the exact thing the world remembered, pulled from the sealed log.
- Combat gets distance: foes now open at a real range - a bowman starts across the field, a brute starts in your face. Closing, firing point-blank, and being caught in melee with a bow all read on the dice the way 5e means them to, and the band shows on the roll line.
- The First Delve - the Sunken Loomworks: the first true multi-room dungeon. Four rooms under the Mistmoor fens - the Drowned Stair, the Weaving Gallery, the Master Loom, and the Pattern Vault - each cleared only when every foe is truly down. Break off and the room holds against you; press the attack or withdraw and return - your progress keeps. One run to the vault per hero.
- Mint your proof: after a boss falls or you level, the Loom offers a one-tap public Seal of that moment - the dice, provably un-fudged, for anyone to verify.
Under the hood
- The Loom Engine reached v3.1.1 - AST v2, the 5e Action Pack, forge-proof saves, and the delve-mini proof - published to npm, PyPI and crates.io, with five release-audit rounds (4-8) closed by hand and every version surface test-locked.
- Seven security findings closed (audit round 4): reuse pools never bank live model text, zero-drop combat turns can never bypass a trial's budget, an unauthenticated state-delete route was locked behind auth, the public Seal page got rate-limiting and best-effort counting, and an entitlement gate now fails closed.
2026-06-12 · Batch 19
The Skills Bar · an MMORPG hotbar, and the crafting endgame
Press 1 and the fireball flies. LoomMaster grows a true MMORPG
hotbar - your spells, abilities and potions as living slots with
rich skill cards on hover - plus the crafting endgame: a volatile
needle for gamblers, a harvest window on every kill, and your name
on your masterworks.
Live now
- The hotbar (keys 1-9): a bottom-center skills bar built from what your character can actually DO - cantrips, leveled spells with live slot counts, class abilities with uses, and your potions with live counts. Hover any slot for the full skill card: what it does, what it costs, how it scales, and the words it speaks. Press its number and it happens - one foe and the bolt flies instantly; several foes and the composer fills with "at " so one word picks the right skull. Spent slots dim honestly. (The old 1-4 action-chip keys moved here - chips are tap-only now.)
- The Fraying Needle: a master-taught tool for gamblers - apply it to a finished good and 70% of the time the weave rerolls fresh (a true second chance at Loom-touched), 20% it slackens a tier, 10% the piece unravels to dust in your hands. Resolved on the engine inside one commit: closing the browser cannot undo a bad roll.
- Essence-Stripping: every kill leaves a FADING LATTICE - until a new fight starts, strip it once for themed raw materials. Bone carries bone, beasts carry pelt, raiders carry ore. The careful keep what the dead held.
- A masterwork bears its maker: roll a Loom-touched craft and the work carries your name in the telling - and the bench now keeps your masterworks ledger.
2026-06-11 · Batch 18
The Pattern Book · a real crafting economy, run by the Houses
Crafting stops being a text list and becomes a system. Press G and the
Pattern Book opens - four disciplines, each run by one of the Houses,
with patterns to learn, weaves to roll, factors to sell to, and a daily
work order with a premium on it. Press I and the Satchel opens - your
goods, your coin, your weave frames, all in one place.
Live now
- The Pattern Book (G): every recipe is now a pattern in a real book - known patterns show their materials against your bags, their cost, today's sell price, and the margin; unlearned ones sit as silhouettes naming the House that holds them. Four disciplines - smithing under Ash & Nail, herbcraft under Underroot, provisioning under Bread & Salt, essence-work under Emberwake - each with five earned ranks, First Knot to Loomwright.
- Masters teach the worthy: a House that keeps you in thread teaches its tier-2 patterns; its master pattern opens only to those held at the Loom. Eleven learnable patterns shipped, four of them master-tier.
- Weave quality: an eligible craft rolls its weave on the engine's dice - loose, true, tight, or the rare Loom-touched - and the weave moves the price, from 70% of true up to double. Higher rank, better odds. Veil-dust can rebind a finished weave for another roll.
- Sell at a living price: House factors buy your goods at a price that breathes - the day's market drift, your standing with the discipline's House, and the feud stance all move the quote, the same legs merchants already use to charge you.
- The slain carry their secrets: themed foes can drop tier-2 patterns - bone and shade carry essence-work and herbcraft, beasts feed the larder, raiders carry smith-work, constructs keep forge and lantern work. Rare, seeded, and honest.
- Daily House commissions: each day one House posts a work order - so many units of a finished good at a posted premium, paid at the honest true-weave rate (your masterworks stay in the bag for the factor's counter, where the full quality price lives). Fill it once per day; commissions pay coin, not regard. And the ledger remembers the habit: consecutive filled days earn a standing bonus - +15% at three days, +30% at seven, +50% at fourteen, +100% at thirty. Miss a single day and the streak only freezes (one grace day per rolling week); it takes two missed days in a row to snap the thread.
- The weave is in the bottle: a crafted healing draught now carries its weave all the way to your lips - a loose-woven one heals at three-quarters strength, tight-woven deeper, and a Loom-touched draught nearly doubles the knitting - on EVERY brew path: the moonleaf steep, the bone-set poultice (both its draughts share one weave), and the essence still all roll now. Young hands hold what they can: below level five a fine weave heals only as deep as your level allows - the rest slips back into the Veil. An unnamed drink spends your cheapest weave and keeps the fine ones for the factor; name the weave to drink exactly that one.
- Crystallization: break a finished good back down into Veil-dust at the bench - the weave returns to what it was before it was anything. Finer weaves and higher tiers give more dust back (a Loom-touched master-piece returns twelve measures; plain tier-1 work is too plain to hold any), and the freed dust powers your next rebind. Only woven goods unbind - loot and quest pieces never enter the loop.
- Batch weaving: when your bags cover more than one run, the pattern card offers WEAVE x5 and WEAVE ALL - real turns, queued one at a time, each with its own weave roll and its own ledger entry. A progress pill tracks the work with CANCEL one tap away, and the queue stops honestly the moment anything refuses.
- The Satchel (I): the inventory grows up - item art, weave frames on tight and Loom-touched goods, your coin up top, consumables with USE and goods with SELL one click away.
Under the hood
- Closed by external audit: a pre-2.0 inventory row format could be counted by the new crafting gates but never consumed - sellable forever. The first crafting turn now migrates those rows on the same atomic commit, and the engine shouts if a debit ever exceeds a balance again.
- Every learn, craft, rebind, sale, drop, and commission rides the same tamper-evident event chain as combat and quests - replayable from the tape, deterministic by seed, enforced by the engine and never by the narrator.
2026-06-11 · Batch 17
The World That Breathes · spells, tactics, companions, a moving world
The deepest single update LoomMaster has shipped. Casters get a real
spell economy, fights get a real battlefield, the world starts moving
between your visits, and two companions can earn a place at your side.
Plus the House ledger pays off at both extremes - inner-circle work at
the top, and one hard door back for the fallen.
Live now
- Leveled spellcasting: fifteen new spells across levels 2-5 plus three rituals, run on a server-enforced slot economy. Concentration is real - a new cast drops the old spell, damage forces the save, and when concentration ends its effects truly end with it. Upcasting scales by the book.
- Area spells hit the field: a Fireball resolves against every foe in the blast - each rolls its own save, each takes its own damage, dead foes are skipped, and the engine owns every die.
- Tactical combat: distance matters. Close in, fall back, dash, disengage - the engine tracks the range bands. Leaving melee provokes a real opportunity attack in both 5e and PF2e, reactions spend from a real per-round budget, and a paralyzed or stunned foe genuinely cannot answer your blade.
- The world moves between visits: once per day, per household, the world ticks - merchant prices drift, House feuds sharpen and cool, fresh rumours circulate, and each night themes what hunts in each wild (a wolf-moon night fields wolves; a restless-dead night fields bone). Come back tomorrow to a different town.
- Feuds read your allegiances: in a hot feud, a House's merchants weigh where you stand with their rival - carry the enemy's favor and they quote you harder; be the enemy of their enemy and they warm.
- Companions: earn the trust of Kessa Reed, the weary old soldier, or Pip Brightlet, the runaway apprentice mage, and one will travel at your side - lending real in-encounter aid and opening a personal three-beat story arc with an earned payoff at its end. One companion per household; the bond is yours to keep or lose.
- The House ledger pays off at the extremes: a House that holds you at the Loom offers inner-circle work no stranger is asked; a House that has cut you from the cloth names ONE hard, humbling redemption door - walking it makes the House answer, recorded on the same chain as everything else.
- What hunts tonight: the first loop now hands off into open play with a one-time orientation beat, casters see their slots and concentration live in the side panel, and the trial wall leads with the FREE unlock (resend your verification email in-game) when verification is all that is pending.
Fixed
- Spell-slot integrity: an external code audit found three ways a storage hiccup or a racing turn could refund or skip a spent slot; all three now fail toward the slot staying spent - never toward a free cast.
- One companion per household, enforced everywhere: the projection itself now guarantees a household can never rebuild into two active companions.
- Catalog quests formalize correctly: House tier-quests, redemption doors, and NPC bond quests were silently rejected by the quest validator in live play; they now seed into the quest catalog at boot, which also un-blocks the companion warm-bond recruit path.
- Conditions die with their spell: a Hold Person whose concentration breaks now releases its target on the same beat - and a foe's conditions never bleed into the next encounter.
- Movement reads intent, not keywords: "I rush to grab the lever" no longer moves you toward the enemy - closing verbs only count when they aim at a foe.
2026-06-07 · Batch 16
Houses of Lastlight · the world keeps your ledger
The world starts keeping score on you. Six civic Houses of Lastlight now
remember your deeds, an in-game Codex tells you exactly where you stand, and
the path through a session got clearer - a progression rail, a real travel
menu, and per-quest objectives. Plus the fixes that make a fight end
cleanly and the Thai pricing players asked for.
Live now
- The Living Journal: a new in-play Journal keeps a server-authoritative record of everything the Loom has seen you do - your standing with the six Houses, the deeds it recorded, the quests you carry, and the regions you have reached. It is read straight off the same honest event chain as the dice, so nothing in it is fabricated and nothing can be quietly rewritten.
- Houses of Lastlight: six civic Houses - lantern-keepers, smiths, archivists, gate scouts, kitchens, and gardeners - keep their own ledger on your character across five standing tiers. Your DEEDS move it (the Director records a fixed-weight outcome; it never picks a raw number), and standing colours how each House's people meet you. Server-authoritative and event-sourced on the same HMAC chain as the dice.
- Zero-sum rivalry: the Houses are rivals, so winning one quietly cools its enemies - you cannot be a hero to all six at once. Helping a House automatically (and fractionally) lowers its rivals in the same beat, so faction politics has real cost.
- In-game Codex - Houses tab: a new reference in the play view tells you who each House is, what wins and loses their regard, the five tiers, and - for Houses you have met - exactly where you currently stand.
- Per-quest objectives: the Director can set explicit, event-sourced objectives on a quest, so a questline shows real checklists instead of a vague nudge.
- YOUR PATH progression rail: a right-side rail shows your active quests and your position in the chain, so a long session always has a visible thread to pull.
- "Ways onward" travel menu: the scene panel now offers real destinations drawn from the region-unlock graph - no guessing where you can go next.
- PromptPay for Thai players: switch the site to Thai and the LoomMaster prices show in baht over PromptPay, converted at a live exchange rate from the same USD prices - the long-requested local rail.
Fixed
- Encounter variety (5e): a multi-foe pack could come out all-identical because the live foe-picker never used the recent-foe filter it already supported; it now avoids repeating the same foe within a pack. The first-loop balance stays measurably survivable (the automated balance check still passes) - this is a variety fix, not a difficulty change.
- Security + legal hardening: a triple-check of the public surfaces removed a leaked internal credential and a developer file path, unified the registered business name across all Thai legal pages, and de-staled the Thai PromptPay price labels so a slow exchange-rate fetch can never show an old number.
- Stuck PF2e combat: the Director never ended the player's turn or ran the foe's turn in some encounters, leaving fights frozen (and the "fighting an invisible skeleton" report). The turn cycle now advances correctly, and the fix was fed into the 5e Director prompt too.
- Character roster cap: a stale per-account PF2e sheet cap surfaced a spurious "sheet_cap_reached" on quick-start; raised to match the sibling character store so new heroes forge cleanly.
- Turn-state isolation: a PF2e turn-owner value could leak across characters in the state panel; it is now gated to the active character only.
2026-06 · Batch 15
Loom Engine v2.3.0 · PUBLISHED + AUDITED
The deterministic core LoomMaster runs on is now published source-available - and
it runs byte-identically across three languages. One Rust core, compiled to
WebAssembly, native Python (PyO3), and a C-ABI, so the same seed produces a
byte-identical result in TypeScript, Python, and Rust. The same engine that
tells you "the AI cannot fudge a roll" is now something you can read, run, and
replay yourself.
Live now
- The engine is source-available: the Loom Engine deterministic core is published -
loom-engine on npm, loom-engine-rpg on PyPI, and loom_math / loom_combat / loom_events on crates.io. License BUSL-1.1, converting to Apache-2.0 in 2030.
- Byte-identical across three languages: one Rust core, compiled to WebAssembly, native Python via PyO3, and a C-ABI - so the same seed yields a byte-identical result whether the caller is TypeScript, Python, or Rust. Cross-language parity is what makes replay and anti-cheat actually true: the engine owns the dice, the AI only narrates.
- Generic primitives only: the published core is the reusable math - grid-free range bands, the reaction economy (5e action economy), the 5e and PF2e rules adapters, an HMAC-SHA-256 event chain, and the seeded PRNG plus integer math. LoomMaster's own business logic stays private; the honest core is shared.
External audit
- The published core passed an external security and determinism audit and ships with 4,131 tests green - the same cross-language parity LoomMaster's "engine is truth" contract has always claimed, now proven outside this repo and reproducible by anyone.
2026-06-03 · Batch 14
POLISH + HARDENING
The Polish + Hardening milestone - the table feels finished. Session recap,
a live spell-slot tracker, deeper combat,
and a mobile pass across every surface all ship together - then a triple-AI
adversarial code audit (ChatGPT, Gemini, Codex) sweeps the seams and every
confirmed finding is fixed. All live.
Live now
- Session recap: rejoin a campaign and the Director opens with a tight "previously on" - where you are, who is hurt, what is owed, what the open quest wants next - rebuilt from the event chain, not a guess.
- Spell-slot tracker: a live per-character slot grid on the play surface - slots tick down as you cast, refill on the right rest, and survive a reload. Prepared and spontaneous casters both read correctly.
- Deeper combat: richer status interplay, cleaner crit and critical-specialization narration, and tighter turn pacing on the engine tier - the Director narrates, the engine still rules.
- Mobile polish, everywhere: a full responsive pass across landing, pricing, character, play, roster, and the gallery - tap targets, safe-area insets, and the install prompt all behave on a phone.
Triple-AI adversarial audit
- The whole surface went through a three-model adversarial code audit - ChatGPT, Gemini, and Codex each tried to break the engine-is-truth contract, the money and isolation seams, and the new recap / slot / dashboard paths from a different angle.
- Every confirmed finding was fixed and pinned with a regression smoke that asserts the OUTCOME and proves the old behavior would have failed. Disagreements between the models were adjudicated against the rules text, not waved through. The suite is green.
2026-06-02 · Batch 13
REMASTER + OPEN WORLD (WAVES 11-20)
The Remaster + Open World milestone - Waves 11-20, all live. The solo
Loom widens into a shared, living world with the full PF2e Remaster, async
play-by-post, custom homebrew, campaign sharing with a live spectator view, a
rules-aware Director, a living shared world, an optional tactical grid,
and opt-in co-op party multiplayer (larger parties, guilds, regions,
world events, and the shared Director-turn broadcast). Every wave was
adversarially audited, polished, and gated before it landed - then a final
cross-wave audit swept the seams.
Live now
- PF2e Remaster, in full: the complete Remaster conversion across all 12 classes, on the level-scaling proficiency engine.
- Async play-by-post: a persistent turn queue for party play over hours or days, with a nudge when it is your turn; household-scoped and crash-reconciled.
- Custom homebrew: your own monsters, spells, and items as first-class catalog entries, scoped to your campaign, validated, and never merged into the global bestiary.
- Campaign sharing + spectator: a revocable public link to a campaign log, with a read-only live spectator view.
- Rules-aware Director: ask a rules question in chat and get a cited answer inline.
- Optional tactical grid: a VTT-grade battle grid - tokens, templates, terrain, line-of-sight - with theatre-of-mind still the default.
- Living shared world: factions and reputation that persist and span campaigns.
- Co-op party multiplayer (opt-in): larger parties, guilds, shared regions, and world events, plus the shared Director-turn broadcast - on by choice, behind an opt-in flag.
Hardening
- Every wave was built, adversarially audited, polished, and gated against the full smoke suite (200+ checks, all green) before shipping - then a final cross-wave interaction audit swept the seams between waves and the confirmed findings were fixed.
2026-06-01 · Batch 12
Wave 10 · FOUNDATION MILESTONE LIVE
The Foundation milestone closes out - Wave 10 lands and all ten
foundation waves are live: solo D&D 5e and Pathfinder 2e on one engine the
AI cannot fudge, procedural worlds, party play, and guided onboarding. Plus a deep
hardening pass - five adversarial audit rounds across combat, economy, rules
integrity, and persistence - and PF2e proficiency that now scales by level.
Launch
- Foundation milestone live: the marketing surface, build log, and founder pricing go live (EN / TH / RU). The $29.99/mo subscription is open; the founder Mirror Shard ($249 one-time = the web tier for life) is open to the first 200; BYO-AI over MCP is $49.99 one-time.
Hardening - combat & death
- The Director's context byte-trim no longer drops HP / AC / Dying / conditions on a loaded turn - combat-critical state is joined first and always survives the cut.
- Dead foes are never targeted; kill rewards never double-grant; a softcore-respawned PF2e PC no longer dies instantly on its next knockdown (the authoritative dying store is cleared on revive).
- PF2e recovery-check DC no longer double-counts Wounded (Core p.459: DC is 10 + dying only).
Hardening - economy & persistence
- The Loom's Regard altar can no longer be replay-farmed - the +AC / +damage boon is gated on a fresh currency consume, not a deduped retry.
- Disaster-recovery rebuild no longer double-applies the xp, faction-standing, or trade-flow accumulators - a rebuild re-derives identical state.
- Loot no longer drops the same guaranteed item twice when a table's count exceeds its distinct entries.
PF2e rules fidelity
- Proficiency scales by level: attack, saves, Perception, and spell DC now rise with class level (sourced from the official SRD / Archives of Nethys) instead of being frozen at the level-1 rank. A high-level hero hits, defends, and casts at the rank the rules intend - e.g. a L20 wizard's spell DC is legendary, not trained.
- Backgrounds grant choose-one-of-the-pair + a free boost (was two fixed boosts); ancestry flaws stay removed (Remaster); skill checks key the correct ability; incremental level-up no longer retro-inflates HP.
- 5e sheet: half-plate reads as medium armor (15 + capped DEX), not full plate.
Smoke coverage
- Suite now 140+ semantic smokes, all green. 11 new regression smokes across the round 2-5 fixes - each asserts the OUTCOME (the combat marker survives the trim, the replayed offering does not move Regard, the rebuild does not double-apply, ranks scale by level) and proves the old behavior would have failed.
- A 20-prompt Codex readiness audit suite hammers the four core promises plus the money and isolation surfaces - the gate the Foundation milestone had to clear before it went live.
2026-05-29 · Batch 11
Polish · gallery + variety
Public achievements gallery wired end-to-end. Encounter variety pass:
tier weights + 10-minute recent-monster cooldown so the same beast
cannot stomp the next two scenes. Changelog brought current.
Shipped
- Public achievements gallery:
/loommaster/achievements.html - the full 39-entry catalog grouped by Combat / Level / Exploration / Class / Combo / Catalog / Hidden, with lore hooks per entry. Unauth viewers see lock state '?'; signed-in viewers see green-bordered earned cards + earned dates joined from the cross-PC /api/v1/loommaster/achievements/my rollup. Hidden entries stay '???' grey-out until earned. Filter chips: All / Earned / Locked / Hidden.
- New endpoints:
GET /api/v1/loommaster/achievements/catalog (no auth - public-safe catalog, hidden stripped), and GET /api/v1/loommaster/achievements/my (auth - per-user earned rollup across all PCs). Public catalog has a 5-minute CDN cache; /my is no-store, private.
- Biome encounter variety pass: the random-encounter helper now respects tier weights (common 5x, uncommon 2x, rare 1x) and a 10-minute recent-encounter cache per character. Same beast cannot recur within 10 minutes; weighted pick leans on level-appropriate commons. Fall-back to uniform when all candidates are cached out.
- Achievement lore hooks: every catalog entry now ships a short Loom-flavored hook ("The Loom remembers every drop...") rendered on the gallery. Spoiler-protected: hidden entries' hooks are stripped from public + unauth responses until earned.
Smoke coverage
- New smoke
smoke_pf2e_biome_variety.py: weight skew (commons appear more than rares), cooldown blocks repeat within 10 minutes, fallback to uniform when every monster is cached out.
- Existing
smoke_pf2e_achievements.py (16 tests) + smoke_pf2e_bestiary_suggest.py (4 tests) still green after the catalog projection added lore_hook.
2026-05-29 · Batch 10
Round 24 P1 · Wave 8 · Director intelligence
Director intelligence pass x3, multiplayer parties + session resume,
encounter sharing, Foundry import roundtrip, PWA push notifications,
spellbook persistence fix.
Shipped
- Director intelligence x3: Wave-aware bestiary defaults, level-aligned spell suggestions for endgame casters, level-band magic-item awareness for quest rewards. The LLM now picks the right tier of foe / spell / item without prompting.
- Multiplayer parties + session resume: a host can invite up to 3 PCs into a shared party; resume-on-rejoin preserves init order, conditions, hero points, and quest state. WebSocket fan-out per party room.
- Encounter sharing: a host can export a current encounter as a deep-link
?enc=... URL; the recipient opens it on their own play surface with the same foes + biome.
- Foundry VTT import: reverse direction of the existing Foundry export. Drop a Foundry character JSON onto the import page; we walk the actor sheet, reconstruct an L1-LX PF2e sheet, and persist it as a new mirror PC.
- PWA push notifications: opt-in browser push for party invites + turn-ready pings. Service worker subscribes to the new push channel; backend dispatches via web-push.
- Spellbook persistence fix: the spellbook tab now correctly retains added spells across page reload. Previously the per-character list was clobbered by an empty default on the first sheet load.
Marketing trio
- Landing nav + pricing FAQ + onboarding tutorial all refreshed to call out multiplayer parties + Foundry import.
Round 24 P1
- Party WS frame schema validation (drop malformed frames at the dispatch boundary).
- Encounter-share link signed with HMAC to prevent tampered foe loadouts.
- Foundry import schema check: reject actors that aren't
character type up front instead of partial-rebuilding into an invalid sheet.
2026-05-29 · Batch 9
Round 23 P0/P1 · Wave 7 · Director cost R2 · PB URL paste
Director cost round 2 (Trinity routing tuned), Wave 7 generated
worlds enriched, Pathbuilder URL paste, achievements Wave 2 + MCP
push, marketing trio refresh.
Shipped
- Director routing R2: the Trinity router keeps routine turns on the fast tier and auto-engages deeper intelligence on complex turns / decisions. Routing rules now look at scene-state delta + dying / encounter triggers + 30+ token user input length, tuned so the heavy tier only runs when a turn actually needs it.
- Wave 7 generated worlds: persisted deep-tier-enriched world skeleton + integration with the live play surface.
/generate+start seed entry; frontend hub start flow.
- Pathbuilder URL paste: the import page now accepts a Pathbuilder share URL (in addition to a pasted .json blob). Backend fetches + walks the L1-LX sheet.
- Achievements Wave 2 (+20 entries): Combo (crit_streak, untouchable_round, glass_cannon, tank_lord, speed_demon) + Class iconic (power_word_kill, sneak_master, raging_survivor, lay_on_hands_hero, improvised_genius) + Setting (visit_town, visit_dungeon, visit_planes, library_cat) + Catalog (cantripper, archetype_dabbler, world_walker_secret hidden) + 3 hidden secrets (defied_the_veil, hero_of_lost, bestiary_keeper_legend). Catalog total 19 -> 39.
- MCP achievements push: the achievements WebSocket fans an
achievement_unlock frame to every subscribed client on the cid within ~10ms of the grant. Auto-toast on play.html.
Marketing trio
- Landing + pricing + onboarding rewritten for "smart Trinity routing" instead of the retired tiered pitch.
Round 23 P0/P1
- P0: Dragon-trait safety on iconic-foe achievement detection -
pf2e:dragon_turtle (a Beast, not a Dragon) no longer leaks the hidden Dragonslayer name.
- P1: Achievements WS subscriber dedup on reconnect; PB URL fetch timeout cap (2s); rate-limit on the catalog GET (60/min per user).
2026-05-29
AFK marathon · rounds 13-17 + Wave 3
100 painterly art assets wired end-to-end. PF2e bestiary 161 -> 191
with new L-1..L4 thickening. 7 new audit rounds + a real concurrency
race closed. Extended demo (33 scenes). Pathbuilder + Foundry
roundtrip pinned.
Shipped
- PF2e content Wave 3 (entry tier): +30 monsters L-1..L4 across 9 biomes - iconic classic-fantasy foes (kobolds, gnolls, hobgoblins, lizardfolk, trolls, dire wolves, gargoyles, etc.). +10 setpiece hazards. +15 named NPCs (innkeeper, captain, priestess, merchant, etc.) for shop and quest-giver scaffolding.
- PF2e content Wave 4 (endgame tier): +30 monsters L10-L20 (pit fiend, balor, marilith, planetar, solar, eye tyrant, mind render, kraken, ancient red & blue dragons, lich, demilich, vampire ancient, mummy lord, bone/iron/adamantine golems, etc.). +20 high-rank spells L7-L9 (meteor swarm, time stop, mass heal, wish, gate, foresight, true polymorph). +15 high-level magic items L15-L20 (vorpal sword, hammer of thunderbolts, holy avenger, staff of the magi, etc.). +5 high-CR hazards (planar gate, soul trap, doomsday glyph).
- PF2e content Wave 5 (mid tier): +25 monsters L5-L9 (chasm stalker, phase stalker, ettin warband, chimera, hill/fire giant youth, hydra adolescent, manticore adult, gorgon, spiderkin, bugbear chieftain, hobgoblin warlord, hags annis/green/sea, etc.). +2 ancestries (Orc + Leshy - closes the long-standing PF2E_ANCESTRY_ART 8/PF2E_ANCESTRIES 6 mismatch). +11 mid-rank spells L4-L6 (dimensional anchor, scrying, banishment, polymorph, baleful polymorph, etc.).
- Director prompt: Wave 4 endgame awareness: the LLM now knows to default L10+ encounters to Wave 4 high-tier monsters, propose L7-L9 spells for endgame casters, and surface L15-L20 magic items as quest rewards. EN+TH+RU parity. Smoke 11 -> 14.
- New-player onboarding tutorial:
/loommaster/onboarding.html - a 4-step quick-start that walks a new visitor from "I have never played PF2e" to "I am playing my first turn" without leaving the page. Pick class (Fighter / Wizard / Cleric / Rogue) -> pick ancestry (Human / Elf / Dwarf / Halfling) -> name -> ready. Suggested-name button + sheet summary preview + Start Adventure CTA. Linked from landing nav as "NEW PLAYER? START HERE".
- Director prompt addendum: teaches the LLM about Wave 3 NPC catalog (10 roles), entry-tier monster defaults, and setpiece hazards. EN + TH + RU parity.
- Frontend art wired: 4 surfaces (roster, builder, encounter, play companion panel) consume the painterly assets via art_url fields in enriched endpoint responses. Builder ancestry + class tiles now render painterly art in card headers.
- Encounter polish: biome preview tile, Roll Initiative button (deterministic d20 + foe perception, copy-snapshot to clipboard), threat-level indicator (Trivial..Extreme) computed from XP budget vs party-level threshold.
- Companion Command-an-Animal CTAs: play.html companion panel gets 3 buttons (Order Attack / Stride to ally / Stand and Defend). Each posts to a new
/pf2e/companion_command endpoint and renders a deterministic narration seed as a system chat line.
- Dying-state CSS heartbeat pips: the Dying counter now pulses with a 1s heartbeat; at Dying 3+ the pulse becomes urgent (faster + red glow). Recovery fades the pips out gracefully.
- Hero Point spend confirm dialog: the Hero Point button now opens an inline confirm panel ("Spend a Hero Point? N remaining") instead of firing immediately. Click outside or another panel dismisses.
- PB + Foundry export polish: Pathbuilder export now carries
boostsByLevel, companionId, and feat lane labels (closing the 3 PB export-loss gaps from the roundtrip smoke). Foundry export populates items[] from inventory + stamps flags.pf2e.feats/spells from the sheet.
- RU bundle parity: Russian translations backfilled from 33 keys to full 798-key parity with EN + TH. Toggle stays EN+TH until a native review signs off the copy; bundle is ready when it does.
- Roster card polish: 4 ability mod chips (Str/Dex/Con/Wis), L pill, punched-up Play CTA, "Roll a Successor" rename, one-line death epitaph row for dead PCs.
- Builder save polish: post-save flash replaced with a "Saved!" panel + 3 sized CTAs (Roster / Play this character / Level up). L1 class feature list shows lane + level + full effect text.
- Extended 33-scene demo:
/loommaster/demo.html grew from 16 to 33 scripted scenes. Class + ancestry picker, Pathbuilder preview, dying + recovery + hero point flow, wolf companion, Treant fight with crit-spec narration, party-of-2 (Champion ally), shop, journal, level-up to L3. Deep-linkable via ?scene=KEY. Zero account, zero API spend.
- Public changelog: this page. Linked from landing nav.
Art & UI
- Wired 100 painterly art assets across classes, ancestries, biomes, monsters, companions. Backend art-path helpers + frontend lookup. Roster, builder, encounter pages all consume them.
- Cache bump
v=82 -> v=83 across translations.js + service worker.
- EN+TH+RU parity for landing "What's New" + "Watch the Engine" copy.
Defense-in-depth
- Round-17 P0 (deny-list widened):
pf2e_apply_condition + pf2e_remove_condition added to the MCP deny list. BYO-AI can no longer self-apply Quickened (+1 action/turn) or self-clear Dying/Wounded without paying hero-point cost.
- Round-17 P1: Symmetric conditions-WS evict on
/pf2e/delete. Inventory-buy row-cap probe DB connection leak closed (try/finally).
- Round-17 P2 (concurrency): Real concurrency race surfaced + fixed -
_get_pf2e_dying_state cold-cache hydration was last-writer-wins, letting 2 threads return 200 for the same stabilize spend. Switched to setdefault so first writer is canonical.
- Round-16 P2: Dispatch
int(active_cid) parse-safe via shared helper. Smoke gap closed on remove_condition handler. Redundant double-close on award_xp atomic path removed.
- Round-15 P0 (A10):
pf2e_award_pf2e_xp added to MCP deny list.
- Round-15 P1:
db.close() wired into 4 atomic PF2e helpers. Cross-character empty-string guard at 5 dispatch sites.
- Round-14 P1: 1000-row hard cap on
/pf2e/inventory/buy. character_id frame gate on dying + conditions WebSocket.
- Round-13 P1: Explicit
ROLLBACK on condition_apply except path. Cache-Control: no-store, private on PF2e GET endpoints.
Smoke coverage
- Pathbuilder + Foundry roundtrip: 10-test smoke pinning L1 + L20 roundtrips, /levelup propagation through PB export, malformed body rejects, ability score parity, strict JSON.
- Real-threads concurrency: 8-test smoke firing 4 racing threads against recovery_check / hero_point / award_xp / condition_apply / WS publish. Caught the cold-cache hydration race.
- PayPal + PF2e entitlement seam: 8-test smoke walking trial -> wall -> subscribe -> cancel -> Mirror Shard -> BYO-AI A10 deny, all on a PF2e character.
- Suite total: 92 tests green (was 88 yesterday).
Content depth
- 33 PF2e bestiary entries backfilled with structured weakness/resistance/immunity (replacing prose-only defenses).
- Director tools smoke - 6 new malformed-payload cases (missing/empty/unknown condition_id, missing delta_xp, missing character_id, garbage value).
2026-05-28
PF2e parity day · ~40 commits
PF2e becomes a substantially-complete second ruleset. Dying state machine, hero
points, recovery checks, death/dynasty, Pathbuilder L1-LX walk, treasure pacing.
New systems
- PF2e dying state machine (Core p. 459-460): Dying 1-4, Wounded carry-over, recovery check flat d20 vs DC 10+dying+wounded, hero point stabilize.
- Hero Points pool + spend UI: earn on milestones + scene transitions, spend to reroll or stabilize.
- Character death + successor flow: dynasty heirs preserve campaign continuity.
- Pathbuilder 2e import: .json import with L1-LX walk reconstruction. Full XP + boost history preserved.
- Foundry VTT reverse-export: bring your character back to VTT play.
- Treasure pacing UI: Core p. 508-513 wealth ledger.
- PC inherent W/R: ancestry + class weakness/resistance flow through apply_damage.
Audit rounds 6-12 closed
- Round 6: 9 P1 fixes (commits
20237ae..93b4aae). Bearer auth on save/update/delete, dispatch ctx-check ordering, PAYPAL_ENV explicit-required, Pathbuilder feat lane validation, hazard/monster GM redaction, damage type aliasing, class progression rewrites.
- Round 7: 4 P1 fixes + 9 P2 polish. Mirror/sheet transactionality (BEGIN IMMEDIATE), prose-fallback W/R parser, schema accepts PF2e damage types.
- Round 8: hazard catalog redaction, zero-amount component phantom weakness, dying persistence in apply_damage, hero-point RAW semantics + anti-cheat.
- Round 9: Director-only on /award_treasure + /award_hero_point, client pc_damage_modifiers rejected, PB walk starts from L1 base scores.
- Round 10-12: WAL journal mode + busy_timeout, DDL idempotency guard, DoS cap correction, wider ruleset-boundary smoke coverage (24 routes), live-state fetch chunking on roster (4 cards/chunk).
UI
- play.html dying UI + Recovery + Hero Point buttons.
- PF2e conditions panel + companion action panel on play.html.
- Loot tab + magic item shopping UI + inventory tracker.
- PF2e roster rich card view + roster row shows class subchoice + HP/AC.
- WebSocket push for dying state.
- In-character journal panel.
- Critical-spec narration wiring.
- Multi-character party UI foundation.
- Builder quick-start templates.
2026-05-27
PF2e catalog blowout
Catalogs expand to L1-L20 with archetype dedications, exploration activities,
conditions, feats, deities, and class L1+L2-L20 features.
Catalog content
- L2-L9 spell catalog (covers most of Core caster repertoire).
- Heritages (sub-races per ancestry).
- Archetype dedications: Fighter, Rogue, Wizard, Cleric, Ranger, Bard, Druid, Sorcerer, Barbarian, Monk, Alchemist.
- Named action catalog + exploration activities.
- Condition resolver with degree-of-success effects + condition stacking rules.
- More ancestry feats per ancestry. Deity catalog (cleric + champion targets).
- Encounter difficulty + XP budget. Critical specialization effects per weapon group.
- Class L1 features (auto-granted). L2-L20 progression tables. Expanded background catalog.
- Language catalog + extra-language helpers. Focus spells per class. Class subchoice catalog (domain/school/bloodline/order).
- Hazard catalog (traps + environmental dangers). Affliction catalog (poisons + diseases + curses). Ritual catalog (Core p. 408). Animal companions + familiars. Treasure-by-level table.
UI
- PF2e builder frontend + level-up endpoint (apply L2-L20 progression to a sheet).
- Sheet persistence (save / list / load) with builder save UI.
- Roster page + level-up page. Class subchoice picker in builder.
- Pathbuilder import UI page.
2026-05-26
PF2e ruleset foundations
PF2e ships as a second ruleset alongside D&D 5e. Ancestries, classes,
backgrounds, bestiaries, dispatch, prompt branch.
Foundation
- Ancestries + backgrounds + 12 PF2e Core class kits. 5 + 3 = 8 biome bestiaries.
- Skill catalog + skill-to-ability map. Weapon/armor/shield catalogs. Cantrip + L1 spell catalog. Feat catalog (class + skill + ancestry).
- Resolvers: saving throw, perception, Strike attack, compute_ac().
- XP thresholds + level-based DC table. Per-class starting equipment.
- Director prompt branch (ruleset addendum) + dispatch wiring (resolvers in tool-call layer).
- Marketing: landing + pricing in EN/TH/RU say "5e + PF2e".
2026-05-25 and earlier
Foundations
5e Wave 1-7 foundations, MCP launch, PayPal hardening, Director-callable tools.
Major milestones
- MCP launch: Streamable-HTTP single-endpoint dispatcher, key-mint UI, BYO-AI pricing card, end-to-end first-connect smoke + nginx check.
- Wave 7 world generation: persist + integrate generated world (coexist mode), generate+start endpoint + frontend seed entry, deep-tier enrichment over deterministic skeleton.
- Wave 5 layers: boss setpiece + region-unlock payoff, advancement loop made visible, loot & gear depth, quest generation layer.
- PayPal hardening: capture-only flow requires order match, cert chain validation (PKIX-style verified root), webhook DB error returns non-2xx, paypal_orders TTL + replay reject.
- 5e ruleset core: bloodied() into enemy prompt, status duration cap, end_encounter foes-alive gate, take_feat prereq enforcement.