From 8f6ac211719d59984eb6b2c93849635d64f644bb Mon Sep 17 00:00:00 2001 From: Oleh Omelchenko Date: Fri, 5 Jun 2026 12:43:16 +0300 Subject: [PATCH] Reframe council audit as a one-off backfill, not a standing mode --- .claude/skills/council/SKILL.md | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/.claude/skills/council/SKILL.md b/.claude/skills/council/SKILL.md index 943375a..7801dec 100644 --- a/.claude/skills/council/SKILL.md +++ b/.claude/skills/council/SKILL.md @@ -13,18 +13,22 @@ own contract **decides**. When a source conflicts with `SOUL.md`, `docs/architecture/10-interaction-and-feedback.md` (interaction contract), **our contract wins** — note the divergence and move on. -## Two modes +## Scope: a steady-state mechanism, with a one-off debt to clear -- **Pointwise (now).** Consult on a single decision in front of you, via the routing table - below. Cheap, precise, fits the editing flow — this is the default, and what the - auto-triggers fire. -- **Audit (future).** Periodically sweep the **whole codebase** against the roster — every - interactive widget vs. APG, every user-facing string vs. GOV.UK/Carbon content rules, - every data surface vs. the loading/empty/error triad, every latency path vs. NN/g budgets - — and emit a prioritized gap list into `docs/architecture/10` + `// TODO`s. This is a - fan-out review (closer in shape to `/alignment`, but graded against external canon), best - run at **milestone boundaries**, not per change — and much of it is milestone-gated anyway - (you can't audit modals or datasets that don't exist yet). +The council's standing job is **pointwise** — consult on the decision in front of you (the +routing table below), at authoring time. New user-facing work is checked as it's written, +so it never accrues the drift the council exists to prevent. This is the default, and what +the auto-triggers fire. + +The **backfill** is _not_ a second mode — it's tech debt with an end. Code written _before_ +the council existed was never checked against the roster; reconciling it is a one-off sweep +(every pre-council widget vs. APG, every user-facing string vs. GOV.UK/Carbon content +rules, every data surface vs. the loading/empty/error triad), emitting fixes + a gap list +into `docs/architecture/10`. Done once, **pointwise keeps it honest — there is no recurring +audit.** The only thing that reopens it is an **event, never a schedule**: seating a new +member (its principles have never touched existing code) or a source's breaking revision — +see _Adding a seat_. A light glance at a milestone boundary is a fair safety net for what +the heuristic auto-trigger missed, but that's the same one-off sweep, not a standing mode. ## How to convene (the routing rule) @@ -74,6 +78,9 @@ contract, not the external source. 2. Add one row to **the roster** and one routing entry above. 3. Keep it lean — a seat earns its place only if it's authoritative for a decision the others don't cover well. +4. **Backfill once.** Reconcile the existing codebase against the new seat — its principles + have never been applied before. This is the one event that reopens the one-off sweep + (see _Scope_); after it, pointwise maintains the new seat like the rest. Candidate future seats (not yet seated): **FT Visual Vocabulary / Datawrapper** (chart choice — our domain), **Shopify Polaris** (UX-writing depth), **web.dev** (perceived