v3.10.0
Highlights
@byline/core,@byline/db-postgres,@byline/client,@byline/host-tanstack-start— added the document-grain audit log, an internal staff-accountability record for the document changes the immutable version stream deliberately does not attribute: in-place status transitions, document deletions, and the non-versioned path and available-locale edits. Each such change and its audit row now commit atomically in one transaction (built on thewithTransactioncapability from 3.9.0), so a change can never land without its audit record. Rows are written by the lifecycle write-points in@byline/coreand stored in the newbyline_audit_logtable (@byline/db-postgres), which is deliberately FK-free so an audit row outlives the document, collection, or actor it names. The log is read back through a new gatedCollectionHandle.auditLog()in@byline/clientthat inherits the document's own read gate exactly ashistory()does — an actor who cannot see a document gets an empty log rather than leaked change metadata. In the admin,@byline/host-tanstack-startsurfaces it as a Document history tab alongside Content versions on the existing/historyroute, listing who changed what, when, and from → to. Seedocs/AUDIT.md(Workstreams 2–3).
Chores
@byline/cli— synced the bundled Drizzle migration baseline to the squashed0000(so freshbyline initinstalls provision thebyline_audit_logtable), fixed install-breaking i18n scaffold drift (admin interface locales now default toen/frwith the requiredadminTranslationsbundle wired and split into a dependency-freelocales.tsleaf), added@byline/i18nto the installed dependency set, wired the richtexttoMarkdownexport seam into the scaffoldedserver.config.ts, and bumped the scaffold's@byline/*version floor to^3.0.0.@byline/db-postgres— added sortable numeric prefixes to the hand-maintained production upgrade scripts undersql/(0001_upgrade-2.7.0-to-3.0,0002_set-source-locale-not-null,0003_add-audit-log) so they read in historical order.
Migrations
@byline/db-postgres— the audit log requires a newbyline_audit_logtable. Fresh installs get it automatically viadrizzle:migrate/byline init. Existing production databases must run the migration before deploying 3.10.0:psql "$DATABASE_URL" -f packages/db-postgres/sql/0003_add-audit-log.sql, executed as the application DB role (the role in your connection string / the database owner), not as a superuser — a table created bypostgresis invisible to the app role (permission denied). The migration is purely additive (new table, no backfill, no NOT NULL retrofit). This is required, not optional: on 3.10.0 the document-grain write-points append an audit row in the same transaction, so a missing table would roll back status changes, deletions, and path / available-locale edits.
All other @byline/* packages bumped to 3.10.0 in lockstep with no behavioural changes this cycle.