From 275daf9e26edccd8c31d7b557462b29934414317 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 19 Apr 2026 18:19:58 +0200 Subject: [PATCH] add summary.md artefact to /council output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New Phase-5d step: the Moderator writes sessions//summary.md directly (no sub-agent), producing an 11-section readable summary — TL;DR, winning answer verbatim, vote distribution with ASCII bar chart, phrases that crystallized, per-member Phase-2-to-Phase-3 posture shifts, confidence trajectory chart, influence map (positive-citation counts), non-winning readings preserved as distinct lenses, watch items flagged across multiple members, session mechanics stats, and full artefact wikilinks. outcome.md stays as the machine-structured record for the sessions Base; summary.md is the artefact you actually reread a week later. Phase-5f terminal output retires the full vote table in favour of a one-line verdict, condensed ASCII vote chart, full winning answer, and a pointer at summary.md. CLAUDE.md and docs/structure/initial-plan.md updated to mention the new file in the session directory layout. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/commands/council.md | 67 ++++++++++++++++++++++++---------- CLAUDE.md | 4 +- docs/structure/initial-plan.md | 3 +- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/.claude/commands/council.md b/.claude/commands/council.md index aa4ae47..e8c7619 100644 --- a/.claude/commands/council.md +++ b/.claude/commands/council.md @@ -218,7 +218,32 @@ Invoke `council-scribe` with everything needed: Scribe writes `sessions//outcome.md` per its persona spec. -### 5d. Memory update batch (10 parallel Sonnet calls) +### 5d. Write `summary.md` — the narrative summary artefact (you, the Moderator, write this directly) + +This is the richer human-facing summary of the session. The `outcome.md` the Scribe wrote is the machine-structured record; `summary.md` is the *readable* one — the artefact the user will actually want to revisit a week later. Write it yourself (the Moderator has the full picture across all phases; sub-agents don't). + +File: `sessions//summary.md`. Frontmatter: `type: council-summary`, `session: `, `date: `. + +Produce these sections in **this order** — the order matters and was chosen deliberately: + +1. **Title + TL;DR** — one-sentence verdict that distils the winning answer, plus the key framing phrase in a blockquote. +2. **Full-transcripts line** — wikilinks to `brief`, `research/`, `initial-answers`, `revised-answers`, `votes`, `outcome`. +3. **`## The winning answer — `** — verbatim from the winning revised answer. This is the heart of the document. +4. **`## Vote distribution`** — an ASCII horizontal bar chart (use `██` per vote, `·` for zero-vote members), followed by a full table: Voter / Voted for / one-line rationale (≤12 words). Add a self-votes / cross-votes count line. +5. **`## Phrases that crystallized`** — 3–5 lines that coined or borrowed language during the deliberation, with attribution. Pull these from the Phase-3 critiques and revised answers; look for lines that got echoed across members. +6. **`## How the Council moved`** — per-member table: Phase-2 posture → Phase-3 release. What did each member have to *let go of* to reach their revised answer? One row per member. +7. **`## Confidence trajectory`** — ASCII line chart (`4 ─────→ 5 ↑`) showing each member's stated or implied confidence shift from Phase 2 to Phase 3. Compute and show the mean before/after. +8. **`## Influence map`** — horizontal bar chart counting *positive citations* each member received across the other 9 members' Phase-3 critiques + Phase-4 vote rationales. Note that influence ≠ winning answer; explicitly surface any divergence (e.g. a member whose idea got adopted widely without pulling votes to their own answer). +9. **`## Non-winning readings`** — for each candidate that received ≥1 vote besides the winner, a short paragraph naming what that argumentative shape uniquely offered. Don't frame them as "losers" — frame them as distinct lenses preserved. +10. **`## Watch items — flagged by multiple members, not disqualifying`** — recurring observations that warrant future attention but don't change the verdict. Each bullet: what was flagged, by whom, the signal type, and the condition under which it'd escalate. +11. **`## Session mechanics — stats`** — a two-column table. Research files produced per round, clarification-flag counts per phase, round-2 triggered?, vote turnout, self-votes, winning margin, open-clarifications-at-vote count, mean confidence Phase 2 vs Phase 3, verdict sign flips, verdict strengthenings, journal / on-the-user / revisit update counts. +12. **`## Session artefacts`** — bulleted list of wikilinks to every file in `sessions//`, including `research/*.md` by name. + +**Tone.** This is written in the Moderator's voice (neutral, synthetic, analytic), not in any member's voice. Quote members' exact phrasing when you attribute. + +**What NOT to do.** Don't editorialise on whether the winner was "right." Don't speculate about what the user should do next unless a member specifically wrote that. Don't invent stats — if you're unsure of a number, mark it `≈` rather than fabricate precision. + +### 5e. Memory update batch (10 parallel Sonnet calls) Dispatch all 10 voting members in one batch. Each prompt: @@ -233,25 +258,25 @@ Dispatch all 10 voting members in one batch. Each prompt: Use the `Edit` tool within the sub-agent (or Write for creating a fresh file if needed), but primarily these are append operations — sub-agents know how. -### 5e. Present to the user +### 5f. Present to the user — condensed, with pointer to `summary.md` -Emit a final user-facing block in this shape: +The terminal presentation is deliberately thinner than it used to be because the rich artefact is now `summary.md`. Emit a final user-facing block in this shape: ``` -| Voter | Voted for (snippet) | -|---|---| -| Elif Tavşan | — "<≤12-word snippet>" | -| Dr. Wren Okafor | — "<≤12-word snippet>" | -| Magnus Holt | — "<≤12-word snippet>" | -| Sister Vale | — "<≤12-word snippet>" | -| Niko Prochazka | — "<≤12-word snippet>" | -| Dr. Vaasa | — "<≤12-word snippet>" | -| Kai Lindholm | — "<≤12-word snippet>" | -| Cassian Vire | — "<≤12-word snippet>" | -| Marcelo Tintori | — "<≤12-word snippet>" | -| Mari Koskela | — "<≤12-word snippet>" | +## Session outcome — -**Result:** wins with votes. + + +Vote distribution: + + Koskela ████████ 4 ← winner + Tavşan ██████ 3 + Vaasa ████ 2 + Vire ██ 1 + others · 0 + +Winner: , /10 votes. + --- @@ -261,10 +286,13 @@ Emit a final user-facing block in this shape: --- -Session logged → `sessions//` +📄 Full narrative summary (phrases, influence map, trajectory, stats): + sessions//summary.md + +Session archive: sessions// ``` -If there were open clarification questions raised at vote time, add a brief line under the result noting them and that they're recorded in `outcome.md`. +Do NOT duplicate the full 10-row vote table in the terminal — that's in both `votes.md` and `summary.md`. Keep the terminal output scannable. --- @@ -279,10 +307,11 @@ If there were open clarification questions raised at vote time, add a brief line ## Model overrides In the `Agent` tool calls: -- Phases 2, 4, 5d: use each sub-agent's default model (`sonnet`, as declared in its frontmatter). No override needed. +- Phases 2, 4, 5e: use each sub-agent's default model (`sonnet`, as declared in its frontmatter). No override needed. - Phase 3 (both rounds): set `model: "opus"` explicitly on each `Agent` call to lift members into deeper reasoning for debate + revise. - Phase 1 (Researcher): default (`sonnet`). - Scribe calls: default (`haiku`). +- Phase 5d (`summary.md`): the Moderator writes this directly — no sub-agent call. ## Web access diff --git a/CLAUDE.md b/CLAUDE.md index 0eff3fa..3b3489c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,7 +19,7 @@ The full design is archived at `docs/structure/initial-plan.md`. - **2. Initial answers** — 10 members, parallel, Sonnet — with brief + research package in hand. Members may flag `User clarification needed`; answers append to `brief.md` and flow into Phase 3 (Phase 2 is not re-run). - **3. Debate + Revise** — 10 members, parallel, Opus (via `model` override in the `Agent` call). Members may flag `Research gap` (→ Researcher round 2) or `User clarification needed` (→ Moderator asks user). If either fires, **one bounded** second revision round happens. - **4. Vote** — 10 members, parallel, Sonnet. Ballot is **transparent** (attributed by name). Self-votes allowed. Any last clarification flags are surfaced in `outcome.md` as open questions without re-running earlier phases. -- **5. Tally + Tie-break + Archive** — Moderator tallies. On tie: `AskUserQuestion` with tied full answers as option previews. Scribe (Haiku) writes `outcome.md`. Final Sonnet batch updates each member's `journal.md`. +- **5. Tally + Tie-break + Archive** — Moderator tallies. On tie: `AskUserQuestion` with tied full answers as option previews. Scribe (Haiku) writes `outcome.md`. Moderator writes `summary.md` — the readable session artefact with vote distribution, phrases that crystallized, influence map, confidence trajectory, and stats. Final Sonnet batch updates each member's `journal.md`. ## Moderator responsibilities (this is you — the main session) @@ -50,7 +50,7 @@ Hard cap: at most **one** follow-up revision round per session. - `.claude/agents/council-*.md` — 10 voting members + `council-researcher.md` + `council-scribe.md` - `.claude/commands/council.md` — `/council` orchestration - `members//` — per-member memory (`persona.md`, `journal.md`, `on-the-user.md`, `revisit.md`) -- `sessions//` — one directory per session (`brief.md`, `research/`, `initial-answers.md`, `revised-answers.md`, `votes.md`, `outcome.md`) +- `sessions//` — one directory per session (`brief.md`, `research/`, `initial-answers.md`, `revised-answers.md`, `votes.md`, `outcome.md`, `summary.md`) - `council-sessions.base`, `council-members.base` — Obsidian Bases at the root - `docs/structure/initial-plan.md` — archived design document diff --git a/docs/structure/initial-plan.md b/docs/structure/initial-plan.md index c864cb5..ccd097a 100644 --- a/docs/structure/initial-plan.md +++ b/docs/structure/initial-plan.md @@ -139,7 +139,8 @@ council/ # ← repo root = Obsidian vault ├── initial-answers.md # scribe: Phase 2 verbatim, attributed ├── revised-answers.md # scribe: Phase 3 critiques + revised (round 1 + optional round 2) ├── votes.md # scribe: Phase 4 votes + tally - └── outcome.md # scribe: canonical session file (Obsidian Base target) + ├── outcome.md # scribe: canonical session file (Obsidian Base target) + └── summary.md # moderator: narrative summary with stats, influence map, phrases ``` `.claude/` can be hidden in Obsidian's file-explorer settings; it doesn't break anything if visible. Wikilinks are folder-qualified (e.g. `[[members/vaasa/persona|Dr. Ingrid Vaasa]]`, `[[sessions/2026-04-19_self-host-email/outcome|Self-host email?]]`).