Skip to content

Changelog

Pre-release 2026-10-30

  • keep a release comment failure from failing the release (166743c)

Pre-release 2026-10-30

  • accept space and permission-set lexicons, and soften three rules (d8a8b67)
  • accept the empty object a pds answers to a plc signature request (cc63d4e)
  • catch the atrium-oauth panic on a refused token exchange (eea0cdd)
  • compile a plugin’s module when it is installed (4ffd0a0)
  • count the session cookie only on the instance’s own pages (35261f6)
  • delete only what reconcile can prove gone and still unchanged (226807b)
  • dial jetstream’s tls with webpki-roots 1 and drop the 0.26 shim (97a0c52)
  • fence a job’s progress and status writes and stop a run that lost its lease (ff2e069)
  • give each job run its own lease, and stop a migration that was asked to (7f1dfee)
  • hold running jobs under a lease so one instance’s restart leaves another’s alone (39f3e05)
  • keep each sign-in on the key it started with, and switch at once when nothing signs (1db62f6)
  • keep keys typed into the script editor while a render is behind (6d89ca6)
  • number the pending client keys migration so it can’t collide with other open migrations (9bcb1bb)
  • publish a rotated OAuth key before it signs, and serve the instance’s keys by jwks_uri (4d72f4e)
  • put the caller’s email behind its own capability (1d31a76), closes Hi#risk
  • read collections from happyview’s own schema in hv_collection_id (5bab5ac)
  • send the lexicon detail telemetry asks for, and count custom setting keys (e8f082c)
  • ship happyview-codemod in the docker image (413f4e2)
  • skip the delete hook for a record changed since reconcile read it (1ebc64e)
  • stop a telemetry preview recording the version it previews (a62398d)
  • stop reading a script’s http response at its size cap and bound its time (1dbf129)
  • stop warning about an anonymous request’s client key (68d2973)
  • treat a cross-site xrpc request’s session cookie as anonymous (b8ee326)
  • warn about [instance] on a deploy only for keys that differ from the instance’s (c893f1b)
  • warn rather than refuse to boot on a lexicon the spec checks reject (7f315dd)
  • warn when a delete hook cannot keep a claimed record (27b985c)
  • web: keep long api client scopes out from under the row actions (39cfa45)
  • add a record view raw sql can read one collection through (597feae)
  • let a backfill executor note its jobs and describe its collections (c8933d9)
  • let a plugin read the caller’s account from their PDS (60edb94)
  • reconcile a collection’s records with its accounts’ PDSes (052f87d)
  • say that an accepted subscription lexicon is not served (5793ec9)
  • toggle whether a lexicon is indexed from its page (66bc8ce)
  • turn off wasm gc, typed function references and the component model (7726607)
  • validate an uploaded lexicon against the spec, per field (b0a1565)
  • web: show connecting and unreachable states while the dashboard loads its config (5e07c9e)
  • reuse catalogue entries for projects that have not moved (d78bbe2)

Pre-release 2026-10-30

  • update wasmtime to 36.0.20 for rustsec-2026-0424 (1a7784f)

Pre-release 2026-10-30

  • let cors credential a listed integration origin (880d36b)
  • refuse cross-site requests that carry the session cookie (d05d824)
  • refuse service-auth tokens on the admin api (01e2bab)
  • update wasmtime to 49.0.5 for four rustsec advisories (dc5d180)

Pre-release 2026-10-30

  • add javascript and typescript starter scripts (dd09071)
  • list the languages a script can be written in (f7c25b0)
  • pick a new script’s language in the dashboard (823ea16)

Pre-release 2026-10-30

  • checkpoint the sqlite wal once it passes a size (6c97414)
  • let a hosting platform make telemetry mandatory (21f4e20)

Pre-release 2026-10-29

  • let only the platform change domains on a platform-managed instance (c311e18)

Pre-release 2026-10-28

  • store a new domain lowercased and keep a failed primary sync from stopping boot (37cf265)

Pre-release 2026-10-28

  • check if-match before unpacking and stop warning about plugin tables on deploy (7d232c7)
  • serve a dynamic route’s payload for an id the export never saw (e3fc896)
  • deploy a project bundle through the admin api (f130a8b)
  • let apps granted dev.happyview.adminFull use the admin api (caf07de)

Pre-release 2026-10-28

  • key software.release version fixtures with a dot (29498e6)
  • switch the primary domain to PUBLIC_URL when it is already listed (ca3ee49)

Pre-release 2026-10-28

  • catch the atrium-oauth panic on a refused token exchange (79fc7de)
  • read and send a space repo’s digest as data alongside hash (e909f47)

Pre-release 2026-10-27

  • drop wasmtime’s zstd cache and update crypto-bigint past its advisory (e38d35a)

Pre-release 2026-10-27

  • install catalog plugins from their manifest url (9c8de85)
  • install default plugins on first boot (9c2f2e0)

Pre-release 2026-10-27

  • run each job on its own thread so a busy one cannot starve the other workers (027fb32)

Pre-release 2026-10-27

  • add an admin counts route for hosts (21b7a2c)
  • add an optional get_declarations export for interpreters (fa7de85)
  • add happyview check —json for editors (3b648d1)
  • add happyview types to write editor declarations (930dcd0)
  • complete scripts in the dashboard from the interpreter’s declarations (5df2b45)
  • convert lexicons into declaration types (9ecfc1f)
  • describe ctx and event shapes for declarations (055a778)
  • give plugin api surfaces a type grammar (1ae874d)
  • keep editor types current from happyview dev (2cc797d)
  • parse plugin api surfaces into typed surfaces (ded3995)
  • refuse a library whose api surface does not parse (5b6ea0a)
  • serve the instance’s editor declarations to the dashboard (dee0a8b)

Pre-release 2026-10-27

  • deps: update zstd past its advisories and drop wasmtime’s unused cache (c4a739e)

Pre-release 2026-10-26

  • accept only the registry’s tracks as a plugin channel (1e1915b)
  • ask for capability consent when updating or switching a plugin’s channel (87c8394)
  • bound registry responses and keep the catalogue through a failed read (7560969)
  • deps: update crypto-bigint and ctutils and triage the advisory in crypto-bigint 0.5 (7cb3d03)
  • never attach a plugin a concurrent pass already flagged (a7d60c1)
  • offer updates only to plugins that follow a registry project (844e3de)
  • offer url installs only newer versions and track every installed registry project (549f2eb)
  • refuse a registry artifact whose cid can’t be checked (4c43eb5)
  • refuse an install when the channel moved after its preview (7b38c61)
  • attach plugins installed from github to their registry projects (964d74b)
  • install a plugin from the registry by cid (100098b)
  • install and update plugins by their registry project and channel (e29e930)
  • install plugins by channel and show their lifecycle in the dashboard (e6fd23a)
  • read registry plugin entries from happyview.toml (f0f654b)
  • read the plugin catalogue from the software.release registry (2f22f6b)

Pre-release 2026-10-25

  • serve a commit synced from a mac-authenticated host instead of failing (5e12ca7)
  • update rustls, webpki, wasmtime and ctutils past their advisories (5cbb544)
  • verify space commits from hosts that authenticate them with a mac (ffe5a9a)
  • derive the shared secret and mac that authenticate a space commit (3854555)
  • let a request through an oauth session send a header and read one back (b895c89)

Pre-release 2026-10-25

  • deps: update crypto-bigint and ctutils and triage the advisory in crypto-bigint 0.5 (03ed522)
  • keep a lexicon’s indexed setting when a re-upload leaves it out (808c845)
  • set indexed on the testkit’s query lexicon write (c83593d)
  • show unindexed collections to operators and refuse test triggers that can’t fire (e0d7f69)
  • skip events for a collection installed without indexing (e032929)
  • let a project install a lexicon without indexing it (044adb5)
  • let a record lexicon be installed without being indexed (8cb8ca9)
  • set whether a lexicon is indexed from the admin api (3b01d04)
  • show and set whether a lexicon is indexed in the dashboard (43aba19)

Pre-release 2026-10-25

  • update ctutils and crypto-bigint past their timing advisories (47023e7)

Pre-release 2026-10-23

  • classify raw record view reads conservatively (be36462)
  • refuse record view queries with more than 1000 ctes in one with (d746fa1)
  • refuse record view reads the read-only gate cannot vouch for (72299a7)
  • run raw writes through the record views locally (f4149b0)
  • run routed postgres reads in a read-only transaction (70d404b)
  • run table queries of the record views on the raw read route (96197df)
  • walk each cte body once (abed4a1)
  • let record storage offer a raw read route (5dfc430)
  • run raw reads of record views on the raw read route (028c80e)
  • tell which relations a raw query reads (38be805)

Pre-release 2026-10-22

  • answer 503 for admin stats while claimed storage is down (2d8eca2)
  • bound the shared plugin modules by their total size (9eb51a4)
  • compile plugins off the async runtime and reuse them (503db8b)
  • keep a local count failure a 500 on admin stats (1d9b9e6)
  • report a backfill as running as soon as it starts (1f97de9)
  • serialize a compiled plugin module once (a49da52)
  • answer 503 for script reads and index writes when claimed storage is down (5876f4c)
  • let record storage answer collection counts (abca8fc)
  • let record storage say whether it holds an account (324faf3)

Pre-release 2026-10-21

  • ask the attached account for the lexicon schema scope (be8f0c7)
  • compare publish attempt times as dates (7b7b2d9)
  • give a scope’s value the full width on narrow screens (ddb8bc5)
  • give publishing warnings their own token (808a481)
  • give the detail panel’s unpublish an outline (1094c9f)
  • give the unavailable bulk publish button its reason (a3319eb)
  • judge a linked repo’s publishing scope by what the pds granted (074a9e1)
  • judge the instance account by the scope it was granted (16f08b3)
  • keep an applied scope preset focusable (4441cd0)
  • keep publish status visible on narrow screens (12ceb6d)
  • let an unpublish win over a reconcile already in progress (3133362)
  • log a repeated publish failure once (2bfef2e)
  • make an applied scope preset legible in dark mode (2beb98c)
  • make publishing status reasons reachable without a pointer (d40e4aa)
  • move the publishing link out of the lexicons toolbar (9ede588)
  • need linked repo access to aim a default at one (e70cc04)
  • order the lexicon publishing migrations after alpha’s (e1affa2)
  • publish more than 500 pending lexicons in batches (b50ba59)
  • re-check a lexicon’s dns only when its authority changes (6ed93f2)
  • reconcile after a default is deleted (4c7e049)
  • refuse a default for a linked repo removed mid-request (7b74fe1)
  • reword the publishing server messages and drop the availability endpoint (2420d77)
  • save a default whose linked repo was removed (f17f85f)
  • show a linked repo the viewer cannot see only as a linked repo (7470858)
  • show a linked repo’s did once when it has no handle (d4b4262)
  • show only a lexicon and its actions on narrow screens (0d0446e)
  • style an applied scope preset as a selected chip (276b9ab)
  • update rustls-webpki and webpki-roots for their new advisories (73167c2)
  • update wasmtime to 49.0.4 for its two new advisories (4039ffb)
  • add the lexicon publishing admin api (300d398)
  • check a lexicon’s dns from its publishing panel (fd9f0bb)
  • keep an unpublished lexicon out of auto-publish (a33f2fb)
  • list published records whose lexicon is gone (6b7a1e3)
  • list published records whose lexicon is gone on the publishing page (410c6c8)
  • manage lexicon publishing defaults from the dashboard (43d7631)
  • match lexicon publishing rules and compute publish status (f0113ad)
  • move lexicon publishing under system and keep it closed until usable (8045368)
  • offer a lexicon publishing scope when linking a repo (99c76ef)
  • publish lexicons to the attached account or a linked repo (9006386)
  • report whether publishing is usable and check one lexicon’s dns (fb93bbe)
  • rework the lexicon publishing dashboard around rules and setup (b089cb5)
  • show a withdrawn lexicon in the dashboard (ab924db)
  • show and change a lexicon’s publish status (a0714dd)
  • store lexicon publishing rules and publications (900ee9f)

Pre-release 2026-10-21

  • update rustls-webpki and webpki-roots for their new advisories (709df13)
  • update wasmtime to 49.0.4 for its two new advisories (e5c4f34)

Pre-release 2026-10-20

  • stop a library call that never answers in a test run (5a84e86)

Pre-release 2026-10-19

  • apply a retried claimed delta only to the version it was made from (b3be126)
  • cache the provider crates’ manifests in the docker build (66c1c47)
  • clear a deleted record’s delta unconditionally (bbae889)
  • close each conformance case’s pool when the case ends (1b5ebc2)
  • count a claimed record’s applied delta as a change in a batch (2c9b468)
  • guard the test helpers and check the claimed path in conformance (a4b3274)
  • refuse providers built for another contract version (6fe94c6)
  • remove a failed-open record when its retried hook skips it (6f18550)
  • report a backfill when the jetstream source is unbound (18a341c)
  • report claimed batch changes from the one ingest path (463c76d)
  • route executor collections consistently and fail panicking executors (77e90af)
  • split ingest runs by origin (280d855)
  • add the record provider contract crate (bb9616d)
  • boot through happyview::run with pluggable providers (cf562df)
  • let a pds validate a record only when it can by default (5f36090)
  • let other providers compose the jetstream source (b860d29)
  • route claimed collections to an external record storage (d2bdd6a)
  • run a source’s own migrations in their own table (2c16e16)

