v3.14.0
Highlights
@byline/core+@byline/db-postgres+@byline/client+@byline/admin— hasMany relations. Arelationfield can now reference an ordered list of targets instead of a single one by settinghasMany: true(with optionalminItems/maxItems). The value is modelled as an array of relation values: each item persists as its ownstore_relationrow at an indexed path (gallery.0,gallery.1, …) and reconstructs in order — no new database column and no migration (the existingunique(version, field_path, locale)constraint already permits it, since each index is a distinct path).populateresolves each element into its own envelope, yielding an ordered array of populated values; a deleted target surfaces as a_resolved: falseslot in place rather than collapsing the array. The newWithPopulatedMany<F, K, Target>helper (@byline/client) types the populated array shape. In the editor the field renders as a drag-reorderable list of summary tiles — reusing the sameRelationSummarythe single field uses, so each row shows the target's real title/thumbnail rather than a bare id — each with a remove control and an "Add" button that appends through the standard picker. Items are identified bytargetDocumentId(a target may appear at most once). A reference field,pages→gallery(hasMany → media), ships in the example app. Filtering queries by a multi-target relation ($some/$every/$nonewherequantifiers) and picker multi-select are planned Phase 2 follow-ups; creating, reading, populating, and editing ordered lists all work today.
Chores
- monorepo — the admin editor smoke suite (Playwright) grew from three scenarios to eleven, now covering every field surface end-to-end — text, select, checkbox, datetime, relation, hasMany relation, and richtext-in-blocks — plus list / dashboard / create / status. All create/mutate flows were moved onto the
pagescollection so the suite no longer writes throwaway documents intodocs. @byline/client— added integration coverage for the read-time richtext relation populate primitive (embedded internal-link envelopes refresh whenpopulateRelationsOnReadis true and stay snapshot-stale when false).
All other @byline/* packages bumped to 3.14.0 in lockstep with no behavioural changes this cycle.