add summary.md artefact to /council output

New Phase-5d step: the Moderator writes sessions/<slug>/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) <noreply@anthropic.com>
This commit is contained in:
2026-04-19 18:19:58 +02:00
co-authored by Claude Opus 4.7
parent 1acf635bab
commit 275daf9e26
3 changed files with 52 additions and 22 deletions
+48 -19
View File
@@ -218,7 +218,32 @@ Invoke `council-scribe` with everything needed:
Scribe writes `sessions/<slug>/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/<slug>/summary.md`. Frontmatter: `type: council-summary`, `session: <slug>`, `date: <YYYY-MM-DD>`.
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 — <Name>`** — 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`** — 35 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/<slug>/`, 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 | <Name> — "<≤12-word snippet>" |
| Dr. Wren Okafor | <Name> — "<≤12-word snippet>" |
| Magnus Holt | <Name> — "<≤12-word snippet>" |
| Sister Vale | <Name> — "<≤12-word snippet>" |
| Niko Prochazka | <Name> — "<≤12-word snippet>" |
| Dr. Vaasa | <Name> — "<≤12-word snippet>" |
| Kai Lindholm | <Name> — "<≤12-word snippet>" |
| Cassian Vire | <Name> — "<≤12-word snippet>" |
| Marcelo Tintori | <Name> — "<≤12-word snippet>" |
| Mari Koskela | <Name> — "<≤12-word snippet>" |
## Session outcome — <short problem title>
**Result:** <Winner Name> wins with <N> votes. <if tied: "Tie resolved by you.">
<one-sentence verdict distilled from the winning answer>
Vote distribution:
Koskela ████████ 4 ← winner
Tavşan ██████ 3
Vaasa ████ 2
Vire ██ 1
others · 0
Winner: <Winner Name>, <N>/10 votes. <if tied: "Tie broken by you in favour of ...">
<if open_questions_at_vote non-empty: one line naming them>
---
@@ -261,10 +286,13 @@ Emit a final user-facing block in this shape:
---
Session logged → `sessions/<slug>/`
📄 Full narrative summary (phrases, influence map, trajectory, stats):
sessions/<slug>/summary.md
Session archive: sessions/<slug>/
```
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
+2 -2
View File
@@ -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/<slug>/` — per-member memory (`persona.md`, `journal.md`, `on-the-user.md`, `revisit.md`)
- `sessions/<slug>/` — one directory per session (`brief.md`, `research/`, `initial-answers.md`, `revised-answers.md`, `votes.md`, `outcome.md`)
- `sessions/<slug>/` — 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
+2 -1
View File
@@ -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?]]`).