Pre-release 2026-10-19

  • let the muted surface show through a highlighted code block (da3021b)
  • highlight the code in a plugin’s published markdown (650b520)

Pre-release 2026-10-17

  • badge only the official publisher’s plugins in the catalogue (513366a)
  • let a plugin carry a banner and say what it is on every surface (d0e4724)
  • rebuild the plugins surface around a ledger, a catalogue and one plugin page (0e2001a)

Pre-release 2026-10-16

  • read the registry catalogue a package at a time instead of trusting latestVersion (8723f62)

Pre-release 2026-10-16

  • bound block decompression memory by the cap (ca1ffb8)
  • collect written dids only in a block retry (ff54b0b)
  • count only archive outages towards the replay halt (a621b21)
  • count project lexicons in telemetry (cea30de)
  • crawl by default in the compose files (1d1e43b)
  • crawl when the archive wants a key and none is set (8155a20)
  • give each segment part its own retry budget (8274878)
  • give the archive client its own read timeout (8c3eaa1)
  • give up on a gap replay plan after 30 seconds (36216a3)
  • harden the archive client against stalled and broken bodies (35ada9d)
  • hide delete for lexicons declared in happyview.toml (c0fd8ef)
  • keep replay record totals across runs and refuse unreadable sweeps (9fec980)
  • let a failed replay job resume where it stopped (0dcc2f2)
  • move the replay migration past alpha’s plugin publisher migration (ab5d8a2)
  • never resume an account replay without its accounts (f7a9d63)
  • offer only crawl for account backfills in the dashboard (468389e)
  • pace replay to the archive’s byte quota instead of failing on 429s (b2c8868)
  • replay the account markers of what a block retry wrote (7eefd6d)
  • report every run’s replay bytes when a replay completes (71612e4)
  • run a backfill job once when two resumes race (c653ddf)
  • stop a replay before it skips a block it cannot record (194556d)
  • stop gap replay looping on a refused tip and create gap jobs with their floor (22d4447)
  • add replay backfill settings and job columns (0c38012)
  • add the jetstream archive client (0a99465)
  • always crawl account backfills (ff2dfcb)
  • apply replayed account and sync markers as of their own time (6a553cc)
  • backfill by replaying the jetstream archive (801f17c)
  • crawl by default (013b3bf)
  • decode dag-cbor records into atproto json (6d18c1d)
  • fold replayed archive events into the record store (3bcee7b)
  • read jetstream archive segments (5a79856)
  • replay a jetstream gap from the archive instead of skipping it (182b02d)
  • retry failed archive blocks (109ea86)
  • show replay backfills on the dashboard (ca2501a)
  • sweep replay markers over the archive’s uncompacted tail only (fd96169)
  • turn archive rows into jetstream events (8abf2e3)

Pre-release 2026-10-15

  • hold the space for a whole write so concurrent writes neither fail nor deadlock (f724ba0)
  • let a racing writer create an author’s repo state once (5c6ba26)
  • take the write lock up front in the space repairs (7d8aa55)
  • update wasmtime past its thirteen new advisories (3a65126)

Pre-release 2026-10-14

  • answer a module panic only when the guest trapped, and cap its report (30ff248)
  • bound a job fired from a test run (eda70ec)
  • bound the prepared cache and forget a script’s old artifact (e51752c)
  • clear a network lexicon’s authority when it is saved by hand (c329699)
  • compile project modules off the runtime workers and name unreadable builds (3cab946)
  • forget every library call when a module run returns (7380c52)
  • install the update the publisher check approved (db9240e)
  • keep first sign-in from bootstrapping an admin when a superadmin is configured (910d466)
  • keep the check database open for the whole run (11233ca)
  • keep the running configuration when a happyview.toml edit is refused (0410e63)
  • let dev finish a setup it was interrupted in (6dd7c30)
  • note a shadowed lexicon and keep project scripts from saving (4710b30)
  • refuse a codemod apply on a project script before checking its language (eee7f25)
  • refuse a module written in another language (4af6101)
  • refuse an invalid superadmin did and read every setting through one lookup (28197e9)
  • refuse delegateDid on a procedure without dpop instead of writing it into the record (e4fd227)
  • refuse malformed error mocks (9726c33)
  • report unreadable project files and lexicon ids that differ only by case (04a69d0)
  • run test files under the configured script limits and stop a dropped run’s files (ff42263)
  • say a jetstream setting edit needs a restart (7d72d1a)
  • serialise lexicon catalog writes and repair unreadable network rows at boot (855adac)
  • share the dashboard fallback and check the embedded copy carries the base path marker (862cca3)
  • show the full build hash and an unrecorded handler in the module panel (30d212c)
  • start a script module’s fuel after its input is written (160fd3b)
  • stop copying migrations into the image (a2a6648)
  • stop the dev watcher rebuilding on its own reads (bfad704)
  • strip a script env file’s bom and never log its lines (d80b4d0)
  • update rustls past its four new advisories (7d14b87)
  • warn when a script’s outbound xrpc list cannot be read (61fa2ef)
  • watch src again when it is recreated (5b943a6)
  • add a layered script catalog (e46d008)
  • add handler attributes and export! for script modules (111ddad)
  • add happyview check (da28bea)
  • add happyview dev (2b623dd)
  • add happyview-script’s executor and handler context (379cc5a)
  • add the happyview test command (7dbbc26)
  • add the module_resolve wrapper to the plugin SDK (5ddeada)
  • add the project snapshot types and catalog vocabulary (baf323c)
  • add the script:test capability and the test script kind to the host (9895b72)
  • add the test script kind and the test runner wire types to the sdk (3051537)
  • answer a test run’s repo writes from an in-process pds (d1b55ab)
  • apply a happyview.toml edit while dev runs (c9c5d9f)
  • badge the official publisher’s plugins and let the catalogue be turned off (a58f5fb)
  • build a project snapshot from src (edba221)
  • build and dispatch compiled script modules from the project snapshot (9d202f6)
  • build the project at boot and refuse to start when it fails (7fde1e7)
  • calibrate module fuel against the lua interpreter (f6373dd)
  • carry prepared artifacts and module resolution on the plugin wire (13fcbf6)
  • default a dev instance’s settings beneath the project file (0a7e51e)
  • embed the dashboard in release builds (6e37098)
  • fire every trigger family from a test file (c011aec)
  • generate dev instance secrets once per project (d6fd481)
  • give a test run its own state and a database per test file (578dbbb)
  • install a project snapshot (fb5798c)
  • keep a dashboard script’s artifact when it is saved (6a65026)
  • layer happyview.toml under the environment through one lookup (7df3911)
  • let a guest report its panic as a script error (4b0578b)
  • let a test file report results and read what it observed (5720969)
  • let instance settings fall back to happyview.toml (200c854)
  • let interpreters claim project file extensions (77b734c)
  • let interpreters resolve a project’s modules through the host (698ed19)
  • let scripts read variables from an env file (20cdcbc)
  • let the plugin directory be configured and gate automatic backfills (ac2e6db)
  • load compiled script modules into project script entries (d7b7b4b)
  • load happyview.toml from HAPPYVIEW_PROJECT at boot (7da9b76)
  • load project lexicons with their overrides (93361fb)
  • map job and label files to triggers (4cff59e)
  • map lexicon-directory paths to triggers (9ecc246)
  • mirror the job type rules in the script form (65cec9c)
  • mock library namespaces with data in a test run (3d6b4a5)
  • name the project file a script error comes from (d5a855d)
  • parse happyview.toml into ProjectConfig (b977168)
  • pin each script run to one project snapshot (fb7e3e5)
  • prepare scripts through the interpreter and stamp the artifact (cf9a539)
  • prepare the project snapshot and check its imports (ded3883)
  • print what a dev build changed and what it warns about (e1c9dc5)
  • read a script module’s handler and interface sections (51da04d)
  • read script descriptions from a leading comment (b8a9449)
  • rebuild the project snapshot on save (46d0f0f)
  • refuse a second interpreter claiming an installed extension (f60237d)
  • refuse admin lexicon writes a project file owns (9efcac5)
  • refuse admin script writes a project file owns (f67218c)
  • rerun affected test files on change with —watch (45aae53)
  • reserve a final .test segment in job types (97a45dc)
  • resolve forged identities in a test run without the network (c33dc58)
  • resolve relative module specifiers against a project snapshot (dbd597d)
  • run scripts from their prepared artifacts (c22b442)
  • seed the configured superadmin at boot (9ccea63)
  • set up a dev instance without the setup wizard (6ce86f7)
  • show compiled module handlers read-only in the dashboard (13a6fd4)
  • show project lexicons and scripts read-only in the dashboard (33f0b81)
  • stamp interpreter builds and cache prepared dashboard scripts (e09ca87)
  • start a project’s declared backfills once (b8725be)
  • subscribe to the labelers happyview.toml declares (4e053fb)
  • track the network lexicons happyview.toml declares (34f1716)
  • validate happyview.toml values at the line they are written (b826e81)
  • walk a project’s src tree (10bed6a)
  • write lexicon rows and memory through one catalog (25112fb)

Pre-release 2026-10-13

  • carry bytes across the plugin boundary as base64 (d33577a)
  • give no_std plugins an allocator that frees (43378ff)
  • grant a plugin fuel for the data the host hands it (2c89ae5)

Pre-release 2026-10-13

  • answer an invalid record cursor with a 400 (27ee7ed)
  • bound dictionary training and recompression by bytes (8090347)
  • count selected rows in a purge batch and keep refs writes in the store (29e7139)
  • harden the sqlite codec functions and drop the timestamptz helpers (205cf1f)
  • keep booting when the post-swap reclaim fails (0d731d1)
  • keep legacy ref collections through the copy (46018a5)
  • keep oversized record bodies raw (6a181b7)
  • name what blocks the record upgrade and log the user indexes it drops (01f09a3)
  • never empty the compact record tables after another boot swapped them (5e2ba3f)
  • reclaim sqlite space after the record swap in checkpointed chunks (60e28f0)
  • run one dictionary retrain at a time and answer a second with 409 (80b0b5c)
  • run the postgres record upgrade on the migration lock’s connection (8eae4b9)
  • seek record pages to their cursor with a row-value keyset (c61ea47)
  • walk legacy refs by row value and refuse blank uris (d14bec0)
  • warn when every reclaim checkpoint is busy and pin the reclaim tests (6959e1c)
  • write plugin index records through the shared record store (58a26d8)
  • add compatibility views over the compact record tables (c5cd381)
  • add interned record tables and enforce sqlite foreign keys (ed20794)
  • add sql codecs for compact records on both backends (e234f01)
  • add the compact record codecs (b275283)
  • compress sqlite record bodies with per-collection zstd dictionaries (2ae4c86)
  • copy and verify legacy records into the compact tables (913158d)
  • route every record read through the record store (06e4c05)
  • route every record write through one record store (c3c55f8)
  • store records in the compact format and swap the legacy tables at boot (d93e431)
  • train record dictionaries and recompress bodies in the background (ffae81d)

Pre-release 2026-10-12

  • ask an account’s pds before purging it (a9da5f9)
  • cap jetstream frames and the dictionary body while reading (11bacd5)
  • check only deletions with the account’s pds and cap its answer (50be9ee)
  • classify jetstream apply errors and skip invalid commits (127f173)
  • clear the jetstream worker status when the pool stops (924b4a8)
  • drop a jetstream seq saved before the time cursor (b22af47)
  • keep jetstream cursors through unexplained refusals and renumbered seqs (c939e7b)
  • keep the case of a jetstream path prefix (bfddd6d)
  • keep the jetstream seq when the later time cursor is unusable (b93ab9a)
  • let the tombstone migrations run again after a rollback (aff8cbb)
  • lock tombstone keys in hash order and keep revs on unversioned upserts (31080ed)
  • lowercase the jetstream host and warn on bad compression and worker settings (9bb0ca4)
  • resume from the tip when jetstream renumbers under a time cursor (ee1ef6f)
  • resume jetstream past dispatched events and test per-did order (14ca559)
  • resume renumbered jetstream seqs by witnessed time and keep tip gaps (773d5fa)
  • retry unavailable jetstream events until they apply and stop workers on drop (17e7c39)
  • tombstone a recordless delete while a backfill is cancelling (42b25f8)
  • tombstone unversioned deletes at the deleted row’s rev (2065382)
  • tombstone, purge and lock only for records this instance holds (e8dd553)
  • add record revs and record and account tombstones (d9ad5be)
  • apply jetstream events per did in order behind an applied watermark (5a55a9e)
  • consume jetstream v2 with ordered workers and an applied cursor (d71f91e)
  • keep backfill pages from resurrecting deleted records (f4a3945)
  • order jetstream record writes by rev and tombstone deletes (b266f8c)
  • parse jetstream v2 and v1 frames and decode zstd frames (22371ca)
  • purge deleted accounts and resynced repos from jetstream (3896fc8)
  • read jetstream protocol, compression and worker settings (f96e017)
  • recover from jetstream refusals, rotated dictionaries and lost cursors (44ed560)
  • run locally-managed cloudflare tunnels from a credentials file (1926142)
  • show the jetstream consumer’s status to admins (b4b03ca)

Pre-release 2026-10-10

  • retry a wal checkpoint that loses the checkpoint lock (bb69568)

