- Source
- Repository
- Releases
- 8
- Served
- Since 2026-08-18
Every entry below was written, reviewed and verified in the repository, and from 2026-08-18 onwards against the live database as well. Two invited tables are in private test; nothing is open to the public.
2026-08-22
The rulebook and chat on production, and the fixes before session zero
- FOUNDATIONChat, the campaign rulebook, and three more rulebook kinds applied to the live database, each verified there: row level security on, anonymous access absent from every grant.
- FIXEvery prose save reported WRITE FAILED over a body that had already committed, and backlinks were never recorded. Both fixed.
- FIXA proposed date can be settled and a player can answer it. The availability page and the docket no longer crash on the way there.
- FIXThe chat column tracks the plate rather than the status strip, and the sign-in check page stops promising a cross-device sign-in the link cannot deliver.
- SURFACEChecked against the live database and moved to RUNNING: export as Markdown and JSON, and lines and veils recorded on the table page.
2026-08-21
Notes, sheets, the rulebook, chat, and a front page
- SECURITYA character sheet is private to its owner and the DM. The read had been expressed against visibility rather than ownership, so every seated player could open every sheet.
- FIXA player can write a note. The insert was always permitted; the read-back of the new row was what was refused.
- FIXSign-in survives the clock skew that met the first real sign-in.
- SURFACEThe campaign rulebook: the table, the policies, the gates and the DM-only screens for what a table plays with beyond the SRD. Chat between sessions, with the DM able to voice an NPC.
- SURFACEThe front page is a scroll-scrubbed descent through the Record, with a picture for each of the four layers and the three things built on top.
- FOUNDATIONThe eleven seats for the two real tables issued.
2026-08-20
The Interlude live, the SRD pack, and sign-in fixed
- FOUNDATIONThe six Interlude doors the product had always called and the database never had, and the calendar feed answering a token-identified reader with no session.
- SURFACEA starter pack from SRD 5.2.1 via Open5e under CC BY 4.0, installed on the live database and read back: monster tables by tier, magic finds, nine original tables and three generators. A player guide. Your own denominations.
- SURFACEPortraits, session notes, reveal receipts, the Delta, and a generated sigil for every entity.
- FIXThe commonest sign-in failure printed UNKNOWN. It is named now, and the whole path was walked end to end.
- DECISIONThe footer advertises the privacy notice only, and the sub-processor list is corrected to name the sender of every sign-in link and the nightly backup.
2026-08-19
The first seat walked, end to end
- SURFACEA real seat taken from a phone: invite, magic link, seat, every player surface read. The reveal boundary held for the new member.
- SURFACEThe docket and entity-notes widgets, so no player reads a build-status warning. A real account settings page. A favicon that is ours.
- SECURITYThe private-test gateway, and a nightly database backup restore-tested into a scratch Postgres.
2026-08-18
The database opened, and the first campaign went live
- FOUNDATIONThe schema applied to a live Postgres, with the nineteen RPCs the product was calling and none of which existed. The first campaign created and served.
- SECURITYForty-three definer functions were executable without signing in. An explicit lockdown now revokes and asserts it, and every later migration sorts before it.
- SURFACEThe Launcher, so a campaign is created without SQL, and a shell that tells a player from a DM.
- FIXEvery campaign page rendered in a 64px column. A flex item with an auto margin does not stretch.
- DECISIONPublish-on-join is a button on the roster, not automatic, because no player-facing path may carry an elevated client.
2026-08-17
Routes, primitives, data access
- FOUNDATIONThe Blueline component library: 25 primitives, no colour literal in the compiled stylesheet.
- FOUNDATIONEvery route in the product laid out, with the campaign shell mounted exactly once.
- SECURITYPreview-as-member implemented as a path prefix, with a forged preview header stripped at the edge.
- FOUNDATIONThe data access layer: reads throw, writes return a result, and no write path may catch silently.
- DECISIONA not-found page written as a redaction surface, so a concealed address and a nonexistent one are byte-identical.
2026-08-16
Schema and redaction policies
- FOUNDATION62 tables across three migrations, with the four decisions that cannot be retrofitted made first.
- SECURITY149 row level security policies, and a migration that fails if a table ever lands without one.
- SECURITYEntity prose is unreadable column by column, so a readable row can still contain unreadable text.
- FOUNDATIONThe zero-sum ledger constraint, enforced per transaction per asset rather than per transaction.
- DECISIONRules content comes from the open 5e APIs. Nothing is extracted from a book we do not have the right to ship.
2026-08-15
Direction set
- DECISIONBlueline: one graphite ink, emphasis by density rather than hue, colour reserved for limits.
- DECISIONConcealment renders with no hue at all, so it is never spottable from across a table.
- DECISIONThe vocabulary locked, each word chosen to avoid a collision that would be expensive to undo.