v3.8.0
Highlights
@byline/core,@byline/db-postgres,@byline/client,@byline/admin,@byline/host-tanstack-start,@byline/i18n— added a per-version audit trail: every document version now records the acting user that created it. Thecreated_bycolumn existed but was never written — and storage reconstruction silently dropped it — so this wiresrequestContext.actor.idthrough every version-writing lifecycle path (create,update,duplicate,restore,copy_to_locale,delete_locale), writes and reads it back across all reconstruction envelopes, and shapes it ontoClientDocumentascreatedByalongside the lifecycleeventType. In the admin, the history view renders a muted audit strip beneath each version — action · by <user> · when — with display names resolved admin-side (a newAdminUsersRepository.getByIdsbatch lookup returning anactorslabel map; the document store never joins admin-realm tables). Rows written before this release, or by internal tooling without a request context, keep a NULLcreated_byand render as "unknown". This honours the who half of Byline's auditability claim; the present-state reference and the remaining workstreams (a document-grain audit log, the version/document history split, a system-wide activity report) are in the newdocs/AUDIT.md. Migration-free — no DDL, no backfill.
Bug Fixes
@byline/host-tanstack-start— the history view's identity column (the clickable "compare" cell and the injected restore-version column) is now driven by the collection'suseAsTitleinstead of a hard-coded'title'. Collections whose title field is named anything else (e.g.useAsTitle: 'name') previously rendered no compare or restore controls in history. Also fixed the history page-size selector, which navigated back to the collection list instead of staying on the history route.- monorepo — the reference app's frontend table CSS overrides are now scoped to
.proseso they no longer leak into admin tables (they were forcing a wide first column on the history view), and the pages.mdroutes mirror the HTML area semantics.
Chores
- monorepo — established a vocabulary boundary (now in
docs/AUDIT.md): "attribution" is reserved for the public concept (copyright / author–publisher credit on published content, e.g. a mediaCredit / Attributionfield), while the internal record of who did what, when is consistently "audit" / auditability. Comments, docs, and test names realigned; no behavioural change.
Breaking Changes
@byline/admin— theAdminUsersRepositoryinterface gained a requiredgetByIds(ids: string[])method (it backs the audit strip's batch label resolution). The bundled@byline/db-postgresadapter implements it; only customAdminUsersRepositoryimplementations need to add the method. No data migration.
All other @byline/* packages bumped to 3.8.0 in lockstep with no behavioural changes this cycle.