Slice 8: v1 ships — integration coverage, runbook, spec corrections

- Five new integration test files raise the suite from 75 to 96 green:
  test_hygiene_vertical (7), test_branch_path_routing (4),
  test_metadata_pr_merge (3), test_cache_bootstrap (4), test_e2e_smoke
  (3). The smoke test walks propose → super-draft → edit branch →
  body-edit PR → graduate → active-RFC PR → merge → notification →
  hygiene-sweep deletion end-to-end.
- deploy/RUNBOOK.md replaces the prior DEPLOY.md stub as a real
  runbook: prerequisites, first-time bring-up, day-2 ops (logs, DB
  backup, secret rotation, the §12 hygiene cadence), rollback shape,
  troubleshooting table.
- backend/.env.example grows the SMTP block, HYGIENE_TICK_SECONDS,
  and WEBHOOK_EMAIL_BOUNCE_SECRET with inline commentary.
- README points to RUNBOOK.md; the "what the build lets you do"
  section adds Slices 7 and 8.
- docs/DEV.md gets a Slice 8 — shipped section; the "Next slice"
  footer becomes the v1-complete epitaph.
- SPEC corrections per the §19.3 working agreement: §10.7 names the
  shared §12 sweep; §12 names the bot as actuator and the per-user
  branch_chat_seen preservation contract; §19.1 marks v1 complete
  and records Slice 8; the five §19.2 candidates Slice 8 folded in
  are marked settled with pointers at the resolution.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ben Stull
2026-05-25 04:14:50 -07:00
parent 1a0c4428af
commit 36635049c7
11 changed files with 1585 additions and 410 deletions
+35 -14
View File
@@ -5,10 +5,12 @@ materializes the Wiggleverse RFC framework specified in
[`SPEC.md`](./SPEC.md). The framework's mission lives in
[`PHILOSOPHY.md`](./PHILOSOPHY.md); the spec is the binding contract;
this README is how to bring the app up against a local Gitea instance
and exercise the slice the build session has shipped so far.
and exercise the surface the build has shipped.
The implementation is in progress. See [`docs/DEV.md`](./docs/DEV.md)
for the slicing plan and the current state.
The v1 build is complete. Subsequent sessions pick from §19.2 by user
choice per §19.3's working agreement. See
[`docs/DEV.md`](./docs/DEV.md) for the build history and the work mode
that follows v1.
## What the app expects to talk to
@@ -107,6 +109,8 @@ Optional values, picked up at process start:
| `EMAIL_ENABLED` | `1` (default) to dispatch email; `0` to suppress all sends without disabling the inbox. |
| `EMAIL_BUNDLE_THRESHOLD` | Held-during-quiet-hours threshold for the "Activity while you were away" bundle (default 5, §15.4). |
| `DIGEST_TICK_SECONDS` | Cadence of the §15.5 digest scheduler's loop (default 3600). Tests drive ticks synchronously via `digest.run_tick`. |
| `HYGIENE_TICK_SECONDS` | Cadence of the §12 hygiene scheduler's loop (default 3600). Tests drive ticks via `hygiene.run_tick(now=...)`. |
| `WEBHOOK_EMAIL_BOUNCE_SECRET` | When set, `/api/webhooks/email-bounce` requires the same value in the `X-Webhook-Secret` header. Unset leaves the webhook open for dev — the v1 contract. |
### 6. Install dependencies
@@ -159,9 +163,10 @@ Open `http://localhost:5173`. Sign in with your owner-zero Gitea
account. The catalog should appear empty; the **+ Propose New RFC**
button at the bottom opens the propose modal.
## What the build lets you do so far
## What the build lets you do
Slices 16 are shipped. End-to-end paths the app supports today:
Slices 18 are shipped — v1 is complete. End-to-end paths the app
supports:
- **Propose → idea PR → merge → super-draft** (Slice 1, §9.1–§9.3).
- **Super-draft body editing** via meta-repo edit branches, with AI
@@ -198,18 +203,33 @@ Slices 16 are shipped. End-to-end paths the app supports today:
quiet hours hold email and digest while letting the inbox row
still land, and the per-user mute suppresses inbox rows
produced by a specific actor (Slice 6).
- **§14 chrome and the settings / admin neighbourhoods** — the
landing page with the three-item deck, the `/philosophy` route
reading `PHILOSOPHY.md` from disk, the persistent About header
link, `/settings/notifications` exposing the five §15-derived
sub-sections, and `/admin` as the four-tab home base for role
management, write-mute, audit-log, graduation-queue, and the §6.5
permission-events read (Slice 7).
- **§12 branch hygiene + §10.7 post-merge deletion** — the
30/90-day timers ride on a scheduler next to the digest, the bot
is the only Git writer per §1, and the audit-log rows surface as
"the app" actor per §15.9. The §19.2 candidates the hardening
pass folded in: cache bootstrap against a meta repo the bot did
not author, branch-name path routing via `{branch:path}`, in-app
merge for `meta_metadata` PRs, the graduation-rollback branch
cleanup, and the email-bounce webhook signing seam (Slice 8).
This exercises the §4 cache (webhook + reconciler), the §6
permission model in full, the §1 bot wrapper (every Git write goes
through it, every commit and PR carries the `On-behalf-of:`
trailer), and the §17 routing-collapse rule that lets active and
super-draft surfaces share their endpoints.
trailer), the §17 routing-collapse rule that lets active and
super-draft surfaces share their endpoints, and three scheduled
jobs in the same shape (reconciler, digest, hygiene).
Out of scope for the slices shipped so far: landing-page and
`/philosophy` chrome polish, the notification-settings UI surface,
and the admin neighbourhood (Slice 7, §14 + §19.2 candidates); the
§12 30/90 branch-hygiene timers (Slice 8). The full slicing plan
and the next slice's brief live in [`docs/DEV.md`](./docs/DEV.md).
Out of scope for v1: every item under §16 ("What is deliberately
deferred"), and the §19.2 candidates the hardening pass left
queued. Subsequent sessions pick from §19.2 by user choice per
§19.3's working agreement.
## Verifying it worked
@@ -263,5 +283,6 @@ has something real to render.
The spec's decisions answer to it.
- [`docs/DEV.md`](./docs/DEV.md) — the build's slicing plan, the
current state, and the next slice's brief.
- [`deploy/DEPLOY.md`](./deploy/DEPLOY.md) — single-host production
deployment behind nginx + Let's Encrypt.
- [`deploy/RUNBOOK.md`](./deploy/RUNBOOK.md) — single-host production
bring-up, day-2 operations (logs, database backup, secret rotation,
the §12 hygiene cadence), and rollback shape.