Pre-release 2026-10-10

  • clear indexed_at on local edits so the jetstream echo re-stamps them (34c3901)
  • close the checkpoint connection if the checkpoint is cancelled (ae3b0e6)
  • dedupe and chunk a backfill records page before upserting it (b30a1fc)
  • delete backfill details in batches and serve pds summary counters in 64 bits (4b40260)
  • dispatch backfill units waiting on a busy pds worker without new arrivals (556df7a)
  • index records by collection for the default listing order (7e1a554)
  • keep indexed_at on index_put and correct the provenance docs (fa9d537)
  • keep the plc cooldown on backfill cache hits and record why a job paused itself (b57a7d5)
  • lock a pds’s stats before its job when counting late records (52d149f)
  • page the backfill resolver and rebuild record refs only once (c7f8df2)
  • pass the new storage settings through the production compose files (e92da02)
  • pause a backfill that ends with units queued and stop relay waits on pause (779f654)
  • record that a refs rebuild started before its first page and restore on_resolved docs (bf77184)
  • report long migration waits and require repairable concurrent index builds (7e769e8)
  • resolve each backfill did once per run and count pds stats in 64 bits (f6a0dab)
  • run sqlite at synchronous=normal with fewer backfill connections (5d9c492)
  • saturate backfill job counters and fail runs whose completions keep failing (efdae8a)
  • write each backfill page in one transaction and cache labeler subscriptions (f8df039)
  • write each jetstream record and its refs in one transaction (97aed54)
  • bound the backfill work queue (4de5df8)
  • checkpoint the sqlite wal on a schedule (cf6c65e)
  • expire resolved dead letters (0f4cf65)
  • serve backfill detail from the bounded queue (a21b51a)
  • show a release its notes in the update preview (40c70d7)

Pre-release 2026-10-10

  • list every release, and let both catalogue sources be redirected (e6d51f1)
  • read the plugin catalogue from the registry (7f63327)

Pre-release 2026-10-10

  • give guests enough native stack for an interpreter’s own limit to fire (0714eb9)

Pre-release 2026-10-10

  • let plugins run library calls concurrently (8d2e82b)
  • start and wait on library calls from the sdk (1b018d4)

Pre-release 2026-10-10

  • resolve a handle or did from a plugin (d8df489)

Pre-release 2026-10-10

  • read a query-string plus as a space (5463060)

Pre-release 2026-10-10

  • answer a declared lexicon error at 400 (008f2bf)

Pre-release 2026-10-09

  • answer a byte method’s structured failure as json (32fb05e)

Pre-release 2026-10-08

  • add a blob table keyed by content CID (6bdcb18)
  • answer with bytes when a lexicon’s output encoding says to (e9a9df0)
  • let plugins store and read blobs (be06931)
  • take a byte body when a lexicon’s input encoding says to (2070645)

Pre-release 2026-10-08

  • add job-read capabilities and sdk wrappers (8563bfa)
  • let plugins read background jobs (4606a6b)

Pre-release 2026-10-08

  • answer 502 when identity resolution may succeed on retry (6ed3467)
  • batch ended-grant cleanup and index grant expiry (a449752)
  • check the space inspector switch before loading the space (8ab3fb3)
  • close space moderation while the inspector is off (8e259be)
  • delete ended access grants on the protected retention schedule (48a291c)
  • describe spaces:manage-records as reserved (d1e18c0)
  • fail closed on space access audit writes and page grant reads (5f5b79d)
  • find blob authors once instead of once per account grant (c6945df)
  • hold protected events per grant and follow a keep-everything retention (90898a6)
  • hold protected retention at the oldest stored grant and fail closed (b75d92e)
  • include spaces an account only belongs to (b491a13)
  • index grant reads and resolve a space’s covering grant on the server (a1f857c)
  • keep grant records while grants are active and honor keep-everything retention (243a061)
  • log one revocation per grant and cap the grant length at a year (366237c)
  • log retention changes only when the effective value changes (73b4acd)
  • match account grants for space authors who aren’t members (287db59)
  • read audited settings under a lock inside their write transaction (23c6c1f)
  • resolve account grants on the server and let inspect holders read status (8ee3be2)
  • restore the blob author lookup’s doc comment (663ce14)
  • sweep ended grants first and index the retention hold (a72e53d)
  • tighten access grant revocation and lookup (03a1947)
  • web: cache only invalid identities and clear records on grant change (a8d4d02)
  • web: drop space record responses from a superseded grant (8ab1737)
  • web: ignore grant lookups that finish after newer grant state (7e4fb65)
  • web: keep loaded config when a refresh fails (c6d885f)
  • web: key access grants to their target and throttle account lookups (5b65e57)
  • web: leave unset protected retention blank instead of saving 365 (da584dc)
  • web: load covering grants from the server and drop stale account data (3678e23)
  • web: prefer a space grant over account grants on a space page (a950fdb)
  • web: refresh and report access grant state (dade0e7)
  • web: reset the author filter per grant and retry transient lookups (29870eb)
  • web: retry failed identity lookups and reset paging per grant (c8aaad6)
  • web: say access logs follow retention rather than never expire (f998295)
  • web: show grant ids and read records, and spell out grant scope (cbab0f5)
  • web: show when a grant’s reads fail to load (5ecb93a)
  • web: wait for space members before matching access grants (15a4761)
  • write audited setting changes and their events together (72960b2)
  • add account-scoped space moderation routes (6822372)
  • add space access grants (7c47ced)
  • add the spaces:inspect permission (a3d0932)
  • gate the space inspector behind an instance setting (8104652)
  • keep space access events on their own retention schedule (f4ce85a)
  • link access grant events to their grant (cc38831)
  • protect space access events from manual purges (142daee)
  • require an access grant to read space contents (2e51a61)
  • return the profile avatar from identity resolution (ae92fea)
  • run locally-managed cloudflare tunnels from a credentials file (0fde7e3)
  • web: add space inspector settings (ecf55ae)
  • web: add the account view for space moderation (197eef3)
  • web: list reads under their grant in the event log (8d833ce)
  • web: request and expire space access grants in the dashboard (be1c28c)
  • web: show avatars and invalid handles in the space inspector (c7f8b93)
  • web: show handles instead of DIDs in the space inspector (29831d7)

Pre-release 2026-10-07

  • allow only space admins to list members (d5d56e8)
  • block network lexicon add until the nsid resolves (01d836e)
  • handle backfill on network lexicon add (39d449d)
  • keep a primary domain if it disappears mid-switch (975ff54)
  • let super admins read spaces with getSpace (4119d87)
  • only log script.executed when verbose event logging is on (f967630), closes #113
  • refuse the platform key everywhere it isn’t allowed (a0e97c2)
  • refuse to delete the last domain (8d32268)
  • show backfill switch when resolved lexicon is type record (3b81d4b)
  • web: keep backfill dialog actions and account suggestions on screen (72987d1)
  • add admin endpoints for moderating spaces (393cf18)
  • add PLATFORM_API_KEY_HASH and JOB_WORKER_CONCURRENCY config (a357aad)
  • authenticate a managed-hosting platform key (b55d571)
  • let the platform key set the super user (a151ec0)
  • run several job workers at once (3a21e27)
  • show when a hosting platform manages the instance (d0a3f44)
  • web: add spaces moderation pages to the dashboard (0c36f5b)

Pre-release 2026-10-07

  • allow only space admins to list members (d5d56e8)
  • block network lexicon add until the nsid resolves (01d836e)
  • handle backfill on network lexicon add (39d449d)
  • keep a primary domain if it disappears mid-switch (975ff54)
  • let super admins read spaces with getSpace (4119d87)
  • only log script.executed when verbose event logging is on (f967630), closes #113
  • refuse the platform key everywhere it isn’t allowed (a0e97c2)
  • refuse to delete the last domain (8d32268)
  • show backfill switch when resolved lexicon is type record (3b81d4b)
  • web: keep backfill dialog actions and account suggestions on screen (72987d1)
  • add admin endpoints for moderating spaces (393cf18)
  • add PLATFORM_API_KEY_HASH and JOB_WORKER_CONCURRENCY config (a357aad)
  • authenticate a managed-hosting platform key (b55d571)
  • let the platform key set the super user (a151ec0)
  • run several job workers at once (3a21e27)
  • show when a hosting platform manages the instance (d0a3f44)
  • web: add spaces moderation pages to the dashboard (0c36f5b)

Pre-release 2026-10-06

  • resolve a workspace dependency down the channel chain (728dc55)

Pre-release 2026-10-06

  • feat!: run scripts in an interpreter plugin (e916df7)
  • bind table filters by type (750e259)
  • build the interpreter fixture in the playwright job (d0a1882)
  • build the plugin fixtures from one list and bump wasmtime to 49.0.2 (3d79ea1)
  • correct record filters and sorts on Postgres (1b961c4)
  • dead-letter a missing interpreter without retrying (e200906)
  • enforce the script instruction limit and report error lines (bcdd76c)
  • expire labels and plugin key-value entries on Postgres (d1f53bb)
  • record the error kind in dead-letter rows (6462eb6)
  • return a correlation id for host-origin script failures (45d7edb)
  • route the script kind through the trigger lookup (dd5b715)
  • skip scripts whose language has no interpreter (550949b)
  • stub the codemod bin in the Dockerfile and bump wasmtime to 49.0.1 (658742f)
  • switch to record envelopes for PDS reads (a760721)
  • wire up external auth token refresh (68d0d18)
  • add functionality to support happyview.atproto library (a358ace)
  • add functionality to support happyview.linked-repos and happyview.jobs libraries (f2a030f)
  • add functionality to support happyview.spaces library (ccd5d3d)
  • add internal.json library (79124d3)
  • add interpreter lookup and script input builder (a94bdcc)
  • add plugin SDK crate (2f72c29)
  • add script limits to instance settings (4677450)
  • add support for network:request:defined as a plugin capability (670ec9c)
  • add support for caller capabilities to the plugin SDK (9983007)
  • add support for interpreter plugins (76faa06)
  • add support for the new db plugins (536e227)
  • add tid, time, and logging as built-in libraries (dd99edd)
  • add v2 -> v3 codemod CLI (83d055d)
  • expose codemod thru admin API and dashboard (8ca8f71)
  • give space access independent read and write booleans (f21df77)
  • name a space’s type spaceType on the plugin surface (ba0fef2)
  • new infrastructure for plugins v2 (e7f2312)
  • preserve some additional v2 functionality during codemod (f1eaee4)
  • put mlua behind a non-default lua-reference feature (f90b880)
  • refuse scripts whose language has no interpreter (83339cc)
  • refuse to save scripts that use removed globals (2b5c0be)
  • remove the v2 Lua globals (0fa638f)
  • run job scripts through the interpreter (1f8ace8)
  • run record-event and label scripts through the interpreter (0ea1f3e)
  • run XRPC scripts through the interpreter (2393261)
  • update auth plugins for manifest v2 (671f823)
  • update editor templates for v3 (7c2b1cc)
  • validate saved scripts through the interpreter (421b44d)
  • Scripts no longer run inside HappyView. A script runs in an interpreter plugin, and HappyView ships none, so a fresh or upgraded instance can neither save nor run a script until one is installed. Boot warns when none is. Until then a save is refused with a 400, an XRPC query or procedure answers 503, a record or label event is dead-lettered on the first attempt and let through, and a job fails. The Lua interpreter has no published release yet, so installing one means building it from the plugins repository.
  • Plugin manifests must declare api_version “2” and their capabilities. One at “1” is refused at load for every plugin type, so a v2 auth plugin is absent until it is republished — check the boot log.
  • The v2 script globals are gone; a stored script keeps working until it reads one, and the codemod rewrites it. The instruction limit is now enforced, where v2 installed its hook on the wrong thread and never fired it, alongside a new 10-second wall clock and a 64 MiB per-run memory ceiling. Jobs are exempt from the first two. A script that quietly ran long in v2 can fail in v3.
  • Dead-letter and job error columns lead with the failure’s category where v2 wrote a host stage prefix, and an unrecognised script_type is a 400 rather than a 422. A library record read answers an envelope rather than a flat row; the public XRPC query routes keep their flat shape. A space’s type is spaceType on the plugin and script surfaces. A default build compiles no Lua at all.
  • v2 globals are removed See packages/docs/content/docs/guides/upgrading-to-v3.md.

Signed-off-by: Trezy tre@trezy.com

Pre-release 2026-10-05

  • block network lexicon add until the nsid resolves (01d836e)
  • handle backfill on network lexicon add (39d449d)
  • show backfill switch when resolved lexicon is type record (3b81d4b)

Pre-release 2026-10-05

  • let super admins read spaces with getSpace (4119d87)
  • add admin endpoints for moderating spaces (393cf18)
  • web: add spaces moderation pages to the dashboard (0c36f5b)

Pre-release 2026-10-05

  • allow only space admins to list members (d5d56e8)

