From a2dc29af9cd3ecec25be76a47ad6d5bbc36c17c2 Mon Sep 17 00:00:00 2001 From: Ben Stull Date: Thu, 4 Jun 2026 00:13:42 -0700 Subject: [PATCH] =?UTF-8?q?release:=200.33.0=20=E2=80=94=20=C2=A722=20M3?= =?UTF-8?q?=20backend=20Plan=20A=20(registry=20mirror=20+=20runtime=20conf?= =?UTF-8?q?ig)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 67 +++++++++++++++++++++++++++++++++++++++++++ VERSION | 2 +- frontend/package.json | 2 +- 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cbdad7..b6a77de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,73 @@ 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.33.0 — 2026-06-04 + +**Minor (breaking) — §22 M3 backend Plan A: project registry mirror + +runtime config. The framework now learns its projects from +`REGISTRY_REPO/projects.yaml`; `META_REPO` is retired. Migration `027` +runs automatically on deploy.** + +Added: + +- **Project registry mirror** (`app/registry.py`): the framework reads + `projects.yaml` from `REGISTRY_REPO` and mirrors its `deployment:` + block and `projects:` entries into the `projects` table + a new + `deployment` singleton. The mirror runs at startup (reconciler) and + on every §4 webhook push to the registry repo. +- **`GET /api/deployment`** — returns `name`, `tagline`, and the list + of visible projects. Replaces the build-time `VITE_APP_NAME` as the + authoritative runtime config source (the frontend cut lands in + M3-frontend). +- **`GET /api/projects/:id`** — returns `name`, `type`, `visibility`, + `initial_state`, and `theme` for a single project. +- **§22.4b `initial_state`** honored at propose time: new RFCs enter + the state named by the project's `initial_state` field (default: + `draft`). +- **§22.4c `unreviewed` flag**: newly proposed RFCs are flagged + `unreviewed = true`. Owners clear it via + `POST /api/projects/:id/rfcs/:slug/mark-reviewed`. The catalog + accepts `?unreviewed=true` to filter to the review queue. +- **Migration `027`** (additive): adds `projects.type` / + `projects.initial_state`, the `deployment` table, and + `cached_rfcs.unreviewed` / `reviewed_at` / `reviewed_by`. + +Breaking: + +- `META_REPO` is retired. The app **refuses to start** if `REGISTRY_REPO` + is unset. The corpus mirror now reads each project's `content_repo` + from `projects.yaml` rather than from the `META_REPO` env var. + +Upgrade steps: + +1. **MUST** create a registry repo under your deployment's Gitea org. +2. **MUST** author `projects.yaml` at its root with a `deployment:` block + (`name`, `tagline`) and one `projects:` entry for your existing corpus: + ```yaml + deployment: + name: + tagline: + projects: + - id: default + name: + type: document + content_repo: + visibility: public + ``` + Keep `id: default` for this release; the pretty-slug re-stamp lands in + the next backend slice, before any `/p/` URL is public. +3. **MUST** set `REGISTRY_REPO=` and **MUST** + remove `META_REPO` (or leave it unset — it is ignored but its presence + may cause confusion). +4. **MUST** add a Gitea webhook on the registry repo pointing at + `/api/webhooks/gitea` (same secret as the corpus webhook). +5. **MUST** deploy. Migration `027` runs automatically at startup; the + registry mirror reconciles immediately after. Verify + `GET /api/deployment` returns your project and `/api/health` is green. +6. **SHOULD** rebuild the frontend (no new env var is required until + M3-frontend lands, but the frontend currently still reads + `VITE_APP_NAME` for the display name). + ## 0.32.0 — 2026-06-01 **Minor — graduation's integer RFC number is now optional, and RFC diff --git a/VERSION b/VERSION index 9eb2aa3..be386c9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.32.0 +0.33.0 diff --git a/frontend/package.json b/frontend/package.json index 222c400..68069c7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "rfc-app-frontend", "private": true, - "version": "0.32.0", + "version": "0.33.0", "type": "module", "scripts": { "dev": "vite",