From a2b55f94cea4611c77f819481efb98e299ae6922 Mon Sep 17 00:00:00 2001 From: Ben Stull Date: Sun, 7 Jun 2026 20:52:16 -0700 Subject: [PATCH] =?UTF-8?q?release(slice5):=20v0.51.0=20=E2=80=94=20bulk?= =?UTF-8?q?=20tag/untag=20metadata=20(=C2=A722.4a=20PUC-2=20SLICE-5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- CHANGELOG.md | 24 ++++++++++++++++++++++++ VERSION | 2 +- frontend/package.json | 2 +- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 417be35..ede2458 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,30 @@ skip versions are the composition of each intervening adjacent release's steps in order — no A-to-B path is pre-computed beyond that. +## 0.51.0 — 2026-06-07 + +**Minor — bulk tag/untag metadata edit (§22.4a SLICE-5).** +An authorized user can now apply one metadata field change to many catalog +entries at once. A new endpoint +`POST /api/projects/{id}/collections/{cid}/meta/bulk` takes +`{slugs, op: set|add|remove, field, value}`, validates each entry against the +collection's `fields:` schema at the write boundary (INV-4), writes the passing +entries' `.meta.yaml` **sidecars** in a **single commit** (D7: bulk = one +commit, reusing the SLICE-4 sidecar write-through), re-ingests, and returns +`{applied, rejected}` so partial failures (missing entry, invalid value) are +reported without sinking the batch. `set` works for any field; `add`/`remove` +operate on a `tags`-type field. In the faceted catalog, contributors now get a +per-row selection checkbox and a sticky bulk action bar (one "Set ▾" control per +enum field, add/remove-tag for tags fields); a successful apply toasts the +applied/skipped counts and refreshes the list. This completes PUC-2 of the +[Configurable Collection Metadata](./docs/design/2026-06-06-configurable-collection-metadata.md) +design (§5.3, §6.4/§6.5). + +No deployment action required. The endpoint and the bulk bar are additive and +opt-in per collection: a collection with no `fields:` block (INV-5 — the +default `document` collection) shows no selection UI and the endpoint returns +`422`, so an N=1 deployment sees zero change. + ## 0.50.0 — 2026-06-07 **Minor — single-entry metadata edit + sidecar-aware writes (§22.4a SLICE-4).** diff --git a/VERSION b/VERSION index 564edf8..c5d4cee 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.50.0 +0.51.0 diff --git a/frontend/package.json b/frontend/package.json index 1be35a6..9abf447 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "rfc-app-frontend", "private": true, - "version": "0.50.0", + "version": "0.51.0", "type": "module", "scripts": { "dev": "vite",