Released 2026-10-02

  • accept spaceType when creating a space (e4e54a6)
  • accept write notifications from the writer’s repo host (1cc7d63)
  • address 2 security vulnerabilities (RUSTSEC-2026-0316 and RUSTSEC-2026-0253) (467d850)
  • check read access before minting member-list space credentials (a478768)
  • collect expired labels on both backends (169200f)
  • convert JSONB columns to TEXT to prevent postgres breakage (c69ae41)
  • enforce space credential lifetime limits (7e2cdc2)
  • honour the single space policy older clients send (f214424)
  • issue space credentials for ten minutes (38e0e7c)
  • keep an invite’s read and write access independent (b0b1c0e)
  • keep serving addMember for clients that predate putMember (454c33f)
  • look a record up by external id on Postgres (2ea0553)
  • name the repo revision repoRev in write notifications (c98b291)
  • name unknown spaces and accept bare space host audiences in notifyWrite (087b1fe)
  • notify registered syncers of writes from every author (56fa75f)
  • notify registered syncers when a space is deleted (e7f1db8)
  • page listRepos by space revision (3f36ad1)
  • reach managing apps through their service entry (00804ea)
  • read a plugin’s key-value store on Postgres (9e52d9f)
  • refuse delegation tokens that were already exchanged (127e32a)
  • reject service auth tokens bound to a different method (a1dd8bf)
  • reject write notifications from writers the space does not admit (b55e6e8)
  • return the delegation token as token (3e84165)
  • revoke space credentials when a member loses read access (805b4ab)
  • sign space credentials, service auth, and commits with low-S signatures (a1d97bd)
  • surface a label sweep that could not run (ec56ed7)
  • use correct page name for record/label scripts page (f674c75)
  • use the lexicon’s names for space credential errors (cb35b6e)
  • accept space credentials with HTTP message signatures (9333382)
  • add includeValues option to listRecords (3a75a76)
  • add put_member to the Lua spaces API (ba918ac)
  • advertise HappyView as a space host in its DID document (c693ac4)
  • bind space credentials to the key that signs for them (c5a55f1)
  • filter listSpaces by spaceType (07f0e30)
  • forward write notifications to syncers as notifyWrite calls (145ba64)
  • make HappyView the authority for spaces it creates (674331d)
  • register syncers for write notifications by service identifier (0c8afee)
  • sequence space updates with a space-wide revision (31c6182)
  • serve listRepos from the space writer set (0079d6f)
  • sign space credentials with the instance space key (3095e11)
  • sweep native space repos for writes whose notification was lost (d608a16)
  • tell native repo hosts when space credentials are revoked (a0dd8ed)
  • verify HTTP message signatures for space credentials (1e41e61)

Pre-release 2026-10-01

  • name the repo revision repoRev in write notifications (c98b291)
  • page listRepos by space revision (3f36ad1)

Pre-release 2026-09-30

  • collect expired labels on both backends (169200f)
  • keep an invite’s read and write access independent (b0b1c0e)
  • look a record up by external id on Postgres (2ea0553)
  • read a plugin’s key-value store on Postgres (9e52d9f)
  • surface a label sweep that could not run (ec56ed7)

Pre-release 2026-09-30

  • address 2 security vulnerabilities (RUSTSEC-2026-0316 and RUSTSEC-2026-0253) (467d850)

Pre-release 2026-09-30

  • accept write notifications from the writer’s repo host (1cc7d63)
  • check read access before minting member-list space credentials (a478768)
  • convert JSONB columns to TEXT to prevent postgres breakage (c69ae41)
  • honour the single space policy older clients send (f214424)
  • issue space credentials for ten minutes (38e0e7c)
  • keep serving addMember for clients that predate putMember (454c33f)
  • notify registered syncers of writes from every author (56fa75f)
  • notify registered syncers when a space is deleted (e7f1db8)
  • reach managing apps through their service entry (00804ea)
  • refuse delegation tokens that were already exchanged (127e32a)
  • reject service auth tokens bound to a different method (a1dd8bf)
  • reject write notifications from writers the space does not admit (b55e6e8)
  • revoke space credentials when a member loses read access (805b4ab)
  • accept space credentials with HTTP message signatures (9333382)
  • add put_member to the Lua spaces API (ba918ac)
  • advertise HappyView as a space host in its DID document (c693ac4)
  • bind space credentials to the key that signs for them (c5a55f1)
  • forward write notifications to syncers as notifyWrite calls (145ba64)
  • make HappyView the authority for spaces it creates (674331d)
  • register syncers for write notifications by service identifier (0c8afee)
  • sequence space updates with a space-wide revision (31c6182)
  • serve listRepos from the space writer set (0079d6f)
  • sign space credentials with the instance space key (3095e11)
  • sweep native space repos for writes whose notification was lost (d608a16)
  • tell native repo hosts when space credentials are revoked (a0dd8ed)
  • verify HTTP message signatures for space credentials (1e41e61)

Pre-release 2026-09-23

  • add includeValues option to listRecords (3a75a76)

Released 2026-09-18

  • add api client duplication (b7ee257), closes #101
  • address interop changes (a2f347e)
  • better editor navigation (1d5bd97), closes #76
  • better formatting for linked repo auth pre-page (9c373f6)
  • oauth-client-browser: accept DIDs in login methods (157628b), closes #89
  • oauth-client-browser: add dop headers to prepareLogin (aebf39c), closes #90
  • prevent account-level labels from being deleted (ed57089), closes #87
  • read self authority in space scopes as the session’s user (bdbb71b)
  • resolve PDS endpoints through the configured PLC directory (6ae9d5d)
  • resolve security advisories (f28c862)
  • resolve security advisories (d1f113e)
  • resolve security advisories (9133c91)
  • send repo and omit a null swapRecord when forwarding space writes (b727b9a)
  • add support for multi-did backfill (fc2c56b), closes #75
  • align atproto spaces with the alpha spec (b1d0b1f)
  • dashboard: add typeahead for network lexicon NSIDs (powrred by lexicon.garden) (646b0f2)
  • migrate space data to PDSes that support spaces (9f63bb0)

Pre-release 2026-09-16

  • better formatting for linked repo auth pre-page (9c373f6)
  • oauth-client-browser: accept DIDs in login methods (157628b), closes #89
  • oauth-client-browser: add dop headers to prepareLogin (aebf39c), closes #90

Pre-release 2026-09-15

  • better editor navigation (1d5bd97), closes #76
  • prevent account-level labels from being deleted (ed57089), closes #87

Pre-release 2026-09-15

  • add support for multi-did backfill (fc2c56b), closes #75

Pre-release 2026-09-15

  • dashboard: add typeahead for network lexicon NSIDs (powrred by lexicon.garden) (646b0f2)

Pre-release 2026-09-15

  • resolve security advisories (d1f113e)

Pre-release 2026-09-15

  • read self authority in space scopes as the session’s user (bdbb71b)
  • resolve PDS endpoints through the configured PLC directory (6ae9d5d)
  • send repo and omit a null swapRecord when forwarding space writes (b727b9a)

Pre-release 2026-09-15

  • resolve security advisories (f28c862)
  • resolve security advisories (9133c91)
  • align atproto spaces with the alpha spec (b1d0b1f)
  • migrate space data to PDSes that support spaces (9f63bb0)

Released 2026-09-10

  • add flag indicating whether the client is confidential (94773a3)
  • leverage the confidential client flag from HappyView (4142df1)

Pre-release 2026-09-10

  • add flag indicating whether the client is confidential (94773a3)
  • leverage the confidential client flag from HappyView (4142df1)

Released 2026-09-10

  • add client assertion minting to the SDKs (4a870d2)
  • allow public api clients to mint client assertions (a95accd)
  • prompt existing operators to enable telemetry (8888753)
  • unify app version resolution (df64522)
  • use correct version in telemetry (22ec141)

Pre-release 2026-09-10

  • add client assertion minting to the SDKs (4a870d2)

Pre-release 2026-09-10

  • allow public api clients to mint client assertions (a95accd)

Pre-release 2026-09-10

  • prompt existing operators to enable telemetry (8888753)
  • use correct version in telemetry (22ec141)

Pre-release 2026-09-04

  • unify app version resolution (df64522)

Released 2026-09-03

  • clean up lint issues in dashboard (bf2745c)
  • ensure dpop keys are included with auth requests (2588cd5)
  • move sdk builds to github runners to maintain provenance for trusted publishing (3564574)
  • prevent race condition causing sessions to be destroyed when many session requests are made rapidly (82af2d2)
  • retire previous sessions before registering new one (0d6f3bf)
  • revoke sessions with the PDS when they’re destroyed (71a2147)
  • use correct keys in metrics tests (b762464)
  • use trusted publishing for npm packages (626aa70)
  • add confidential session support to SDKs (3fd7f6b)
  • add opt-in telemetry (eb46b55)
  • allow jwks rotation without breaking active sessions (52c9b91)
  • allow JWKSs to be revoked (16184f0)
  • update HappyView internal clients to use confidential sessions (ccc6e71)
  • use confidential sessions for API clients (dc1ddd9)

Pre-release 2026-09-03

  • move sdk builds to github runners to maintain provenance for trusted publishing (3564574)

Pre-release 2026-09-02

  • use correct keys in metrics tests (b762464)
  • use trusted publishing for npm packages (626aa70)

Pre-release 2026-09-01

  • clean up lint issues in dashboard (bf2745c)
  • prevent race condition causing sessions to be destroyed when many session requests are made rapidly (82af2d2)
  • retire previous sessions before registering new one (0d6f3bf)
  • revoke sessions with the PDS when they’re destroyed (71a2147)
  • add confidential session support to SDKs (3fd7f6b)
  • allow jwks rotation without breaking active sessions (52c9b91)
  • allow JWKSs to be revoked (16184f0)
  • update HappyView internal clients to use confidential sessions (ccc6e71)
  • use confidential sessions for API clients (dc1ddd9)

Pre-release 2026-08-25

  • ensure dpop keys are included with auth requests (2588cd5)

Released 2026-08-21

  • create backfill job when adding a lexicon with backfill: true (7f824b2)
  • handle xrpc proxy correctly (7bc0d16)
  • onboarding docs urls (b568f5a)
  • prevent creating a lexicon without an ID (011cc41), closes #86
  • prevent post-save dirty guard from firing on save (c6f9402)
  • resolve did when adding a user by handle (0c9598f), closes #85
  • update h2 crate to resolve a security advisory (6ae74eb)

Pre-release 2026-08-20

  • onboarding docs urls (b568f5a)
  • prevent post-save dirty guard from firing on save (c6f9402)
  • resolve did when adding a user by handle (0c9598f), closes #85

Pre-release 2026-08-19

  • prevent creating a lexicon without an ID (011cc41), closes #86

Pre-release 2026-08-19

  • create backfill job when adding a lexicon with backfill: true (7f824b2)
  • update h2 crate to resolve a security advisory (6ae74eb)

Pre-release 2026-08-18

  • handle xrpc proxy correctly (7bc0d16)

Released 2026-08-15

  • match official spec for nsid validation (cb632fe)
  • abstract js nsid validation to new package (6290d83)

Pre-release 2026-08-15

  • match official spec for nsid validation (cb632fe)
  • abstract js nsid validation to new package (6290d83)

Released 2026-08-13

  • allow event logs to be purged (0d0ef01)
  • put record skip event logs behind verbose logging (0d18052)

Pre-release 2026-08-11

  • allow event logs to be purged (0d0ef01)

Released 2026-08-05

  • give appropriate errors when trying to write to an unauthorized repo (2764f1d)
  • inherit_auth no longer stalls background jobs when using SQLite (be45502)
  • prevent an error that causes logout to fail under some circumstances (d2fdaa2)
  • prevent backfill deadlocks (5d840f3)
  • prevent jetstream deletes from being skipped when a lexicon has no custom script (fe97420), closes #80
  • prevent proper CBOR encoding from invalidating existing attestations (ee49db2)
  • run cid backfill automatically (bf4517c)
  • stop updating indexed_at before changes come from the network (74f5c56)
  • support unpadded base64 in bytes fields (0ed1ce3)
  • update deps to eliminate security gaps (51ff857)
  • use real CIDs for space content (1e3b5a7)
  • verify_signature now raises instead of returning false when it cant check a signature (1e0ef58)
  • add better error reporting for backfills (bf2844e)
  • add support for linked repos (a96c3fd)
  • big scope builder improvements (aa6d308)
  • update permissioned spaces to match Dans dev diary 7 (99ee756)

Pre-release 2026-08-05

  • prevent backfill deadlocks (5d840f3)
  • add better error reporting for backfills (bf2844e)

Pre-release 2026-08-03

  • update deps to eliminate security gaps (51ff857)

Pre-release 2026-08-03

  • prevent jetstream deletes from being skipped when a lexicon has no custom script (fe97420), closes #80

Pre-release 2026-08-03

  • give appropriate errors when trying to write to an unauthorized repo (2764f1d)
  • prevent an error that causes logout to fail under some circumstances (d2fdaa2)
  • support unpadded base64 in bytes fields (0ed1ce3)
  • verify_signature now raises instead of returning false when it cant check a signature (1e0ef58)
  • big scope builder improvements (aa6d308)

Pre-release 2026-08-02

  • stop updating indexed_at before changes come from the network (74f5c56)

Pre-release 2026-07-31

  • inherit_auth no longer stalls background jobs when using SQLite (be45502)
  • add support for linked repos (a96c3fd)

Pre-release 2026-07-25

  • run cid backfill automatically (bf4517c)

Pre-release 2026-07-21

  • prevent proper CBOR encoding from invalidating existing attestations (ee49db2)
  • use real CIDs for space content (1e3b5a7)
  • update permissioned spaces to match Dans dev diary 7 (99ee756)

Released 2026-07-18

  • add independent logging for jobs (6035c55)

Released 2026-07-17

  • inherit_auth now properly transfers auth from XRPC script to jobs (541c4a9)

Released 2026-07-16

  • add missing space write APIs (0c84ff6)
  • enforce allowedCollections when creating records in a space (4db67ab)

