release(slice3): v0.49.0 — faceted left-pane filtering (§22.4a SLICE-3)
This commit is contained in:
@@ -23,6 +23,45 @@ 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.49.0 — 2026-06-07
|
||||
|
||||
**Minor — faceted left-pane filtering (§22.4a SLICE-3).** A collection that
|
||||
declares a metadata field schema (`fields:`, SLICE-2) now gets a **faceted
|
||||
catalog left pane**: one collapsible filter group per `enum`/`tags` field plus
|
||||
state, each with per-value **result counts** and multi-select checkboxes, and a
|
||||
"filter values…" search box on `tags` groups so they stay usable at many values.
|
||||
Filters compose — OR within a field, AND across fields — and a "malformed
|
||||
metadata only" toggle surfaces entries failing their schema (INV-3). This is
|
||||
SLICE-3 of the
|
||||
[Configurable Collection Metadata](./docs/design/2026-06-06-configurable-collection-metadata.md)
|
||||
design (§7.2); the single-entry and bulk metadata-edit UIs (SLICE-4/5) follow.
|
||||
|
||||
The collection-scoped list endpoint
|
||||
(`GET /api/projects/{id}/collections/{cid}/rfcs`, and the project-scoped
|
||||
default-collection alias) now honours filter query params
|
||||
(`?priority=P0&tags=checkout&state=active&malformed=true`), returns a
|
||||
`facets: {field → {value → count}}` block with drill-down counts, and includes
|
||||
each entry's metadata `meta` mapping; an unknown filter field is a 400. Migration
|
||||
034 adds the additive `cached_rfcs.meta_json` column that persists per-entry
|
||||
metadata values for the index.
|
||||
|
||||
Non-breaking and opt-in (INV-5): a collection with **no `fields:`** keeps the
|
||||
existing state-chip catalog unchanged, and the §22.13 default `document`
|
||||
collection declares none — so **N=1 deployments see no change**. The unscoped
|
||||
cross-collection `GET /api/rfcs` is untouched.
|
||||
|
||||
**Upgrade steps**
|
||||
|
||||
- Migration 034 (`cached_rfcs.meta_json`) applies automatically on startup
|
||||
(additive, nullable). It is populated lazily as the corpus reconciler /
|
||||
content-repo webhooks re-ingest each collection; until an entry is re-ingested
|
||||
its `meta_json` is NULL and it contributes no facet values. Operators wanting
|
||||
facets populated immediately MAY trigger a corpus refresh (the reconciler sweep
|
||||
on next startup does this). **No data migration is required.**
|
||||
- A deployment opts a collection into faceting by declaring an `enum`/`tags`
|
||||
`fields:` block in its `.collection.yaml` (SLICE-2). A collection with no
|
||||
`fields:` keeps the existing state-chip catalog unchanged.
|
||||
|
||||
## 0.48.0 — 2026-06-07
|
||||
|
||||
**Minor — collection field schema + central validation (§22.4a SLICE-2).** A
|
||||
|
||||
@@ -897,7 +897,13 @@ a hierarchy on the user that gets in the way of finding by title.
|
||||
- **Filter chip strip** — multi-select, AND-combined. Chips:
|
||||
`State: super-draft | active | withdrawn`, `My RFCs` (I'm an owner
|
||||
or arbiter), `Has open PRs`, `Unclaimed` (super-drafts with empty
|
||||
`owners:`), `Tag: …`.
|
||||
`owners:`), `Tag: …`. A collection that declares a metadata field
|
||||
schema (§22.4a) replaces this chip strip with **faceted filter
|
||||
groups** — one collapsible group per `enum`/`tags` field plus state,
|
||||
each showing per-value result counts and multi-select checkboxes
|
||||
(OR within a field, AND across fields); see the Configurable
|
||||
Collection Metadata design. A collection with no `fields:` schema
|
||||
keeps the chip strip described here unchanged.
|
||||
|
||||
### 7.2 The list rows
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "rfc-app-frontend",
|
||||
"private": true,
|
||||
"version": "0.48.0",
|
||||
"version": "0.49.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
Reference in New Issue
Block a user