Elenchus — build front end
The build/architecture front end over the elenchus-council engine. The
engine owns the loop (Socratic questions → user answers → stress-test →
dissent-preserving synthesis → gate, no readiness verdict). This skill does
not re-implement that — read elenchus-council/SKILL.md and run its loop.
This file supplies only the build-mode specifics: triggers, premise shaping,
seat instructions, seat tools, the checkpoint file, and the terminal.
Convening the engine is the first move, not a formality. Do not answer the
premise yourself, even when the build "seems simple" — that shortcut is the
exact sycophancy this exists to prevent.
Scope
- In: stress-testing a build/architecture premise — a single feature or a
whole app from scratch — that the user is still articulating.
- Out: an idea the user has already settled (hand to brainstorming); and an
over-engineering / flaw verdict ("is feature X over-engineering?"). That
framing invites a yes/no and sycophancy; a single high-tier model can give it.
Elenchus deliberately replaces the verdict with gap-exposure.
Premise shaping (what to elicit before Round 1)
Get the user's mental model in their own words, enough for the seats to find
where it's thin. Draw out:
- What the app/feature is, and what they want to build in this round.
- Why — the goal behind it ("I want feature Y because I think it boosts
activity"). The why is where the load-bearing assumptions hide.
- The key frameworks / APIs / services they intend to use.
- Scope: a feature on an existing app, or an app from scratch.
This is the premise. Don't pre-critique it — but don't dispatch on it yet either.
First run Macro clarification below to give the seats a macro vision, then propose a
Seat roster. Both happen in the chairman thread, before Round 1.
Macro clarification (before Round 1)
The seats are strong on architecture, tools, and logic but rarely reach for the
frontend on their own. So before dispatching, the chairman builds a macro vision of
the project and feeds it into every seat's prompt — that is what lets the seats ask
grounded questions across all the project's aspects (frontend included), not just the
backend slice they gravitate to.
Ask the macro questions one at a time, in chat. Do not dump a list, and do not
spin up one markdown file per question. Ask one, wait for the answer, ask the next. Record
each Q&A into the checkpoint's Clarifying Q&A section as it lands (chairman asked / user
answered), so it survives a /clear.
Cover at least these axes — skip any the premise already settled, follow up where an answer
opens a new gap:
- Platform. Web app? Mobile (one OS or multiplatform)? Desktop (which framework)? CLI?
A mix? "Is this multiplatform, or one target first?"
- Frontend stack. Framework / rendering model / component system in mind — or undecided.
- Backend & services. Runtime, data store, third-party APIs, auth, hosting.
- Users & scale. Who uses it, how many, what's the load-bearing UX path.
- Greenfield vs existing. New build, or a feature inside a running system with constraints.
When a framework choice is undecided, offer elenchus-study. If the user is unsure which
framework/library to pick, say so and offer to dispatch elenchus-study to benchmark the
candidates on community feedback before continuing — don't guess one into the premise.
For a visual frontend-design question, hand off — don't decide it in prose. When a
question is genuinely visual (a layout, a component's look and feel, two design
directions to compare — not a conceptual "which stack?"), dispatch the design thinking to
the ui-ux-pro-max skill and render its options through the visual-companion
skill so the user can see them in the browser. The user answers in the terminal;
the browser is display-only. Keep conceptual/tradeoff/requirements questions in the chat
as usual — this handoff is only for questions the user grasps better by seeing than reading.
The chairman does the design once — the seats do not. The council seats only surface
the visual requirements and critique as text (that is all their round schemas produce, and
they cannot dispatch subagents). Do not ask every seat to generate or push a mockup —
that fans out N redundant designs and burns tokens. Instead the chairman alone takes the
seats' requirements, runs ui-ux-pro-max one time to produce the design/options, and
pushes that single result through visual-companion. Seats gather; the chairman renders.
Seat roster (proposed, then approved)
After the clarifying questions — as a separate step — the chairman proposes a seat
roster, then the user approves or edits it. The engine's default is one seat per tier
(fable/opus/sonnet/haiku); build mode replaces that with the approved roster: any seat count,
any model mix, each seat carrying a lens.
Propose, grounded in the answers — never guessed. State the count, the model per seat,
and why each lens earns its seat, tied to what the user actually said. Example shape:
"Here's my proposed roster — 2 opus, 4 sonnet, 1 haiku. The two opus seats take the
frontend (you're going multiplatform Flutter, that's where the load-bearing risk
is). Three sonnet seats split the backend (sync engine, data model, auth). One sonnet
takes integrations (the Stripe + push pieces). The haiku seat is a macro-alignment
check — it holds the whole picture and flags aspects the others missed. Roughly N seat-calls
per round."
- Propose freely; add a one-line cost note (≈ seat-calls per round) and let the user trim.
- Lenses do the decorrelating within a tier. Repeated tiers are fine (e.g. 4 sonnet) —
give each a distinct lens (frontend / a specific backend slice / integrations /
macro-alignment) so they don't collapse onto the same answer. The engine's honest-labeling
still holds: same vendor, better than one model, not truly independent.
- The user owns the final roster. They approve as-is or specify their own count, models,
and lens split. Record the approved roster in the checkpoint (
seats: as {model, lens}).
- Graceful degradation unchanged: if an approved tier can't be reached, drop that seat,
say so, never silently re-assign its lens to a duplicate model.
Confirm the roster before EVERY dispatching round — not just Round 1. Before dispatching
any round (Round 1, Round 2 re-dispatch, and Round 3 spec-check), and on resume of an
existing session, the chairman presents the roster it intends to use and waits for the user's
go-ahead before dispatching. Reusing the checkpoint's saved roster is fine — but the user must
still confirm it (or edit it) this round. On resume, re-state the saved roster and the per-seat
lens/slice assignment for the upcoming round, and dispatch only after the user agrees. Never
dispatch seats on a silently-reused or newly-assumed structure. This is a hard gate, same as the
"answer questions one at a time" rule.
Round templates (build mode)
The engine composes each seat's prompt from seat-base + a round template this
skill owns + the tier adapter (see elenchus-council → Templates &
composition). Build mode supplies three:
- Round 1 —
templates/round-1-questions.md. The biting questions a senior reviewer
would ask about this design (the un-named failure mode, the edge case, "can you actually
explain this part?"). Schema: QUESTIONS / UNEXAMINED ASSUMPTIONS / WHERE TO LOOK. The
chairman injects, per seat, that seat's assigned LENS (from the roster) and the MACRO
CONTEXT (from the clarifying Q&A) into the composed prompt — so each seat asks within its
lens (including the frontend the seats normally skip) while holding the whole-project view.
- Round 2 —
templates/round-2-stress-test.md. Stress-test the user's answers
for contradictions, unjustified leaps, and hand-waving. Schema:
HOLDS UP / DOESN'T HOLD / STILL OPEN.
- Round 3 —
templates/round-3-spec-check.md (terminal only, runs once the
user self-declares ready — see Terminal). Seats audit the chairman's draft
spec against the session record for fidelity and completeness, not the user's
design. Schema: CAPTURED FAITHFULLY / MISSING / MISREPRESENTED.
Tools/grounding: the council-seat sandbox carries Read/Grep/Glob/WebSearch/
WebFetch + Context7 MCP. In build mode the seats ground every framework / API
the user named against current docs (Context7 first, web second) — both to ask
accurate questions and to point at a concrete, current study path, not generic
advice.
The checkpoint file (durable state)
One markdown file per premise is the durable record that survives a /clear.
- Path:
docs/elenchus/<premise-slug>.md (slug = lowercase, hyphenated, from
the premise; e.g. docs/elenchus/pelu-geocoding.md).
- Gitignore
docs/elenchus/ first. These checkpoints are private session scratch,
not artifacts to commit. Before writing the first checkpoint, ensure the caller
project's .gitignore contains a docs/elenchus/ line — append it if missing (create
.gitignore if there is none). Do this once per session; don't duplicate the line.
- Write it DURING the round, before the user clears — never rely on a
SessionEnd hook. After Round 1, write the premise + anonymized, categorized
questions, then tell the user to /clear or /compact and re-invoke. After
Round 2, update with what held, the flagged contradictions, and the study path.
- Resume = scan-on-invoke. When convened, Read
docs/elenchus/ for an open
session (ready: false) matching the premise. If found, resume from its
round: read the premise + open questions back to the user and collect their
answers, then dispatch Round 2. If none, start Round 1.
- Ask the Round-1 questions one at a time, in chat — same as the clarifying phase.
The questions live in the checkpoint markdown, but the user answers them in
conversation, one by one, not by editing the file or replying to a dumped list.
Read one question (keep its id and which category it came from), wait for the answer,
record it in the checkpoint's answers section, then ask the next. This is the default
flow for every new user, not a per-user preference. "I don't know" is a valid answer —
log it and move on. Only after the last question dispatch Round 2.
Frontmatter schema (mirrors the readiness-session prototype):
---
artifact: elenchus-build-session
premise: "<one-line premise>"
ready: false # the USER self-declares this true; the council never sets it
round: 1 # 1 = questions posed, awaiting answers · 2 = answers stress-tested
platform: "<web | mobile | desktop | cli | multiplatform | ...>" # from clarifying Q&A
macro: # the macro vision injected into every seat (from clarifying Q&A)
frontend: "<stack or 'undecided'>"
backend: "<runtime/data/services>"
users_scale: "<who / how many / load-bearing path>"
greenfield: <true|false>
seats: # the USER-approved roster (replaces the engine's one-per-tier default)
- {model: opus, lens: frontend}
- {model: sonnet, lens: backend-sync}
- {model: haiku, lens: macro-alignment}
frameworks: [...] # tools/APIs the seats grounded via Context7/web
open_questions: [Q1, Q2, ...] # ids unanswered or returned "I don't know"
resolved: [...]
study_path: [...] # concepts to study for any "I don't know" / flagged gap
spec_path: null # set to docs/superpowers/specs/<date>-<slug>.md once written
created: <date>
updated: <date>
---
Body: the premise; a Clarifying Q&A section (each macro question the chairman asked
in chat + the user's answer, in order — written as it lands, before any /clear); the
Round-1 questions grouped by category (anonymized — strip which seat asked), each with
an id; an answers section; a stress-test section (held / didn't hold / still open +
contradictions); and the study path.
Terminal
- Success exit = the user self-declares ready. This does not end with a bare
hand-off — it ends with a verified spec that pins down what the session settled,
produced in four steps (Spec synthesis, below): the chairman drafts → the council
verifies the draft (Round 3) → the chairman revises → the user finalizes it. The spec
is the input the brainstorming skill then reviews (and from there, writing-plans).
Elenchus is the stress-test before brainstorming; the spec is the bridge between them.
Set
ready: true in the checkpoint only because the user declared it.
- Open questions / an "I don't know" → honest stop. Present the ordered study
path (grounded in current docs), keep the checkpoint open, and invite re-entry
after study. An "I don't know" is a learning point, not a failure — and
not your cue to teach the gap and green-light building anyway. Teach if
asked, but the green light is the user's call. Never certify readiness. Do not
write a spec while questions are still open unless the user explicitly asks for an
interim spec that records the gaps as open.
Spec synthesis (the terminal artifact)
Once the user self-declares ready, pin the session down into a spec the brainstorming
skill can consume. The spec is a faithful record, not a green light: it carries the
settled decisions and the dissents and open questions, with their reasoning intact.
- Draft. From the checkpoint, the chairman writes a draft to
docs/elenchus/<slug>-spec-draft.md covering:
- Premise & goal — what's being built and the why behind it.
- Settled decisions — each decision that survived stress-test, with the
reasoning that made it hold (not flattened to a bare assertion).
- Grounded frameworks / APIs — what was checked against current docs, and how firm.
- Constraints & non-goals surfaced during the rounds.
- Preserved dissents — where the seats split, both positions and the condition
under which each wins. Never smooth these into "agreed."
- Open questions / study path still outstanding (if the user chose to spec anyway).
- Verify (Round 3 — full parallel council). Dispatch the seats via the engine with
templates/round-3-spec-check.md, giving each the session record + the draft.
They audit fidelity, not the design (CAPTURED FAITHFULLY / MISSING / MISREPRESENTED).
Anonymize and synthesize as in any round.
- Revise. The chairman fixes every
MISSING / MISREPRESENTED finding — restoring
dropped decisions, un-smoothing dissent, removing invented certainty. Re-verify if the
revisions were substantial.
- Finalize on the user's say-so. Present the verified draft. Only after the user
confirms, the chairman writes the final to
docs/superpowers/specs/<YYYY-MM-DD>-<slug>.md and records that path in the
checkpoint's spec_path. The user owns this call — do not write into specs/ or
treat the spec as a build green light without explicit confirmation. Then point the
user at the brainstorming skill over that spec file.
Common mistakes (build front end)
- Answering the architecture question directly because it "seems simple" instead
of convening the council.
- Skipping the macro clarification and dispatching seats with no macro vision — so the
seats ask only backend questions and the frontend goes unexamined.
- Dumping all the clarifying questions at once, or spinning up a markdown file per
question, instead of asking them one at a time in chat.
- Dumping all the Round-1 council questions for the user to answer in one block (or
telling them to edit the checkpoint), instead of asking them one by one in chat. The
questions are stored in markdown; they are answered in conversation, one at a time.
- Dispatching the fixed four fable/opus/sonnet/haiku seats without proposing a roster, or
proposing a roster the user never approved.
- Re-dispatching a later round (Round 2, Round 3, or on resume) on a silently-reused or
assumed roster without re-confirming the structure with the user first — the roster gate
applies to every dispatching round, not only Round 1.
- Repeating a tier across seats without giving each a distinct lens — duplicate models
with the same lens are one model in a costume.
- Converting "the user can't explain their own design" into "a small gap I'll
teach, then they can start." Surface the study path; withhold the green light.
- Letting the chairman declare the design ready. Readiness is the user's call.
- Writing state only at the end (lose it on
/clear) instead of during the round.
- Smoothing a genuine bottom-line split between seats into "they basically agree."
- Smoothing that same split out of the spec — dropping a preserved dissent or open
question so the spec reads cleaner than the session actually was.
- Writing the spec yourself and skipping the Round 3 council verification, or treating
its
CAPTURED FAITHFULLY as a readiness sign-off rather than a fidelity check.
- Writing the final into
docs/superpowers/specs/ (or calling the spec a green light to
build) before the user explicitly confirms. Drafting and placement are different calls.
1---2name: elenchus-build3description: Use when the user wants a build or architecture idea stress-tested before they commit to building it — "help me plan/design this app", "design the architecture for X", "review my architecture before I build", "is my mental model of X sound", "I want to build Y because Z — poke holes in it". For the still-articulating stage, before brainstorming. NOT for ideas already decided (that's brainstorming), NOT for researching/learning a topic the user has no premise about yet ("I want to learn about X" / "gather resources on Y" — that's elenchus-study), and NOT for an over-engineering / flaw yes-no verdict ("is X over-engineering?") — a single high-tier model can answer those.4---56# Elenchus — build front end78The **build/architecture** front end over the `elenchus-council` engine. The9engine owns the loop (Socratic questions → user answers → stress-test →10dissent-preserving synthesis → gate, no readiness verdict). **This skill does11not re-implement that — read `elenchus-council/SKILL.md` and run its loop.**12This file supplies only the build-mode specifics: triggers, premise shaping,13seat instructions, seat tools, the checkpoint file, and the terminal.1415**Convening the engine is the first move, not a formality.** Do not answer the16premise yourself, even when the build "seems simple" — that shortcut is the17exact sycophancy this exists to prevent.1819## Scope2021- **In:** stress-testing a build/architecture premise — a single feature or a22 whole app from scratch — that the user is still articulating.23- **Out:** an idea the user has already settled (hand to brainstorming); and an24 over-engineering / flaw **verdict** ("is feature X over-engineering?"). That25 framing invites a yes/no and sycophancy; a single high-tier model can give it.26 Elenchus deliberately replaces the verdict with gap-exposure.2728## Premise shaping (what to elicit before Round 1)2930Get the user's **mental model in their own words**, enough for the seats to find31where it's thin. Draw out:32331. **What the app/feature is**, and **what they want to build** in this round.342. **Why** — the goal behind it ("I want feature Y because I think it boosts35 activity"). The *why* is where the load-bearing assumptions hide.363. **The key frameworks / APIs / services** they intend to use.374. **Scope:** a feature on an existing app, or an app from scratch.3839This is the premise. Don't pre-critique it — but **don't dispatch on it yet either.**40First run **Macro clarification** below to give the seats a macro vision, then propose a41**Seat roster**. Both happen in the chairman thread, before Round 1.4243## Macro clarification (before Round 1)4445The seats are strong on **architecture, tools, and logic** but **rarely reach for the46frontend** on their own. So before dispatching, the chairman builds a **macro vision** of47the project and feeds it into every seat's prompt — that is what lets the seats ask48grounded questions across *all* the project's aspects (frontend included), not just the49backend slice they gravitate to.5051**Ask the macro questions one at a time, in chat.** Do **not** dump a list, and do **not**52spin up one markdown file per question. Ask one, wait for the answer, ask the next. Record53each Q&A into the checkpoint's *Clarifying Q&A* section as it lands (chairman asked / user54answered), so it survives a `/clear`.5556Cover at least these axes — skip any the premise already settled, follow up where an answer57opens a new gap:5859- **Platform.** Web app? Mobile (one OS or multiplatform)? Desktop (which framework)? CLI?60 A mix? "Is this multiplatform, or one target first?"61- **Frontend stack.** Framework / rendering model / component system in mind — or undecided.62- **Backend & services.** Runtime, data store, third-party APIs, auth, hosting.63- **Users & scale.** Who uses it, how many, what's the load-bearing UX path.64- **Greenfield vs existing.** New build, or a feature inside a running system with constraints.6566**When a framework choice is undecided, offer elenchus-study.** If the user is unsure which67framework/library to pick, say so and offer to dispatch **elenchus-study** to benchmark the68candidates on community feedback before continuing — don't guess one into the premise.6970**For a visual frontend-design question, hand off — don't decide it in prose.** When a71question is genuinely *visual* (a layout, a component's look and feel, two design72directions to compare — not a conceptual "which stack?"), dispatch the design thinking to73the **`ui-ux-pro-max`** skill and render its options through the **`visual-companion`**74skill so the user can *see* them in the browser. The user answers in the **terminal**;75the browser is display-only. Keep conceptual/tradeoff/requirements questions in the chat76as usual — this handoff is only for questions the user grasps better by seeing than reading.7778**The chairman does the design once — the seats do not.** The council seats only surface79the *visual requirements and critique* as text (that is all their round schemas produce, and80they cannot dispatch subagents). **Do not ask every seat to generate or push a mockup** —81that fans out N redundant designs and burns tokens. Instead the **chairman alone** takes the82seats' requirements, runs `ui-ux-pro-max` **one time** to produce the design/options, and83pushes that single result through `visual-companion`. Seats gather; the chairman renders.8485## Seat roster (proposed, then approved)8687After the clarifying questions — as a **separate** step — the chairman proposes a seat88roster, then the user approves or edits it. The engine's default is one seat per tier89(fable/opus/sonnet/haiku); build mode **replaces that with the approved roster**: any seat count,90any model mix, each seat carrying a **lens**.9192**Propose, grounded in the answers — never guessed.** State the count, the model per seat,93and *why each lens earns its seat*, tied to what the user actually said. Example shape:9495> "Here's my proposed roster — 2 opus, 4 sonnet, 1 haiku. The two opus seats take the96> **frontend** (you're going multiplatform Flutter, that's where the load-bearing risk97> is). Three sonnet seats split the **backend** (sync engine, data model, auth). One sonnet98> takes **integrations** (the Stripe + push pieces). The haiku seat is a **macro-alignment**99> check — it holds the whole picture and flags aspects the others missed. Roughly N seat-calls100> per round."101102- **Propose freely; add a one-line cost note** (≈ seat-calls per round) and let the user trim.103- **Lenses do the decorrelating within a tier.** Repeated tiers are fine (e.g. 4 sonnet) —104 give each a **distinct lens** (frontend / a specific backend slice / integrations /105 macro-alignment) so they don't collapse onto the same answer. The engine's honest-labeling106 still holds: same vendor, better than one model, not truly independent.107- **The user owns the final roster.** They approve as-is or specify their own count, models,108 and lens split. Record the approved roster in the checkpoint (`seats:` as `{model, lens}`).109- **Graceful degradation unchanged:** if an approved tier can't be reached, drop that seat,110 say so, never silently re-assign its lens to a duplicate model.111112**Confirm the roster before EVERY dispatching round — not just Round 1.** Before dispatching113*any* round (Round 1, Round 2 re-dispatch, **and Round 3 spec-check**), and on **resume** of an114existing session, the chairman **presents the roster it intends to use and waits for the user's115go-ahead before dispatching.** Reusing the checkpoint's saved roster is fine — but the user must116still confirm it (or edit it) *this* round. On resume, re-state the saved roster and the per-seat117lens/slice assignment for the upcoming round, and dispatch only after the user agrees. **Never118dispatch seats on a silently-reused or newly-assumed structure.** This is a hard gate, same as the119"answer questions one at a time" rule.120121## Round templates (build mode)122123The engine composes each seat's prompt from `seat-base` + a **round template this124skill owns** + the tier adapter (see `elenchus-council` → *Templates &125composition*). Build mode supplies three:126127- **Round 1 — `templates/round-1-questions.md`.** The biting questions a senior reviewer128 would ask about *this* design (the un-named failure mode, the edge case, "can you actually129 explain this part?"). Schema: `QUESTIONS / UNEXAMINED ASSUMPTIONS / WHERE TO LOOK`. **The130 chairman injects, per seat, that seat's assigned LENS (from the roster) and the MACRO131 CONTEXT (from the clarifying Q&A)** into the composed prompt — so each seat asks within its132 lens (including the frontend the seats normally skip) while holding the whole-project view.133- **Round 2 — `templates/round-2-stress-test.md`.** Stress-test the user's answers134 for contradictions, unjustified leaps, and hand-waving. Schema:135 `HOLDS UP / DOESN'T HOLD / STILL OPEN`.136- **Round 3 — `templates/round-3-spec-check.md`** (terminal only, runs once the137 user self-declares ready — see *Terminal*). Seats audit the chairman's **draft138 spec** against the session record for fidelity and completeness, not the user's139 design. Schema: `CAPTURED FAITHFULLY / MISSING / MISREPRESENTED`.140141**Tools/grounding:** the council-seat sandbox carries Read/Grep/Glob/WebSearch/142WebFetch + **Context7 MCP**. In build mode the seats ground every framework / API143the user named against **current docs** (Context7 first, web second) — both to ask144accurate questions and to point at a concrete, current study path, not generic145advice.146147## The checkpoint file (durable state)148149One markdown file per premise is the durable record that survives a `/clear`.150151- **Path:** `docs/elenchus/<premise-slug>.md` (slug = lowercase, hyphenated, from152 the premise; e.g. `docs/elenchus/pelu-geocoding.md`).153- **Gitignore `docs/elenchus/` first.** These checkpoints are private session scratch,154 not artifacts to commit. Before writing the first checkpoint, ensure the caller155 project's `.gitignore` contains a `docs/elenchus/` line — append it if missing (create156 `.gitignore` if there is none). Do this once per session; don't duplicate the line.157- **Write it DURING the round, before the user clears** — never rely on a158 `SessionEnd` hook. After Round 1, write the premise + anonymized, categorized159 questions, then tell the user to `/clear` or `/compact` and re-invoke. After160 Round 2, update with what held, the flagged contradictions, and the study path.161- **Resume = scan-on-invoke.** When convened, Read `docs/elenchus/` for an open162 session (`ready: false`) matching the premise. If found, resume from its163 `round`: read the premise + open questions back to the user and collect their164 answers, then dispatch Round 2. If none, start Round 1.165- **Ask the Round-1 questions one at a time, in chat — same as the clarifying phase.**166 The questions live in the checkpoint markdown, but the user answers them **in167 conversation, one by one**, not by editing the file or replying to a dumped list.168 Read one question (keep its id and which category it came from), wait for the answer,169 record it in the checkpoint's answers section, then ask the next. This is the default170 flow for every new user, not a per-user preference. "I don't know" is a valid answer —171 log it and move on. Only after the last question dispatch Round 2.172173Frontmatter schema (mirrors the readiness-session prototype):174175```176---177artifact: elenchus-build-session178premise: "<one-line premise>"179ready: false # the USER self-declares this true; the council never sets it180round: 1 # 1 = questions posed, awaiting answers · 2 = answers stress-tested181platform: "<web | mobile | desktop | cli | multiplatform | ...>" # from clarifying Q&A182macro: # the macro vision injected into every seat (from clarifying Q&A)183 frontend: "<stack or 'undecided'>"184 backend: "<runtime/data/services>"185 users_scale: "<who / how many / load-bearing path>"186 greenfield: <true|false>187seats: # the USER-approved roster (replaces the engine's one-per-tier default)188 - {model: opus, lens: frontend}189 - {model: sonnet, lens: backend-sync}190 - {model: haiku, lens: macro-alignment}191frameworks: [...] # tools/APIs the seats grounded via Context7/web192open_questions: [Q1, Q2, ...] # ids unanswered or returned "I don't know"193resolved: [...]194study_path: [...] # concepts to study for any "I don't know" / flagged gap195spec_path: null # set to docs/superpowers/specs/<date>-<slug>.md once written196created: <date>197updated: <date>198---199```200201Body: the premise; a **Clarifying Q&A** section (each macro question the chairman asked202in chat + the user's answer, in order — written as it lands, before any `/clear`); the203Round-1 questions grouped **by category** (anonymized — strip which seat asked), each with204an id; an **answers** section; a **stress-test** section (held / didn't hold / still open +205contradictions); and the **study path**.206207## Terminal208209- **Success exit = the user self-declares ready.** This does **not** end with a bare210 hand-off — it ends with a **verified spec** that pins down what the session settled,211 produced in four steps (Spec synthesis, below): the chairman drafts → the council212 verifies the draft (Round 3) → the chairman revises → the user finalizes it. The spec213 is the input the **brainstorming skill** then reviews (and from there, writing-plans).214 Elenchus is the stress-test *before* brainstorming; the spec is the bridge between them.215 Set `ready: true` in the checkpoint only because the *user* declared it.216- **Open questions / an "I don't know" → honest stop.** Present the ordered study217 path (grounded in current docs), keep the checkpoint open, and invite re-entry218 after study. An "I don't know" is a learning point, **not** a failure — and219 **not** your cue to teach the gap and green-light building anyway. Teach if220 asked, but the green light is the user's call. Never certify readiness. Do **not**221 write a spec while questions are still open unless the user explicitly asks for an222 interim spec that records the gaps as open.223224## Spec synthesis (the terminal artifact)225226Once the user self-declares ready, pin the session down into a spec the brainstorming227skill can consume. The spec is a **faithful record**, not a green light: it carries the228settled decisions *and* the dissents and open questions, with their reasoning intact.2292301. **Draft.** From the checkpoint, the chairman writes a draft to231 `docs/elenchus/<slug>-spec-draft.md` covering:232 - **Premise & goal** — what's being built and the *why* behind it.233 - **Settled decisions** — each decision that survived stress-test, with the234 reasoning that made it hold (not flattened to a bare assertion).235 - **Grounded frameworks / APIs** — what was checked against current docs, and how firm.236 - **Constraints & non-goals** surfaced during the rounds.237 - **Preserved dissents** — where the seats split, *both* positions and the condition238 under which each wins. Never smooth these into "agreed."239 - **Open questions / study path** still outstanding (if the user chose to spec anyway).2402. **Verify (Round 3 — full parallel council).** Dispatch the seats via the engine with241 `templates/round-3-spec-check.md`, giving each the **session record + the draft**.242 They audit fidelity, not the design (`CAPTURED FAITHFULLY / MISSING / MISREPRESENTED`).243 Anonymize and synthesize as in any round.2443. **Revise.** The chairman fixes every `MISSING` / `MISREPRESENTED` finding — restoring245 dropped decisions, un-smoothing dissent, removing invented certainty. Re-verify if the246 revisions were substantial.2474. **Finalize on the user's say-so.** Present the verified draft. **Only after the user248 confirms**, the chairman writes the final to249 `docs/superpowers/specs/<YYYY-MM-DD>-<slug>.md` and records that path in the250 checkpoint's `spec_path`. The user owns this call — do not write into `specs/` or251 treat the spec as a build green light without explicit confirmation. Then point the252 user at the **brainstorming skill** over that spec file.253254## Common mistakes (build front end)255256- Answering the architecture question directly because it "seems simple" instead257 of convening the council.258- Skipping the macro clarification and dispatching seats with no macro vision — so the259 seats ask only backend questions and the frontend goes unexamined.260- Dumping all the clarifying questions at once, or spinning up a markdown file per261 question, instead of asking them one at a time in chat.262- Dumping all the Round-1 council questions for the user to answer in one block (or263 telling them to edit the checkpoint), instead of asking them one by one in chat. The264 questions are stored in markdown; they are *answered* in conversation, one at a time.265- Dispatching the fixed four fable/opus/sonnet/haiku seats without proposing a roster, or266 proposing a roster the user never approved.267- Re-dispatching a later round (Round 2, Round 3, or on resume) on a **silently-reused or268 assumed roster** without re-confirming the structure with the user first — the roster gate269 applies to *every* dispatching round, not only Round 1.270- Repeating a tier across seats without giving each a **distinct lens** — duplicate models271 with the same lens are one model in a costume.272- Converting "the user can't explain their own design" into "a small gap I'll273 teach, then they can start." Surface the study path; withhold the green light.274- Letting the chairman declare the design ready. Readiness is the user's call.275- Writing state only at the end (lose it on `/clear`) instead of during the round.276- Smoothing a genuine bottom-line split between seats into "they basically agree."277- Smoothing that same split *out of the spec* — dropping a preserved dissent or open278 question so the spec reads cleaner than the session actually was.279- Writing the spec yourself and skipping the Round 3 council verification, or treating280 its `CAPTURED FAITHFULLY` as a readiness sign-off rather than a fidelity check.281- Writing the final into `docs/superpowers/specs/` (or calling the spec a green light to282 build) before the user explicitly confirms. Drafting and placement are different calls.