Released 2026-07-15

  • display all available permissions when creating API keys (b30952c)

Released 2026-07-09

  • escape metacharacters in find_blob_author_did (a089929)
  • remove user drop from e2e setup (e3a82a0)
  • revert to root user in Dockerfile (8328c73)
  • verify CIDs (a3233cc)

Released 2026-07-08

  • move drop to app user after setup (f3fbc2b)
  • secret comparisons now use constant time (bcb45bf)

Released 2026-07-08

  • add replay protection to dpop proofs (2348c5c)
  • better handling for empty TOKEN_ENCRYPTION_KEY (2a11841)
  • implement revocation for space credentials (10037f6)
  • issue space credentials for iss, not for the caller (f016508)
  • prevent listRepos from leaking space participant lists (0d2d829)
  • prevent error details from leaking to external users (5a7fa4d)
  • prevent lockouts from failed super admin transfer (6dc6dc6)
  • revoke member credentials before removing them from a space (f62ccfd)
  • Run Docker image as non-root user (3657056)
  • update deps (862b36d)

Released 2026-07-07

  • ensure superadmin-created admin API keys respect scopes (af9a4b1)
  • prevent read_self from escalating during access merge (19f4199)
  • prevent CORS from reflecting credentials to arbitrary origins (0ad78af)
  • prevent db.raw access to sensitive tables (815843f)
  • prevent identity spoofing via /oauth/sessions (1e4b42a)
  • prevent use of default session secret (0d288df)
  • prevent victim record overwrite (28cf563)
  • require auth on space notification endpoints (c12a9e3)
  • validate JWT aud in middleware (9e17097)

Released 2026-07-07

  • add better validation to spaces impl (a28cebc)
  • fix Playwright tests (9befd0b)
  • out-of-order migrations (for real this time) (60a4cd6)
  • add support for async jobs (bbf045b)
  • align with final permissioned spaces proposal (eb86b23)

Pre-release 2026-07-07

  • add better validation to spaces impl (f68a43f)
  • align with final permissioned spaces proposal (a1548f1)

Pre-release 2026-07-05

  • fix Playwright tests (c9cbd88)
  • out-of-order migrations (for real this time) (fdcc78f)
  • add support for async jobs (408359f)

Pre-release 2026-07-05

  • fix Playwright tests (c9cbd88)
  • out-of-order migrations (for real this time) (fdcc78f)
  • add support for async jobs (408359f)

Released 2026-06-30

  • out-of-order migrations (for real this time) (eef213e)

Released 2026-06-30

  • out-of-order migrations (044c03f)

Released 2026-06-30

  • add better reporting and proper resume on backfills (bdd9bc9)
  • add better retry logic for backfills (d4ae6a7)
  • add permissions to the internal API (87a19e9)
  • add permissions to the internal API (a119510)
  • add reauth button for service identity (a2907d9)
  • add reauth button for service identity (c72c398)
  • add reauth button for service identity (6b3e797)
  • add success and dead-letter logging to label scripts (c6d7bca)
  • address copilot feedback (bc135cd)
  • allow docker containers to execute HappyView binaries (d1da97b)
  • allow log verbosity toggle to override env var (fe191ce)
  • allow sheets to be much larger (2b379cc)
  • allow sheets to be much larger (efd6140)
  • better handling for PDS errors (0ac3e2c)
  • better icons for stages (c633f09)
  • better pool size accounting when using sqlite (e023d39)
  • build SDKs even if base client has no changes (b3f2dad)
  • bulk insert in discovery, seed records on resume, dedupe retry helper, add cancel tests (4e74bcd)
  • chunk bulk inserts for sqlite, use rows_affected for counts, faster cancel checks, users page a11y (2947a90)
  • clamp backfill concurrency values (de42a7f)
  • cleanup broken sessions (7c4ad56)
  • cleanup derelict items after successful auth (6c76088)
  • dead-letters: admin endpoints span both legacy + new tables (e720b2b)
  • delegate to backend for network lexicon resolution (606c752), closes #49
  • display sync warning after refresh (17a5f03)
  • display sync warning after refresh (e599a1f)
  • display sync warning after refresh (2833ab3)
  • dont block space creds on client key check (6108edd)
  • dont refresh tokens on 4xx status codes (ca5b6a5)
  • dont use use timestamptz in migrations (Ill remember that… one day) (24320ba)
  • dynamic cookie security handling and harden tests for service proxies (9732a21)
  • dynamic cookie security handling and harden tests for service proxies (d609358)
  • dynamic cookie security handling and harden tests for service proxies (584eeeb)
  • expose approved oauth scopes to clients (0a5b826)
  • expose oauth scopes via the SDKs (ae69736)
  • filter nesting was allowed to 6 levels instead of 5 (59b9d5b)
  • fix base path not being respected by trailing slash redirects (2d1d60d)
  • generate missing IDs for dead letters (671a753), closes #20
  • get max connections from Postgres instead of current connections (79e794c)
  • handle reauthenticating to service entry accounts (2c83781)
  • handle reauthenticating to service entry accounts (3234b9c)
  • handle reauthenticating to service entry accounts (feac3d0)
  • handle the scope format returned from Bluesky PDS (2066c7f)
  • harden backfill cancel idempotency, SQL injection guard, DID retry cap, and row a11y (92c8a98)
  • harden the setup wizard (a210849)
  • harden the setup wizard (ed663f6)
  • harden the setup wizard (13c855b)
  • issues with backfill stage/status separation and progress tracking (6da4ac8)
  • make backfill progress headings more accessible (4e80754)
  • make the service entry dashboard more user friendly (c5111c7)
  • make the service entry dashboard more user friendly (78d097f)
  • make the service entry dashboard more user friendly (6e0d59e)
  • move record info into sheets (d129d26)
  • move user permission management into sheets (e79b9f1), closes #23
  • move user permission management into sheets (1d8b400), closes #23
  • only count successful PDS resolutions, cap retry-after, update backfill docs (f53e545)
  • port service entry design optimisations to other pages (1485f4b)
  • port service entry design optimisations to other pages (bba3a20)
  • port service entry design optimisations to other pages (8d8b92e)
  • post-conflict resolution cleanup (b4676f1)
  • prevent backfill jobs from locking locking out pause/cancellation (92e0a21)
  • prevent base path collision (4ae8c29)
  • prevent concurrency settings from being set to invalid values (c5b4b87)
  • prevent creation of API clients that would break HappyView core client (cd10300)
  • prevent dead letters from being created without an ID (50a3786), closes #20
  • prevent errors with IPv6 addresses when building loopback clients (23e858b)
  • prevent false match rewrites when a base path is in use (2a9bc80)
  • prevent opening “discovering trepos stage” from locking the ui thread (13e2e63)
  • prevent reprocessing of sse (c56bc77)
  • prevent unauthenticated users from being redirected to setup (fe3529b)
  • prevent unauthenticated users from being redirected to setup (66413a7)
  • prevent unauthenticated users from being redirected to setup (98af6e4)
  • prevent unauthorized privilege escalation (4f97576)
  • rate-limit unauthenticated procedure requests before rejecting (79ea8ef)
  • reduce backfill db contention and sse event flooding for pds discovery and record fetching during backfill (9a3b93d)
  • reject JWT at exact expiry second (aadf092)
  • remove broken timestamping (908efca)
  • remove broken timestamping (b9ba42d)
  • remove broken timestamping (3cbe22e)
  • remove cleanup delay caused by tick eater (aa5e842)
  • remove clippy suppression (4db01f0)
  • remove counts from records dropdowns (6be8848)
  • remove duplicate exports in api.ts from merge (a4f990f)
  • remove forced HappyView redirect URI from API client creation (849f097)
  • remove oauth redirect hop, and add explicit redirect for the root url (59cbd39)
  • remove prefix typo from db.query filter generation (230b4d4)
  • remove public record aggregation from permissioned spaces (55cf1b6)
  • remove public record aggregation from permissioned spaces (34c630c)
  • remove public record aggregation from permissioned spaces (55afaaf)
  • remove route dupes (12241ab)
  • remove superfluous early exit on invalid session token (pds concern, not happyview concern) (c274314)
  • replace the base path sentinel in next.js text files (5e128a4)
  • require client key for rate limiting on all XRPC routes (8c578de)
  • reset backfill ui when flushing details (a83a4fa)
  • restore granted_at default in migrations (b4759e9)
  • restore missing log events for verbose logging (d52b31b)
  • restore plc concurrency (ffdd110)
  • restore SDK scopes types after bad conflict resolution (44986ab)
  • restrict Bearer space credentials to space XRPC routes (2598b58)
  • return 404 when dismissing a nonexistent dead letter (909f6f5)
  • scopes types in oauth-client sdk after bad conflict resolution (d49033e)
  • sdk: support the kid param from @atproto/jwk-webcrypto (8a09489)
  • separate backfill db connection pool from main app pool (dfa0d38)
  • update column type in backfill migration (3618d9f)
  • update scopes type (635bcd6)
  • update the base path rewrite to skip Nexts basePath config (8470d66)
  • use correct permission IDs in dashboard (cf4a984), closes #24
  • use correct permission IDs in dashboard (a37a254), closes #24
  • use cursors for pagination in spaces endpoints (7bb7eb6)
  • use dpop thumbprints to enable multi-device auth (28f7fa6)
  • use NULL instead of empty string for local-only record CID (55e65f7)
  • use stateRef pattern in ScriptForm to avoid exhaustive-deps suppression (c8e5d5c)
  • use the correct connection pool for record upserts (81a63c8)
  • use the correct cursors when paginating spaces (8b65ff6)
  • virtualize backfill details and move event stream into a worker (c741e75)
  • add filter to db.query (8b1ae86)
  • add backfill concurrency settings (67d3e35)
  • add blob upload and download utilities (44ad24c)
  • add collection column to dead_letter_scripts so we can ditch second-level filtering (64b1031)
  • add control for experiments to the dashboard (6adb5ee)
  • add control for experiments to the dashboard (de7a94e)
  • add control for experiments to the dashboard (3d3d7c7)
  • add more detailed information to backfill UI (5d891b9)
  • add new TID functions (523e19f), closes #16
  • add oauth-client-node SDK (488a6df)
  • add suffix filter to GET /admin/scripts and use it in lexicon detail (5eda38c)
  • add support for nexted syntax in field selectors (4f2e027)
  • add support for service proxying (d5fa751)
  • add support for service proxying (86d915c)
  • add support for service proxying (d16ca01)
  • add support for session hooks (e1a6b00)
  • allow backfill jobs to be paused and resumed (25084fb)
  • allow backfills to be cancelled (953c786)
  • allow the base path to be configured (ee8e541)
  • dashboard: scripts grouped by trigger family + lexicon targeting panel (678da37)
  • increase backfill record batch inserts (9238884)
  • make backfill collection discovery concurrent (231a734)
  • make verbose event logs configurable (2d7f51e)
  • migrate legacy script/index_hook data to scripts table and drop columns (1a37d14)
  • parallelize PDS resolution and record retrieval during backfills (a480799)
  • permissioned spaces implementation (693d678)
  • permissioned spaces implementation (6b3d542)
  • publish node sdk (705c575)
  • recommend restart when backfill concurrency settings dont match existing connection pool size (30b97ef)
  • refactor permissioned spaces to better align with Dan’s implementation (7eb4a03)
  • refactor permissioned spaces to better align with Dan’s implementation (16c3c60)
  • scripts: promote log() to write into event_logs (fb9dfaa)
  • scripts: trigger-keyed scripts subsystem (fe4f84f)
  • update JS SDKs to more closely match their @atproto cousins (77c2083)
  • update JS SDKs to more closely match their @atproto cousins (357a5d3)
  • update JS SDKs to more closely match their @atproto cousins (df717e9)
  • update to latest permissioned data spec (f3875b2)
  • xrpc-proxy: add settings to control the XRPC proxy (63f22d6)
  • xrpc-proxy: add settings to control the XRPC proxy (a89d00f)

Pre-release 2026-06-27

  • address copilot feedback (6d20b2c)
  • update to latest permissioned data spec (c012da5)

Pre-release 2026-06-26

  • add reauth button for service identity (84c61e0)
  • display sync warning after refresh (41d9228)
  • dynamic cookie security handling and harden tests for service proxies (61ae149)
  • handle reauthenticating to service entry accounts (acb4351)
  • harden the setup wizard (266793c)
  • make the service entry dashboard more user friendly (1880a15)
  • port service entry design optimisations to other pages (a533e40)
  • prevent unauthenticated users from being redirected to setup (b2938c5)
  • remove broken timestamping (5536357)
  • add support for service proxying (0e42946)

Pre-release 2026-06-26

  • add reauth button for service identity (c72c398)
  • display sync warning after refresh (e599a1f)
  • dynamic cookie security handling and harden tests for service proxies (d609358)
  • handle reauthenticating to service entry accounts (3234b9c)
  • harden the setup wizard (ed663f6)
  • make the service entry dashboard more user friendly (78d097f)
  • port service entry design optimisations to other pages (bba3a20)
  • prevent unauthenticated users from being redirected to setup (66413a7)
  • remove broken timestamping (b9ba42d)
  • add support for service proxying (86d915c)

Pre-release 2026-06-18

  • add blob upload and download utilities (63addce)

Pre-release 2026-06-13

  • handle the scope format returned from Bluesky PDS (47eae10)

Released 2026-05-27

  • dont use use timestamptz in migrations (Ill remember that… one day) (b131010)

Released 2026-05-27

  • restore granted_at default in migrations (2b6ca58)

Released 2026-05-27

  • add success and dead-letter logging to label scripts (c74e317)
  • allow docker containers to execute HappyView binaries (9265641)
  • allow log verbosity toggle to override env var (e8268c4)
  • better pool size accounting when using sqlite (3a0fb9c)
  • clamp backfill concurrency values (9c2847a)
  • dead-letters: admin endpoints span both legacy + new tables (4a576ea)
  • filter nesting was allowed to 6 levels instead of 5 (698c099)
  • get max connections from Postgres instead of current connections (66b4804)
  • make backfill progress headings more accessible (f83f150)
  • post-conflict resolution cleanup (02e6e1a)
  • prevent backfill jobs from locking locking out pause/cancellation (62adab0)
  • prevent concurrency settings from being set to invalid values (3d31877)
  • prevent opening “discovering trepos stage” from locking the ui thread (016b0e5)
  • prevent reprocessing of sse (ce68c66)
  • reduce backfill db contention and sse event flooding for pds discovery and record fetching during backfill (ec860a5)
  • remove cleanup delay caused by tick eater (bd745ae)
  • remove clippy suppression (6a34d5f)
  • remove counts from records dropdowns (dd6d9ae)
  • remove prefix typo from db.query filter generation (cd411d6)
  • remove superfluous early exit on invalid session token (pds concern, not happyview concern) (bc06766)
  • reset backfill ui when flushing details (1cf8f75)
  • restore missing log events for verbose logging (d38d05d)
  • restore plc concurrency (3aa10b5)
  • return 404 when dismissing a nonexistent dead letter (280a837)
  • sdk: support the kid param from @atproto/jwk-webcrypto (e12f526)
  • separate backfill db connection pool from main app pool (c14a168)
  • use dpop thumbprints to enable multi-device auth (454d239)
  • use NULL instead of empty string for local-only record CID (21952d7)
  • use stateRef pattern in ScriptForm to avoid exhaustive-deps suppression (4bcb0b1)
  • use the correct connection pool for record upserts (22f3ba9)
  • virtualize backfill details and move event stream into a worker (3e33527)
  • add filter to db.query (18a01fd)
  • add backfill concurrency settings (f5ab1b4)
  • add collection column to dead_letter_scripts so we can ditch second-level filtering (7283c21)
  • add more detailed information to backfill UI (66fe12a)
  • add suffix filter to GET /admin/scripts and use it in lexicon detail (527aed3)
  • add support for nexted syntax in field selectors (950594b)
  • allow backfill jobs to be paused and resumed (bd65caf)
  • dashboard: scripts grouped by trigger family + lexicon targeting panel (735e104)
  • increase backfill record batch inserts (7ff501a)
  • make backfill collection discovery concurrent (060cba3)
  • make verbose event logs configurable (4856579)
  • migrate legacy script/index_hook data to scripts table and drop columns (44cdc21)
  • parallelize PDS resolution and record retrieval during backfills (8f21474)
  • recommend restart when backfill concurrency settings dont match existing connection pool size (b0d382b)
  • scripts: promote log() to write into event_logs (673de09)
  • scripts: trigger-keyed scripts subsystem (0fd7601)

Pre-release 2026-05-27

  • add success and dead-letter logging to label scripts (c74e317)
  • dead-letters: admin endpoints span both legacy + new tables (4a576ea)
  • post-conflict resolution cleanup (02e6e1a)
  • remove clippy suppression (6a34d5f)
  • return 404 when dismissing a nonexistent dead letter (280a837)
  • use NULL instead of empty string for local-only record CID (21952d7)
  • use stateRef pattern in ScriptForm to avoid exhaustive-deps suppression (4bcb0b1)
  • add collection column to dead_letter_scripts so we can ditch second-level filtering (7283c21)
  • add suffix filter to GET /admin/scripts and use it in lexicon detail (527aed3)
  • dashboard: scripts grouped by trigger family + lexicon targeting panel (735e104)
  • migrate legacy script/index_hook data to scripts table and drop columns (44cdc21)
  • scripts: promote log() to write into event_logs (673de09)
  • scripts: trigger-keyed scripts subsystem (0fd7601)

Pre-release 2026-05-27

  • remove superfluous early exit on invalid session token (pds concern, not happyview concern) (bc06766)

Pre-release 2026-05-26

  • allow docker containers to execute HappyView binaries (9265641)

Pre-release 2026-05-26

  • remove prefix typo from db.query filter generation (cd411d6)

Pre-release 2026-05-26

  • use dpop thumbprints to enable multi-device auth (454d239)

Pre-release 2026-05-26

  • reduce backfill db contention and sse event flooding for pds discovery and record fetching during backfill (ec860a5)
  • sdk: support the kid param from @atproto/jwk-webcrypto (e12f526)

Pre-release 2026-05-24

  • allow log verbosity toggle to override env var (e8268c4)
  • better pool size accounting when using sqlite (3a0fb9c)
  • clamp backfill concurrency values (9c2847a)
  • get max connections from Postgres instead of current connections (66b4804)
  • make backfill progress headings more accessible (f83f150)
  • prevent backfill jobs from locking locking out pause/cancellation (62adab0)
  • prevent concurrency settings from being set to invalid values (3d31877)
  • prevent opening “discovering trepos stage” from locking the ui thread (016b0e5)
  • prevent reprocessing of sse (ce68c66)
  • remove cleanup delay caused by tick eater (bd745ae)
  • remove counts from records dropdowns (dd6d9ae)
  • reset backfill ui when flushing details (1cf8f75)
  • restore missing log events for verbose logging (d38d05d)
  • restore plc concurrency (3aa10b5)
  • separate backfill db connection pool from main app pool (c14a168)
  • use the correct connection pool for record upserts (22f3ba9)
  • virtualize backfill details and move event stream into a worker (3e33527)
  • add backfill concurrency settings (f5ab1b4)
  • add more detailed information to backfill UI (66fe12a)
  • allow backfill jobs to be paused and resumed (bd65caf)
  • increase backfill record batch inserts (7ff501a)
  • make backfill collection discovery concurrent (060cba3)
  • make verbose event logs configurable (4856579)
  • parallelize PDS resolution and record retrieval during backfills (8f21474)
  • recommend restart when backfill concurrency settings dont match existing connection pool size (b0d382b)

Pre-release 2026-05-21

  • filter nesting was allowed to 6 levels instead of 5 (698c099)
  • add filter to db.query (18a01fd)
  • add support for nexted syntax in field selectors (950594b)

Released 2026-05-19

  • delegate to backend for network lexicon resolution (afde802), closes #49

Pre-release 2026-05-19

  • delegate to backend for network lexicon resolution (afde802), closes #49

Released 2026-05-14

  • add better reporting and proper resume on backfills (33b56e5)
  • add better retry logic for backfills (a751352)
  • add permissions to the internal API (39d9465)
  • add permissions to the internal API (2b8ec1c)
  • allow sheets to be much larger (dced566)
  • allow sheets to be much larger (7f49a77)
  • better icons for stages (47ee0b0)
  • build SDKs even if base client has no changes (f86de63)
  • bulk insert in discovery, seed records on resume, dedupe retry helper, add cancel tests (274ab01)
  • chunk bulk inserts for sqlite, use rows_affected for counts, faster cancel checks, users page a11y (f25ade7)
  • harden backfill cancel idempotency, SQL injection guard, DID retry cap, and row a11y (25f0955)
  • issues with backfill stage/status separation and progress tracking (54d8e28)
  • move user permission management into sheets (7e6a1f1), closes #23
  • move user permission management into sheets (32942fb), closes #23
  • only count successful PDS resolutions, cap retry-after, update backfill docs (cb3797e)
  • update column type in backfill migration (81c4ea8)
  • use correct permission IDs in dashboard (b258408), closes #24
  • use correct permission IDs in dashboard (66c792f), closes #24
  • use cursors for pagination in spaces endpoints (3e6c561)
  • allow backfills to be cancelled (5a3a4b9)

Pre-release 2026-05-14

  • add better reporting and proper resume on backfills (33b56e5)
  • add better retry logic for backfills (a751352)
  • add permissions to the internal API (39d9465)
  • add permissions to the internal API (2b8ec1c)
  • allow sheets to be much larger (dced566)
  • allow sheets to be much larger (7f49a77)
  • better icons for stages (47ee0b0)
  • build SDKs even if base client has no changes (f86de63)
  • bulk insert in discovery, seed records on resume, dedupe retry helper, add cancel tests (274ab01)
  • chunk bulk inserts for sqlite, use rows_affected for counts, faster cancel checks, users page a11y (f25ade7)
  • harden backfill cancel idempotency, SQL injection guard, DID retry cap, and row a11y (25f0955)
  • issues with backfill stage/status separation and progress tracking (54d8e28)
  • move user permission management into sheets (7e6a1f1), closes #23
  • move user permission management into sheets (32942fb), closes #23
  • only count successful PDS resolutions, cap retry-after, update backfill docs (cb3797e)
  • update column type in backfill migration (81c4ea8)
  • use correct permission IDs in dashboard (b258408), closes #24
  • use correct permission IDs in dashboard (66c792f), closes #24
  • use cursors for pagination in spaces endpoints (3e6c561)
  • allow backfills to be cancelled (5a3a4b9)

Pre-release 2026-05-14

  • add better reporting and proper resume on backfills (33b56e5)
  • add better retry logic for backfills (a751352)
  • add permissions to the internal API (39d9465)
  • allow sheets to be much larger (dced566)
  • better icons for stages (47ee0b0)
  • bulk insert in discovery, seed records on resume, dedupe retry helper, add cancel tests (274ab01)
  • chunk bulk inserts for sqlite, use rows_affected for counts, faster cancel checks, users page a11y (f25ade7)
  • harden backfill cancel idempotency, SQL injection guard, DID retry cap, and row a11y (25f0955)
  • issues with backfill stage/status separation and progress tracking (54d8e28)
  • move user permission management into sheets (7e6a1f1), closes #23
  • only count successful PDS resolutions, cap retry-after, update backfill docs (cb3797e)
  • update column type in backfill migration (81c4ea8)
  • use correct permission IDs in dashboard (b258408), closes #24
  • allow backfills to be cancelled (5a3a4b9)

Pre-release 2026-05-14

  • add permissions to the internal API (2b8ec1c)
  • allow sheets to be much larger (7f49a77)
  • move user permission management into sheets (32942fb), closes #23
  • use correct permission IDs in dashboard (66c792f), closes #24

Pre-release 2026-05-13

  • use cursors for pagination in spaces endpoints (3e6c561)

Pre-release 2026-05-13

  • build SDKs even if base client has no changes (f86de63)

Released 2026-05-13

  • generate missing IDs for dead letters (174b6ef), closes #20
  • move record info into sheets (b814b1c)
  • prevent dead letters from being created without an ID (ea4a340), closes #20

Pre-release 2026-05-13

Pre-release 2026-05-12

  • generate missing IDs for dead letters (174b6ef), closes #20
  • prevent dead letters from being created without an ID (ea4a340), closes #20

Pre-release 2026-05-12

  • move record info into sheets (b814b1c)

Released 2026-05-12

  • cleanup broken sessions (8840ac0)
  • cleanup derelict items after successful auth (9fe1989)
  • dont block space creds on client key check (07c6065)
  • fix base path not being respected by trailing slash redirects (fba918e)
  • prevent base path collision (4f5a8ef)
  • prevent creation of API clients that would break HappyView core client (3ab5e7e)
  • prevent errors with IPv6 addresses when building loopback clients (df77c02)
  • prevent false match rewrites when a base path is in use (73078bf)
  • prevent unauthorized privilege escalation (942a520)
  • rate-limit unauthenticated procedure requests before rejecting (abd9e3d)
  • reject JWT at exact expiry second (27f9cf8)
  • remove duplicate exports in api.ts from merge (deffbd7)
  • remove forced HappyView redirect URI from API client creation (572ca51)
  • remove oauth redirect hop, and add explicit redirect for the root url (fdb6fac)
  • remove public record aggregation from permissioned spaces (91684f3)
  • remove route dupes (ec0f624)
  • replace the base path sentinel in next.js text files (33028b1)
  • require client key for rate limiting on all XRPC routes (671db5a)
  • restore SDK scopes types after bad conflict resolution (2003680)
  • restrict Bearer space credentials to space XRPC routes (d6ae5cd)
  • scopes types in oauth-client sdk after bad conflict resolution (fecc410)
  • update scopes type (992e6e0)
  • use the correct cursors when paginating spaces (11fda6f)
  • add control for experiments to the dashboard (b7bca04)
  • add new TID functions (1f51965), closes #16
  • add oauth-client-node SDK (4ea257c)
  • add support for session hooks (538d033)
  • allow the base path to be configured (a23efe6)
  • permissioned spaces implementation (4ca2bd8)
  • refactor permissioned spaces to better align with Dan’s implementation (6db92e0)
  • update JS SDKs to more closely match their @atproto cousins (1731533)
  • xrpc-proxy: add settings to control the XRPC proxy (267ab7a)

Pre-release 2026-05-12

  • rate-limit unauthenticated procedure requests before rejecting (abd9e3d)
  • reject JWT at exact expiry second (27f9cf8)
  • remove forced HappyView redirect URI from API client creation (572ca51)
  • require client key for rate limiting on all XRPC routes (671db5a)
  • restrict Bearer space credentials to space XRPC routes (d6ae5cd)

Pre-release 2026-05-11

  • dont block space creds on client key check (07c6065)
  • prevent base path collision (4f5a8ef)

Pre-release 2026-05-11

  • prevent creation of API clients that would break HappyView core client (3ab5e7e)
  • prevent unauthorized privilege escalation (942a520)
  • use the correct cursors when paginating spaces (11fda6f)

Pre-release 2026-05-11

  • restore SDK scopes types after bad conflict resolution (2003680)

Pre-release 2026-05-11

  • scopes types in oauth-client sdk after bad conflict resolution (fecc410)

Pre-release 2026-05-11

  • refactor permissioned spaces to better align with Dan’s implementation (9c4b3d7)

Pre-release 2026-05-11

  • refactor permissioned spaces to better align with Dan’s implementation (483c17b)

Pre-release 2026-05-08

  • replace the base path sentinel in next.js text files (d0ade27)

Released 2026-05-08

  • better handling for PDS errors (7863b43)
  • expose approved oauth scopes to clients (d49b6f5)
  • expose oauth scopes via the SDKs (bbcddd0)
  • update the base path rewrite to skip Nexts basePath config (23227a1)

Pre-release 2026-05-08

  • remove oauth redirect hop, and add explicit redirect for the root url (271d270)

Pre-release 2026-05-07

  • update the base path rewrite to skip Nexts basePath config (23227a1)

Pre-release 2026-05-07

  • fix base path not being respected by trailing slash redirects (e312da1)

Pre-release 2026-05-07

  • add atproto/lex headers to prevent CORS errors (f686690)
  • linting error (d9e8fc3)
  • remove public record aggregation from permissioned spaces (bef4361)
  • add control for experiments to the dashboard (3af8470)
  • add oauth-client-node SDK (dedab18)
  • add support for account write delegation (26d57ca)
  • add support for session hooks (4b4b883)
  • allow the base path to be configured (40df9b1)
  • permissioned spaces implementation (190578f)
  • put permissioned spaces behind an experimental flag (ed57c93)
  • update JS SDKs to more closely match their @atproto cousins (193ba3a)
  • xrpc-proxy: add settings to control the XRPC proxy (608e9e7)

Released 2026-05-07

  • dont refresh tokens on 4xx status codes (cde70f7)

Pre-release 2026-05-07

  • add oauth-client-node SDK (dedab18)
  • add support for session hooks (4b4b883)
  • allow the base path to be configured (40df9b1)
  • update JS SDKs to more closely match their @atproto cousins (193ba3a)

v2.5.0 — v2.5.0 - The Permissioned Data Release

Section titled “v2.5.0 — v2.5.0 - The Permissioned Data Release”

Released 2026-05-05

  • remove public record aggregation from permissioned spaces (9ee009f)
  • add control for experiments to the dashboard (83df252)
  • add support for account write delegation (9026232)
  • permissioned spaces implementation (17cc659)
  • put permissioned spaces behind an experimental flag (6b666d7)
  • update JS SDKs to more closely match their @atproto cousins (7b87c36)
  • xrpc-proxy: add settings to control the XRPC proxy (53f63da)

Released 2026-05-03

  • add atproto/lex headers to prevent CORS errors (760e0aa)

Pre-release 2026-05-02

  • add atproto/lex headers to prevent CORS errors (f686690)
  • remove public record aggregation from permissioned spaces (bef4361)
  • add control for experiments to the dashboard (3af8470)

Pre-release 2026-04-30

  • add support for account write delegation (26d57ca)
  • permissioned spaces implementation (190578f)
  • put permissioned spaces behind an experimental flag (ed57c93)

Pre-release 2026-04-29

  • xrpc-proxy: add settings to control the XRPC proxy (608e9e7)

Released 2026-04-28

  • ci: temp disable ATCR pushes (8ed28e5)
  • allow first party API clients to child API clients (cdb69c4)
  • dashboard: warn users before they use transition:generic (7d4c44a)
  • oauth: move third party api client management into built-in XRPCs (fde532d)

Pre-release 2026-04-28

  • ci: temp disable ATCR pushes (8ed28e5)

Pre-release 2026-04-28

  • oauth: move third party api client management into built-in XRPCs (fde532d)

Pre-release 2026-04-27

  • allow first party API clients to child API clients (cdb69c4)

Released 2026-04-27

  • auth: better handling for allowed scopes during oauth (b27b883)

Released 2026-04-26

  • login: add handle autocomplete (4ee385b)

Released 2026-04-25

  • db: convert dead letter resolved_at to TEXT in Postgres setups (deb4aee)
  • sdk: allow client to configure clientId (e76acbe)

Released 2026-04-23

  • sdk: add gh links to packages (718075a)

Released 2026-04-23

  • remove linked accounts page (abe1c04)
  • dashboard: add UI for managing dead letters (0345f0b)

Pre-release 2026-04-22

  • ci: remove ATCR from publish step (f58d189)
  • remove linked accounts page (abe1c04)

Pre-release 2026-04-22

  • dashboard: add UI for managing dead letters (0345f0b)

Released 2026-04-22

  • ci: remove ATCR from publish step (f58d189)

Released 2026-04-22

  • add automatic handling for incompatible db.raw (8a13fdf)
  • add CORS reflection for auth requests (e813713)
  • allow HappyView redirect cookie to be read appropriately (b69c59f)
  • allow session cookies to work cross origin (494cb05)
  • auth: prevent unauthorized users from seeing the dashboard (fcb3ac2)
  • backfill all collections when no collection is selected during backfill creation (5cd2e01)
  • coerce query params based on lexicon schema (38bd0d3)
  • convert plugin config to text column (dade035)
  • convert plugin timestamp columns (9d190cb)
  • copy migrations in image (593d361)
  • create a dummy bin for the build step (7741c8f)
  • dashboard: fix broken interactivity on collection combobox (5cbfc3c)
  • database column type mismatch (3932db0)
  • delete auth redirect cookie before redirecting (2dd8b19)
  • delete auth redirect cookie before redirecting (00d6b8f)
  • display the correct version on the about page (e6504fa)
  • ditch redirect cookies in favor of storing redirect info in the db (52caa37)
  • dont skip HappyView in the external auth callbackloop (210b326)
  • ensure handles are always forced to lowercase during dashboard auth (785b00f)
  • ensure oauth cookies are correctly removed (7dc2443)
  • event-log: prevent double filtering (cf7a227)
  • fix auth tests (0036280)
  • http resolution for labeler websocket connections (405e61a)
  • issue in redirect state capture (9d95cee)
  • lint errors (1436f4c)
  • lint issues (de48479)
  • lint issues (760f50a)
  • make sure auth is passed when necessary in lua scripts (cdde018)
  • missed a variable ref (fc34c9c)
  • pin to debian bookworm, otherwise we have an issue with glibc version (a9a62f0)
  • prevent code blocks from overflowing dialog containers (0618e96)
  • prevent errors on plugin page when user hasn’t set up encryption tokens (41aa70a)
  • prevent permission redirects before permissions are known (2b73757)
  • prevent record backfill from blocking startup (b502295)
  • remove sqlite db from git (134ae00)
  • remove user swap (deaa25a)
  • resolve proper endpoints for labelers (8e6575e)
  • restore reading scopes from redirect uri (8e01945)
  • return the correct host data for plugin secrets (937fa4c)
  • sdk: prevent CI crash if versions are already deployed (3c4a6d0)
  • sdk: take advantage of prior art on crypto from bsky (7df0576)
  • separate scopes on the api client page (0bc0f95)
  • switch from /oauth/client-metadata.json to /oauth-client-metadata.json (b94f90f)
  • switch Tap to sqlite by default (ab7f97b)
  • sync plugin and host body types (fd25cb2)
  • timestamp comparisons when using Postgres (4bd8b2f)
  • update dashboard to use new internal auth (68a1123)
  • update primary domain if PUBLIC_URL changes (5e93653)
  • update types for rate limits (ab909d3)
  • use async calls to get host secrets (753a3af)
  • xrpc: fix XRPC writes to use the new auth system (ed5434f)
  • add about page for debugging (00e92b3)
  • add API clients (3cd960b)
  • add attestation support to atproto api (fbd65b1)
  • add backfill and realtime streaming directly to HappyView (no more Tap dependency) (0bf605e)
  • add builtin oauth, removing AIP dependency (14abcda)
  • add config for oauth screen values (0777d8c)
  • add configurable rate limiting (ca65897)
  • add js sdks (3fd4645)
  • add labelers to the dashboard (4ee83d8)
  • add Lua module for atproto (a34fb0d)
  • add missing HappyView Lua APIs to autocomplete and hover docs (14a1dae)
  • add oauth config ui (6f09a58)
  • add proper cursors and a separate index for backfill (d9d0544)
  • add rate limiting (ec9f55a), closes #3
  • add rate limiting + config (7c47bcf)
  • add safe subset of Lua’s table (d18eca4)
  • add support for API clients (435737a)
  • add support for arbitrary oauth scopes (22fddeb)
  • add support for labelers (b8e6caa)
  • add support for multiple domains (b5400c9)
  • add support for params to procedures (fda2118)
  • add support for plugin manifests and configuration via the dashboard (acc735e)
  • add support for redirect uri on auth (1f590ef)
  • add support for sqlite (0ba593c)
  • add support for upgrading plugins (0bf0673)
  • add the lex-agent sdk (9481601)
  • add user permissions (89e3925)
  • add xrpc libs for Lua (d45bf70)
  • allow admin to change logo/document title for the dashboard (b4b5534)
  • allow plugins to be loaded dynamically (9653984)
  • automate generation of attestatioon signing keys (3b0d335)
  • complete plugin sync pipeline with auth, tokens, and PDS writes (7cf33cf)
  • dashboard: allow API clients to be created without rate limits (72d1d71)
  • display plugin logs in event logs ui (847706a)
  • display user handles in users page (47209bd)
  • external auth infra (be081fd)
  • include success status and error messages (368b969)
  • indicate plugins that still need config (6dce092)
  • make db connection pool size configurable (f128034)
  • move dashboard under the /dashboard route (81e74be)
  • move user management into Settings (4012f47)
  • reorganize the nav (587ff4c)
  • switch to DPoP auth (98bccce)
  • switch to sqlite as the default (5868b52)
  • Scripts should now use cursors instead of offsets.

Pre-release 2026-04-21

  • sdk: prevent CI crash if versions are already deployed (3c4a6d0)
  • update primary domain if PUBLIC_URL changes (5e93653)

Pre-release 2026-04-21

  • sdk: take advantage of prior art on crypto from bsky (7df0576)
  • xrpc: fix XRPC writes to use the new auth system (ed5434f)
  • dashboard: allow API clients to be created without rate limits (72d1d71)

Pre-release 2026-04-20

  • auth: prevent unauthorized users from seeing the dashboard (fcb3ac2)
  • backfill all collections when no collection is selected during backfill creation (5cd2e01)
  • dashboard: fix broken interactivity on collection combobox (5cbfc3c)
  • ensure handles are always forced to lowercase during dashboard auth (785b00f)

Pre-release 2026-04-17

  • add missing HappyView Lua APIs to autocomplete and hover docs (14a1dae)
  • add the lex-agent sdk (9481601)

Pre-release 2026-04-17

  • display the correct version on the about page (e6504fa)

Pre-release 2026-04-14

  • add support for upgrading plugins (0bf0673)
  • display plugin logs in event logs ui (847706a)

Pre-release 2026-04-13

  • separate scopes on the api client page (0bc0f95)

Pre-release 2026-04-13

  • database column type mismatch (3932db0)

Pre-release 2026-04-13

  • add API clients (3cd960b)
  • add support for API clients (435737a)
  • allow admin to change logo/document title for the dashboard (b4b5534)
  • reorganize the nav (587ff4c)

Pre-release 2026-04-12

  • return the correct host data for plugin secrets (937fa4c)

Pre-release 2026-04-12

  • use async calls to get host secrets (753a3af)

Pre-release 2026-04-12

  • convert plugin timestamp columns (9d190cb)

Pre-release 2026-04-12

  • convert plugin config to text column (dade035)
  • add about page for debugging (00e92b3)

Pre-release 2026-04-12

  • sync plugin and host body types (fd25cb2)

Pre-release 2026-04-12

  • restore reading scopes from redirect uri (8e01945)

Pre-release 2026-04-12

  • switch from /oauth/client-metadata.json to /oauth-client-metadata.json (b94f90f)

Pre-release 2026-04-11

Pre-release 2026-04-09

  • add support for arbitrary oauth scopes (22fddeb)

Pre-release 2026-04-08

  • make sure auth is passed when necessary in lua scripts (cdde018)

Pre-release 2026-04-08

  • automate generation of attestatioon signing keys (3b0d335)

Pre-release 2026-04-08

  • add attestation support to atproto api (fbd65b1)

Pre-release 2026-03-26

  • issue in redirect state capture (9d95cee)

Pre-release 2026-03-26

  • ditch redirect cookies in favor of storing redirect info in the db (52caa37)
  • lint errors (1436f4c)

Pre-release 2026-03-25

  • timestamp comparisons when using Postgres (4bd8b2f)

Pre-release 2026-03-24

  • add safe subset of Lua’s table (d18eca4)

Pre-release 2026-03-24

  • add backfill and realtime streaming directly to HappyView (no more Tap dependency) (0bf605e)

Pre-release 2026-03-24

  • make db connection pool size configurable (f128034)

Pre-release 2026-03-22

  • prevent permission redirects before permissions are known (2b73757)

Pre-release 2026-03-22

  • dont skip HappyView in the external auth callbackloop (210b326)
  • prevent code blocks from overflowing dialog containers (0618e96)

Pre-release 2026-03-22

  • ensure oauth cookies are correctly removed (7dc2443)

Pre-release 2026-03-22

  • indicate plugins that still need config (6dce092)

Pre-release 2026-03-22

  • prevent errors on plugin page when user hasn’t set up encryption tokens (41aa70a)

Pre-release 2026-03-22

  • add support for plugin manifests and configuration via the dashboard (acc735e)
  • allow plugins to be loaded dynamically (9653984)

Pre-release 2026-03-22

  • include success status and error messages (368b969)

Pre-release 2026-03-21

  • delete auth redirect cookie before redirecting (00d6b8f)
  • remove sqlite db from git (134ae00)
  • complete plugin sync pipeline with auth, tokens, and PDS writes (7cf33cf)
  • external auth infra (be081fd)

Pre-release 2026-03-20

  • delete auth redirect cookie before redirecting (2dd8b19)

Pre-release 2026-03-20

  • add config for oauth screen values (0777d8c)

Pre-release 2026-03-19

  • allow session cookies to work cross origin (494cb05)

Pre-release 2026-03-19

  • allow HappyView redirect cookie to be read appropriately (b69c59f)

Pre-release 2026-03-19

  • add CORS reflection for auth requests (e813713)

Pre-release 2026-03-19

  • copy migrations in image (593d361)
  • add support for redirect uri on auth (1f590ef)

Pre-release 2026-03-19

  • missed a variable ref (fc34c9c)
  • remove user swap (deaa25a)
  • switch Tap to sqlite by default (ab7f97b)
  • update dashboard to use new internal auth (68a1123)
  • update types for rate limits (ab909d3)
  • add builtin oauth, removing AIP dependency (14abcda)

Pre-release 2026-03-18

  • create a dummy bin for the build step (7741c8f)

Pre-release 2026-03-18

  • pin to debian bookworm, otherwise we have an issue with glibc version (a9a62f0)
  • add support for params to procedures (fda2118)
  • switch to sqlite as the default (5868b52)

Pre-release 2026-03-18

  • coerce query params based on lexicon schema (38bd0d3)

Pre-release 2026-03-18

  • add automatic handling for incompatible db.raw (8a13fdf)

Pre-release 2026-03-18

Pre-release 2026-03-17

Pre-release 2026-03-17

  • http resolution for labeler websocket connections (405e61a)
  • resolve proper endpoints for labelers (8e6575e)

Pre-release 2026-03-17

  • add configurable rate limiting (ca65897)
  • add rate limiting + config (7c47bcf)

Pre-release 2026-03-15

  • add labelers to the dashboard (4ee83d8)
  • add Lua module for atproto (a34fb0d)
  • add support for labelers (b8e6caa)

Pre-release 2026-03-14

  • prevent record backfill from blocking startup (b502295)

Pre-release 2026-03-14

  • add user permissions (89e3925)
  • display user handles in users page (47209bd)
  • move dashboard under the /dashboard route (81e74be)
  • move user management into Settings (4012f47)

Pre-release 2026-03-14

  • add proper cursors and a separate index for backfill (d9d0544)
  • Scripts should now use cursors instead of offsets.

Released 2026-03-12

  • add additional debug logging for Tap connections (fb807f2)
  • proper parsing for array query params (8f1146a)
  • return the avatar ref from bsky getProfile (391ab19)
  • use ResponsiveDialog from DiceUI (fd54d3b)
  • add more structure to event logs (6506ff2)
  • add request and response data to success events in event log (6aed219)
  • allow query XRPCs to receive auth (14beec3)
  • improved error logging for scripts (938efc0)
  • process Tap events concurrently (28a1057)
  • remove read-only restriction from db.raw (5f71d40)
  • run index hooks before storing records to enable record bypass and manipulation (518bfc7)

Pre-release 2026-03-11

  • add more structure to event logs (6506ff2)

Pre-release 2026-03-11

  • return the avatar ref from bsky getProfile (391ab19)

Pre-release 2026-03-11

  • add request and response data to success events in event log (6aed219)

Pre-release 2026-03-11

  • use ResponsiveDialog from DiceUI (fd54d3b)
  • improved error logging for scripts (938efc0)

Pre-release 2026-03-11

  • allow query XRPCs to receive auth (14beec3)

Pre-release 2026-03-10

  • remove read-only restriction from db.raw (5f71d40)

Pre-release 2026-03-10

  • process Tap events concurrently (28a1057)

Pre-release 2026-03-10

  • add additional debug logging for Tap connections (fb807f2)

Pre-release 2026-03-09

  • proper parsing for array query params (8f1146a)

Pre-release 2026-03-09

  • run index hooks before storing records to enable record bypass and manipulation (518bfc7)

Released 2026-03-06

  • add API keys for things like CI/CD (9f57f1d)
  • move API keys into settings (e0e1baa)

Pre-release 2026-03-06

  • add API keys for things like CI/CD (9f57f1d)
  • move API keys into settings (e0e1baa)

Released 2026-03-05

  • add support for did:web when resolving DIDs (1bc5114)
  • resolve and proxy unrecognized XRPCs (ee43d05)

Pre-release 2026-03-05

  • add support for did:web when resolving DIDs (1bc5114)
  • resolve and proxy unrecognized XRPCs (ee43d05)

Released 2026-03-05

  • add env table so lua script validation passes (4b45161)
  • backfill create test failed without an existing lexicon (4f7a6a0)
  • backfill create test failed without an existing lexicon (again?) (cf10723)
  • client error on event logs (2ee0589)
  • make sure Tap collections are up-to-date on reconnect (38f89e7)
  • match design to other tables pages (8f6fe4e)
  • prevent logo from clipping (cf7cadb)
  • prevent validation error when attempting to concat with env vars in lua scripts (349234e)

Pre-release 2026-03-04

  • prevent validation error when attempting to concat with env vars in lua scripts (349234e)

Pre-release 2026-03-04

  • add env table so lua script validation passes (4b45161)

Pre-release 2026-03-04

Pre-release 2026-03-04

Pre-release 2026-03-04

  • add support for sorting to the db module (6c91bab)

Pre-release 2026-03-04

  • add http module for Lua scripts (4eb108c)

Pre-release 2026-03-03

  • backfill create test failed without an existing lexicon (4f7a6a0)
  • backfill create test failed without an existing lexicon (again?) (cf10723)
  • client error on event logs (2ee0589)
  • make sure Tap collections are up-to-date on reconnect (38f89e7)
  • match design to other tables pages (8f6fe4e)

Pre-release 2026-03-02

  • add event logs to the dashboard (8477dd3)

Pre-release 2026-03-01

  • prevent logo from clipping (cf7cadb)

Pre-release 2026-03-01

Released 2026-02-27

  • add db.backlinks for filtering results based on backlinks (0a682c9)
  • add db.raw for complex queries (read-only) (c347718)

Pre-release 2026-02-27

  • add db.raw for complex queries (read-only) (77a8075)

Released 2026-02-27

  • database URLs were busted for local dev (a59d70b)

Pre-release 2026-02-27

  • database URLs were busted for local dev (a59d70b)

Released 2026-02-27

  • force records from db to serialize to arrays (66cc7af)
  • add toarray() so users can force a Lua table to serialize to an array (6827ceb)
  • enable more complex database operations with db.search() (7bcb5aa)

Pre-release 2026-02-27

  • force records from db to serialize to arrays (66cc7af)
  • add toarray() so users can force a Lua table to serialize to an array (6827ceb)

Pre-release 2026-02-26

  • enable more complex database operations with db.search() (7bcb5aa)

Released 2026-02-26

  • use original auth scheme instead of hardcoded dpop (14252b2)

Pre-release 2026-02-26

  • use original auth scheme instead of hardcoded dpop (14252b2)

Released 2026-02-24

  • dynamic page routes were broken (a09ce1b)

Released 2026-02-24

  • backfill now loads previously deleted records (75dcd8c)
  • show collections on Records page even if they have no records (5eab462)
  • add “View Records” buttons to lexicons (a9db22c)
  • add bulk collection record deletion to the API (3f4833a)
  • add bulk collection record deletion to the dashboard (310f3f8)
  • allow records to be deleted from the dashboard (e7000a1)
  • allow records to be deleted via the API (417f60a)

Pre-release 2026-02-24

  • show collections on Records page even if they have no records (5eab462)
  • add “View Records” buttons to lexicons (a9db22c)

Pre-release 2026-02-24

  • backfill now loads previously deleted records (75dcd8c)

Pre-release 2026-02-24

  • add bulk collection record deletion to the API (3f4833a)
  • add bulk collection record deletion to the dashboard (310f3f8)

Pre-release 2026-02-24

  • allow records to be deleted from the dashboard (e7000a1)
  • allow records to be deleted via the API (417f60a)

Released 2026-02-24

  • remove backfill switch for query and procedure lexicons (e8c3ec7)

Pre-release 2026-02-24

  • remove backfill switch for query and procedure lexicons (e8c3ec7)

Released 2026-02-24

  • prevent rogue records from being stored (26d8400)
  • records page now properly lists collections in dropdown (c7d2c44)
  • wrap dynamic page with a server component to fix build (a2e4a32)
  • add column visibility and better scrolling to records table (2d37ca8)
  • add custom processing scripts to procedure and query lexicons (6db74fc)
  • add dark mode (6e35616)
  • add Docusaurus site and GitHub Pages deploy workflow (5b25d27)
  • add proper backfill stats tracking (08989b1)
  • additional Lua completions and docs (55a510d)
  • merge network and local lexicons (ed7af39)
  • use data table with dynamic columns for records page (3111322)
  • use Shiki for code blocks (461a2fa)

Pre-release 2026-02-24

  • add proper backfill stats tracking (08989b1)
  • additional Lua completions and docs (55a510d)

Pre-release 2026-02-19

  • wrap dynamic page with a server component to fix build (a2e4a32)
  • add custom processing scripts to procedure and query lexicons (6db74fc)

Pre-release 2026-02-18

  • add Docusaurus site and GitHub Pages deploy workflow (5b25d27)

Pre-release 2026-02-17

  • records page now properly lists collections in dropdown (c7d2c44)
  • add column visibility and better scrolling to records table (2d37ca8)
  • add dark mode (6e35616)
  • merge network and local lexicons (ed7af39)
  • use data table with dynamic columns for records page (3111322)
  • use Shiki for code blocks (461a2fa)

Released 2026-02-17

  • enable trailing slash for static export compatibility (80afc2d)

Pre-release 2026-02-17

  • enable trailing slash for static export compatibility (80afc2d)

Released 2026-02-16

  • improve AIP proxy error logging and cache Rust deps in Docker (cd1d843)

Released 2026-02-16

  • add AIP_PUBLIC_URL for frontend-facing AIP address (ae9f023)

Released 2026-02-16

  • add AIP reverse proxy and runtime config endpoint (c7fb89d)

Released 2026-02-16

  • fix dpop resolution for dashboard login (b7c7bbb)
  • update backfill e2e test for synchronous handler (1adc65e)
  • add admin login page with token auth (bff9876)
  • add admins management page (3259868)
  • add ATProto OAuth login via handle (16379e5)
  • add backfill jobs page (5db4bdc)
  • add dashboard navigation with sidebar layout (7643c9b)
  • add lexicons CRUD page (d6e4f62)
  • add network lexicons page (4d882f4)
  • add records browsing page to admin dashboard (994d7cb)
  • consolidate docker compose to single postgres instance (5a8863d)
  • replace Jetstream and backfill with Tap (dbd2233)
  • scaffold web admin app with static file serving (b1977b4)
  • switch to AIP OAuth with PKCE and improve lexicon UX (374a2a1)

Released 2026-02-14

  • add convention-based action field for procedure lexicons (1b879c2)

Released 2026-02-14

  • load lexicons from ATProto network via DNS TXT resolution (731c35d), closes #6

Released 2026-02-14

  • clear existing admins before adding did column (bc54913)

Released 2026-02-13

  • remove unused did field from AdminAuth (0a5657d)

Released 2026-02-13

  • resolve clippy warnings and formatting issues (77b3b39)
  • add backfill system for historical record discovery and indexing (15e8ffd)
  • add Dockerfile, docker-compose, and CI workflow (7c5e7b8)
  • add game record XRPC endpoints with DPoP auth (66f097f)
  • add Jetstream listener and record indexing with sqlx migrations (8352043)
  • add lexicon storage and admin API (94dbfaa)
  • add listGames query endpoint with cursor-based pagination (a0ec4b5)
  • add unauthenticated getGame query endpoint (1983251)
  • add user profile endpoint with AIP userinfo auth (76754e9)
  • catch-all XRPC router replaces hardcoded game routes (b763b26)
  • dynamic Jetstream subscription driven by lexicon registry (74b0e24)
  • index records on create/put, add created_at column (445c862)
  • initial server with health endpoint and JWT auth (db5ba0b)
  • multi-admin system with API key management and bootstrap (7628cf9)
  • parallel multi-arch docker builds with manifest append (a587461)
  • read getGame and listGames from database index instead of PDS (5c6713e)