Create
Ask gateGenerate the primary deliverable using research insights
Create
Generate the primary deliverable from the research brief — the artifact the intent is ultimately about, whether that's a recommendation memo, a slate of concepts, a How-Might-We framing, an analytical report, or a content piece. Substance comes first; editing sharpens, it doesn't invent.
Scope
Producing the draft deliverable: the sections, concepts, or arguments that compose the artifact, grounded in the research. Create decides what the deliverable says or proposes — not the evidence base it draws on (research), whether it withstands scrutiny (review), or how it's finalized for an audience (deliver).
What to do
- Draft each section or concept from the research brief, applying divergent generation or convergent narrowing as the work calls for.
- Keep the deliverable traceable to the research that grounds it.
- Edit for clarity, structure, and argument strength without altering the creator's meaning.
- Hold cross-section consistency — terminology, voice, level of detail — so the pieces read as one artifact.
What NOT to do
- Don't redo research or invent claims the brief doesn't support — a gap is a revisit upstream.
- Don't run adversarial critique or fact-checking on your own draft; that's the review stage.
- Don't package or publish for an audience — that's deliver.
- Don't let editing rewrite the substance into something the creator didn't intend.
How the engine runs this stage
1Elaborate
collaborative · plan the work, fan out discovery, declare outputsInputs consumed
Discovery fan-out
knowledge artifactDraft DeliverableThe primary draft output of the create stage. Structure depends on the intent type — it may be a document, plan, analysis, design brief, proposal, or any other form appropriate to the intent's goal.
Draft Deliverable
The primary draft output of the create stage. Structure depends on the intent type — it may be a document, plan, analysis, design brief, proposal, or any other form appropriate to the intent's goal.
Content Guide
Regardless of form, the draft should:
- Address the problem statement from the intent clearly and directly
- Incorporate research findings — claims should trace back to the research brief
- Present a coherent argument or solution — not a collection of fragments
- Identify areas of uncertainty — where the draft makes assumptions or where evidence is thin
- Be substantive — complete enough for meaningful adversarial review, not a skeleton
Quality Signals
- A reader unfamiliar with the research can follow the argument
- Research findings are woven in naturally, not dumped as a separate section
- The draft takes a position rather than hedging everything
- Uncertainties are flagged honestly rather than hidden
Phase guidance
phase overrideELABORATION- "Draft addresses all 5 key questions from the research brief"
Create Stage — Elaboration
Criteria Guidance
Good criteria — concrete and verifiable
- "Draft addresses all 5 key questions from the research brief"
- "Each section has a clear thesis statement supported by evidence from research"
- "Draft presents counterarguments for its main claims"
Bad criteria — vague (no clear check)
- "Draft is complete"
- "Writing is good quality"
- "Content is comprehensive"
Outputs produced
output templateDraft DeliverablePrimary deliverable draft addressing research findings with coherent argument or solution.
Draft Deliverable
Primary deliverable draft addressing research findings with coherent argument or solution.
Expected Artifacts
- Draft -- addresses key findings from research with coherent structure
- Thesis statements -- each section has a clear thesis supported by evidence
- Counterarguments -- main claims are tested against opposing perspectives
- Editor refinements -- clarity and structure improvements applied
Quality Signals
- Draft addresses all key questions from the research brief
- Each section has a clear thesis supported by evidence
- Counterarguments are presented for main claims
- Draft has been refined for clarity and structure
2Review
pre-execute · agents audit the planned spec before any code landsreview agentAccuracyThe agent **MUST** fact-check the draft deliverable against source material and known constraints. Accuracy is the lens — a deliverable that ships with confidently-stated incorrect claims damages the reader's trust in everything else the deliverable says. The lens fires before the dedicated `fact-checker` hat in `review` so creator-stage corrections happen in the cheaper iteration.
Mandate: The agent MUST fact-check the draft deliverable against source material and known constraints. Accuracy is the lens — a deliverable that ships with confidently-stated incorrect claims damages the reader's trust in everything else the deliverable says. The lens fires before the dedicated fact-checker hat in review so creator-stage corrections happen in the cheaper iteration.
Check
The agent MUST verify, filing feedback for any violation:
- Factual claims sourced — Every load-bearing factual claim cites a source the reader could open and verify. Numbers, dates, named statistics, named events, named people's positions all qualify as load-bearing.
- Numbers and dates correct — Spot-check the cited source against the section's restatement. A strengthened paraphrase (the source's "may" became the section's "will") is a violation; a weakened paraphrase that hides a stronger source finding is also a violation.
- No internal contradictions — Different sections of the deliverable don't make incompatible factual claims. If section A says the market is dominated by X and section B says the market is fragmented across X, Y, and Z, that's a violation unless the contradiction is explicitly reconciled.
- Conclusions follow from evidence — Each load-bearing conclusion has a visible inferential chain from the cited evidence. Hidden inferential steps ("therefore obviously") are accuracy violations because they hide the place where the chain might break.
- No claim contradicts a recorded Decision — If the intent's decision register has a recorded Decision on a question, the deliverable doesn't quietly assume the opposite. Cite the Decision ID in any such finding.
- No unsourced load-bearing claim — A claim with no cited source carrying load is filed at major or critical, depending on how much downstream work depends on it.
Common failure modes to look for
- A round number stated without a citation — round numbers are usually paraphrased, not measured, and tend to be where strengthened claims hide
- A "studies show" / "research demonstrates" phrasing without naming any specific study
- A graph or table whose source is named in passing but whose underlying data isn't traceable
- A section that pivots its argument on a single sentence-long claim sourced to a tertiary vendor blog
- An inference that quietly imports an assumption from a different domain (e.g., "users in healthcare behave like users in consumer SaaS because…")
- A "common knowledge" claim that the audience for this deliverable might not in fact share
review agentQualityThe agent **MUST** verify the draft deliverable meets the standard the intent set and stays grounded in the research brief. Quality is the lens — substance, structure, and traceability to upstream work. A deliverable that ignores its own research, drifts off the stated problem, or buries its conclusions under poor structure fails this lens even if every individual sentence is correct.
Mandate: The agent MUST verify the draft deliverable meets the standard the intent set and stays grounded in the research brief. Quality is the lens — substance, structure, and traceability to upstream work. A deliverable that ignores its own research, drifts off the stated problem, or buries its conclusions under poor structure fails this lens even if every individual sentence is correct.
Check
The agent MUST verify, filing feedback for any violation:
- Traceability to research — Every load-bearing claim or recommendation in the draft traces to a research-brief takeaway, a finding, or a flagged gap. A claim that floats free of the research is either ungrounded or evidence the research stage missed a topic — either way it's a finding.
- Stays on the stated problem — The draft addresses the problem the intent named, not a tangential one the agent found more interesting. Scope creep within
createis a quality violation; flag the scope drift for the human to confirm or reject. - Structure reveals the argument — Section headers and ordering let a reader scan the draft and grasp the argument shape without reading every paragraph. Buried theses, missing transitions, or sections in an arbitrary order all violate this.
- Divergent / convergent discipline — Where the unit's success criteria called for divergent generation, the draft shows the variants considered, not just the survivor. Where it called for convergent narrowing, the draft names the criteria applied. Collapsing divergent prematurely is a violation; leaving convergent at a slate is also a violation.
- No silent gaps — Where the research brief flagged a question and the draft is silent on it, file feedback. Silent gaps are how research investment fails to land in the deliverable.
- Coherent across sibling units — Section depth, terminology, and voice are consistent across sibling units of the deliverable. One section reading like a memo and the next like a research paper is a quality violation.
Common failure modes to look for
- A "research said X, so we recommend Y" claim where Y doesn't actually follow from X
- A draft that strengthens or weakens a research finding to make the recommendation cleaner
- A draft that addresses a more interesting variant of the stated problem instead of the stated problem itself
- A convergent recommendation made without naming the criteria — the reader has to infer what was weighed
- A divergent slate that's superficially varied but reduces to one underlying approach with three surface presentations
- A section ordered alphabetically or by author preference when the argument has a natural dependency order
- One section calling the user a "customer," another a "buyer," a third an "operator" — same audience, three terms
3Execute
per-unit baton · Creator → Editor → Verifierhat 1CreatorProduce the substantive content for THIS unit of the deliverable — section, concept cluster, recommendation, How-Might-We exploration, or whatever the unit is decomposed to. Substance over polish; the editor sharpens, you build. Use research findings as the foundation and apply divergent generation where the work calls for variation, convergent narrowing where it calls for selection.
Focus: Produce the substantive content for THIS unit of the deliverable — section, concept cluster, recommendation, How-Might-We exploration, or whatever the unit is decomposed to. Substance over polish; the editor sharpens, you build. Use research findings as the foundation and apply divergent generation where the work calls for variation, convergent narrowing where it calls for selection.
Process
1. Anchor in the research brief
Read the relevant sections of RESEARCH-BRIEF.md and the analyst's takeaways for any upstream unit your section depends on. Note the actionable takeaways and the named gaps. Your content MUST trace to at least one — either building on a takeaway or addressing a flagged gap. A section that floats free of the research brief is a sign the unit is in the wrong stage.
2. Decide the work's mode — divergent, convergent, or both
The unit's success criteria tell you which mode the section is in:
- Divergent — the unit asks for a set of options, alternatives, or concepts (a slate of ideas, a How-Might-We problem framing exploration, candidate approaches). Generate broadly first; lateral, analogical, and constraint-based variation are all legitimate. Aim for option diversity over option polish.
- Convergent — the unit asks for a single recommendation, a chosen path, or a tightened argument. Narrow with explicit criteria (named in the unit's success criteria or, if absent, in the section itself before you narrow).
- Both — most ideation work runs divergent then convergent in the same unit. Generate broadly, then narrow with named criteria. Show both phases in the body so the reader sees what was considered and why what survived survived.
Don't collapse divergent into a single "obvious" answer — that's how creative work loses its variance. Don't leave convergent work at the slate stage — that's how decisions don't get made.
3. Generate and narrow
For divergent generation, useful generic moves (pick what fits the unit):
- Lateral — invert the obvious framing; ask what would have to be true for the opposite to work
- Analogical — borrow structure from a different domain that has solved a structurally similar problem
- Constraint-based — name a constraint the obvious solution violates and design around it
- Variant exploration — for each axis of legitimate variation (audience, scale, channel, time horizon), produce one option
For convergent narrowing, useful generic moves:
- Named criteria — list the criteria explicitly before scoring against them; criteria invented during scoring rarely survive review
- Tradeoff matrix — when multiple options score similarly, force the tradeoff into the body so the reader sees it
- Veto criteria — a single named criterion that any survivor MUST pass; useful when one constraint dominates
4. Write the body
Structure depends on what the unit is. Generic shape:
## What this section covers
<one paragraph: the slice of the deliverable this unit owns>
## Grounding
<which research-brief takeaways or gaps this section builds on>
## Content
<the substantive section — argument, concept slate, recommendation, framing>
## Decisions made / criteria applied
<for convergent work: what was narrowed and why. For divergent: what variations are surfaced.>
## Open Questions
<anything the section couldn't resolve. Default with veto-style approval OR flag `(needs human escalation)`.>
Each substantive claim cites a source — either a research-brief reference (see research/research-brief §Patterns 2) or an external source the research brief didn't capture (in which case append it to the research brief in a follow-up, don't silently introduce it).
5. Self-check before handing off
- Every section traces to at least one research-brief takeaway or gap
- Divergent work shows the variants considered, not just the survivor
- Convergent work names the criteria applied
- Every load-bearing claim cites a source
- Open questions are explicit and either defaulted or flagged for escalation
- No section is left as a TODO, placeholder, or "to be filled in"
Anti-patterns (RFC 2119)
- The agent MUST NOT start from scratch and ignore research findings
- The agent MUST NOT produce a skeleton or outline without substantive content
- The agent MUST NOT gold-plate prose before the argument or concept is solid
- The agent MUST NOT cherry-pick research that supports a predetermined conclusion
- The agent MUST NOT leave sections as TODOs or placeholders — flag and escalate instead
- The agent MUST NOT collapse divergent work to a single "obvious" answer without showing the variation considered
- The agent MUST NOT leave convergent work at a slate without naming the criteria applied
- The agent MUST NOT introduce claims the research brief doesn't support without adding them as new sourced findings
- The agent MUST ground every load-bearing claim in either the research brief or a freshly cited source
hat 2EditorRefine the creator's draft for THIS unit — sharpen structure, tighten clarity, strengthen the argument, ensure coherence with sibling units. You serve the creator's intent: sharpen what's there, don't rewrite what isn't. Substance is the creator's territory; signal-to-noise is yours.
Focus: Refine the creator's draft for THIS unit — sharpen structure, tighten clarity, strengthen the argument, ensure coherence with sibling units. You serve the creator's intent: sharpen what's there, don't rewrite what isn't. Substance is the creator's territory; signal-to-noise is yours.
Process
1. Read the creator's body and the sibling units
Read the creator's full section. Then read at least two sibling units' bodies under this stage to calibrate voice, terminology, and level of detail. Cross-section consistency is your responsibility — when one section says "users" and another says "customers" and a third says "operators" for the same audience, the reader experiences whiplash even if each section is locally fine.
2. Pass 1 — clarity at the sentence and paragraph level
Working sentence by sentence, paragraph by paragraph:
- Cut redundancy. If a paragraph of four sentences could be one sentence without losing meaning, the others are setup, not reasoning.
- Replace abstract with specific. "A range of approaches" → "three approaches: X, Y, Z." "Generally faster" → "30 % faster on the benchmark cited in research §3."
- Tighten the hook. The first sentence of each section earns the next scroll. If it doesn't, replace it.
- Surface the structure. The reader should see the section's argument from the headers alone. If they can't, the headers are wrong — rewrite them, don't bury the structure inside paragraphs.
3. Pass 2 — argument and evidence
For each load-bearing claim:
- Does the cited source support what the sentence asserts? Edit-pass drift is when a paraphrase strengthens or weakens a claim beyond what the source actually says.
- Is the inference from evidence to conclusion explicit? An invisible inferential step ("therefore obviously") is where readers lose trust.
- Where the creator made a divergent generation, does the section show the variation? Where they narrowed, are the criteria named?
- Where there's a contradicting source, is it acknowledged? Silently dropping the inconvenient side of a contradiction is a failure mode the editor catches.
4. Pass 3 — sibling and intent coherence
- Terminology used consistently across sibling units (one term per concept, not multiple)
- Section depth roughly matches: a 3000-word section sitting next to a 200-word section flags an imbalance
- No section duplicates content another section owns (each unit owns its own slice)
- The set of sections, read in order, tells a coherent story without gaps
5. Write the edited body
You write edits into the unit body. Don't produce a separate "editorial notes" document — apply the edits directly. Where you change a claim materially (sharpening it or weakening it because the source warrants it), leave a single-line NOTE: <what changed and why> so the verifier and the creator's next-iteration self can see what shifted.
If you find a defect you can't fix without changing meaning — e.g., a load-bearing claim is unsupported by its cited source — do NOT silently weaken it. Flag it in an ## Open Questions section and rewind: the creator owns substantive fixes, you own edit-level fixes. Crossing that line is how the editor accidentally rewrites the draft.
6. Self-check before handing off
- Every paragraph passes a "cut without losing meaning" test
- Every load-bearing claim is supported by the source the creator cited (or flagged if not)
- Terminology is consistent across sibling units
- Section headers reveal the argument structure on first scan
- No
NOTE:callout silently changes meaning — meaning-changing edits are flagged for the creator - Open Questions are explicit and routed to the creator or the human, not silently absorbed
Anti-patterns (RFC 2119)
- The agent MUST NOT rewrite the draft from scratch instead of editing
- The agent MUST NOT prioritize style over substance
- The agent MUST NOT make changes that alter the creator's intended meaning without flagging the change
- The agent MUST NOT introduce claims not supported by the research brief or the creator's body
- The agent MUST NOT over-edit to the point of losing the original voice
- The agent MUST NOT silently drop one side of a contradiction the creator surfaced
- The agent MUST NOT fix substantive defects by paraphrasing them away — flag and rewind instead
- The agent MUST keep terminology consistent across sibling units within the stage
- The agent MUST preserve divergent variation when the unit calls for it; collapsing variation is a substantive change, not an edit
hat 3VerifierValidate the per-unit design/synthesis artifact for the create stage of ideation. Units here are idea artifact — designed outputs that downstream stages execute against. Validation rules check substance, internal coherence with the brief, traceability to upstream inputs, and decision-register accountability. NOT executable verify-commands.
Focus: Validate the per-unit design/synthesis artifact for the create stage of ideation. Units here are idea artifact — designed outputs that downstream stages execute against. Validation rules check substance, internal coherence with the brief, traceability to upstream inputs, and decision-register accountability. NOT executable verify-commands.
Anti-patterns (RFC 2119):
- The agent MUST NOT read or interpret unit frontmatter for any mechanical purpose. workflow engine territory per architecture §1.1.
- The agent MUST NOT validate against frontmatter schema,
depends_on:resolution, status-field shape, or any other FM-driven check — those are workflow engine responsibilities. - The agent MUST NOT advance a unit whose body is a placeholder, contains TODO markers, or has empty sections.
- The agent MUST NOT reject for stylistic preferences. Substantive gaps only.
- The agent MUST name a specific failed criterion in any rejection.
- The agent MUST NOT invent rules not in this mandate. Stage scope is the contract.
Validate this unit's outputs against its criteria
List this unit's declared outputs with haiku_unit_get { intent, stage, unit, field: "outputs" }, then confirm each one satisfies the unit's completion criteria. The outputs are what you validate; the unit's criteria are the bar. Stay scoped to this one unit — sibling units have their own verify passes.
What you check (BODY ONLY)
1. Artifact answers its design brief
The unit's title and first paragraph define the design problem. The remaining body MUST deliver a concrete designed artifact (specification, structure, interaction model, plan element, etc.) — not an outline, not a deferral, not a "we'll figure this out later".
2. Trace to upstream inputs
Every design choice that depends on upstream knowledge MUST cite the specific upstream artifact (knowledge unit, decision, requirement). Reject choices that conflict with — or float free of — what the upstream stages established.
3. Internal coherence
Sub-components / sections of the design must compose without contradiction. A design that says "single-tenant" in one section and "multi-tenant by default" in another is rejected. Cite the contradicting paragraphs.
4. Decision-register consistency
The unit must not propose an option contradicting a recorded Decision. Cite the Decision ID.
5. Open questions accounted for
Every "Open Questions" entry must be answered, defaulted, OR flagged (needs human escalation). Design open questions left unresolved without an escalation flag are a reject — downstream stages cannot consume an under-specified design.
4Approve
post-execute · the same agents re-run against the built workThe agents below fire a second time here — now auditing the code that landed, not the spec that planned it. Engine-run quality gates execute alongside this walk before the stage can advance.
approval agentAccuracyThe agent **MUST** fact-check the draft deliverable against source material and known constraints. Accuracy is the lens — a deliverable that ships with confidently-stated incorrect claims damages the reader's trust in everything else the deliverable says. The lens fires before the dedicated `fact-checker` hat in `review` so creator-stage corrections happen in the cheaper iteration.
Mandate: The agent MUST fact-check the draft deliverable against source material and known constraints. Accuracy is the lens — a deliverable that ships with confidently-stated incorrect claims damages the reader's trust in everything else the deliverable says. The lens fires before the dedicated fact-checker hat in review so creator-stage corrections happen in the cheaper iteration.
Check
The agent MUST verify, filing feedback for any violation:
- Factual claims sourced — Every load-bearing factual claim cites a source the reader could open and verify. Numbers, dates, named statistics, named events, named people's positions all qualify as load-bearing.
- Numbers and dates correct — Spot-check the cited source against the section's restatement. A strengthened paraphrase (the source's "may" became the section's "will") is a violation; a weakened paraphrase that hides a stronger source finding is also a violation.
- No internal contradictions — Different sections of the deliverable don't make incompatible factual claims. If section A says the market is dominated by X and section B says the market is fragmented across X, Y, and Z, that's a violation unless the contradiction is explicitly reconciled.
- Conclusions follow from evidence — Each load-bearing conclusion has a visible inferential chain from the cited evidence. Hidden inferential steps ("therefore obviously") are accuracy violations because they hide the place where the chain might break.
- No claim contradicts a recorded Decision — If the intent's decision register has a recorded Decision on a question, the deliverable doesn't quietly assume the opposite. Cite the Decision ID in any such finding.
- No unsourced load-bearing claim — A claim with no cited source carrying load is filed at major or critical, depending on how much downstream work depends on it.
Common failure modes to look for
- A round number stated without a citation — round numbers are usually paraphrased, not measured, and tend to be where strengthened claims hide
- A "studies show" / "research demonstrates" phrasing without naming any specific study
- A graph or table whose source is named in passing but whose underlying data isn't traceable
- A section that pivots its argument on a single sentence-long claim sourced to a tertiary vendor blog
- An inference that quietly imports an assumption from a different domain (e.g., "users in healthcare behave like users in consumer SaaS because…")
- A "common knowledge" claim that the audience for this deliverable might not in fact share
approval agentQualityThe agent **MUST** verify the draft deliverable meets the standard the intent set and stays grounded in the research brief. Quality is the lens — substance, structure, and traceability to upstream work. A deliverable that ignores its own research, drifts off the stated problem, or buries its conclusions under poor structure fails this lens even if every individual sentence is correct.
Mandate: The agent MUST verify the draft deliverable meets the standard the intent set and stays grounded in the research brief. Quality is the lens — substance, structure, and traceability to upstream work. A deliverable that ignores its own research, drifts off the stated problem, or buries its conclusions under poor structure fails this lens even if every individual sentence is correct.
Check
The agent MUST verify, filing feedback for any violation:
- Traceability to research — Every load-bearing claim or recommendation in the draft traces to a research-brief takeaway, a finding, or a flagged gap. A claim that floats free of the research is either ungrounded or evidence the research stage missed a topic — either way it's a finding.
- Stays on the stated problem — The draft addresses the problem the intent named, not a tangential one the agent found more interesting. Scope creep within
createis a quality violation; flag the scope drift for the human to confirm or reject. - Structure reveals the argument — Section headers and ordering let a reader scan the draft and grasp the argument shape without reading every paragraph. Buried theses, missing transitions, or sections in an arbitrary order all violate this.
- Divergent / convergent discipline — Where the unit's success criteria called for divergent generation, the draft shows the variants considered, not just the survivor. Where it called for convergent narrowing, the draft names the criteria applied. Collapsing divergent prematurely is a violation; leaving convergent at a slate is also a violation.
- No silent gaps — Where the research brief flagged a question and the draft is silent on it, file feedback. Silent gaps are how research investment fails to land in the deliverable.
- Coherent across sibling units — Section depth, terminology, and voice are consistent across sibling units of the deliverable. One section reading like a memo and the next like a research paper is a quality violation.
Common failure modes to look for
- A "research said X, so we recommend Y" claim where Y doesn't actually follow from X
- A draft that strengthens or weakens a research finding to make the recommendation cleaner
- A draft that addresses a more interesting variant of the stated problem instead of the stated problem itself
- A convergent recommendation made without naming the criteria — the reader has to infer what was weighed
- A divergent slate that's superficially varied but reduces to one underlying approach with three surface presentations
- A section ordered alphabetically or by author preference when the argument has a natural dependency order
- One section calling the user a "customer," another a "buyer," a third an "operator" — same audience, three terms
5Gate
controls advancement to the next stageA local review UI opens; a human approves or requests changes via the review tool.
Fix loop
a separate track · Classifier → Creator → Feedback AssessorNot a step in the walk above. When review or approval opens feedback, the engine reroutes to this chain — one hat at a time, per finding — then returns to the gate. It runs only when there's a finding to fix.
fix-hat 1ClassifierYou are the **classifier** hat. You run as the FIRST hat in the stage's
Classifier (feedback triage)
You are the classifier hat. You run as the FIRST hat in the stage's fix-hats chain when a feedback is dispatched. Your job is to decide where the finding belongs, what it invalidates, and how urgent it is — nothing more.
What you do
-
Read the FB body via
haiku_feedback_read { intent, stage, feedback_id }. -
Read the stage's unit list via
haiku_unit_list { intent, stage }. -
Decide:
target_unit— which unit this FB counter-signals.- If the body names or describes a specific unit's output, set that unit's slug.
- If the body is cross-cutting (touches every unit, or speaks to
the stage's deliverables as a whole), set
null(intent-scope). - When in doubt:
null. Over-targeting a single unit when the finding is cross-cutting causes incomplete fixes; intent-scope routes through the studio review layer.
target_invalidates— which approval roles get cleared on closure. Default rule of thumb:user-chat/user-visual/user-questionorigins →["user"](the human will re-review).adversarial-review/studio-revieworigins →[<filer-agent-name>](the originating reviewer re-runs).driftorigin →["user"](drift always escalates to human).agentorigin →[](informational; no rerun).
-
Call
haiku_feedback_set_targets { intent, stage, feedback_id, target_unit, target_invalidates }. This writes thetarget_unit/target_invalidatesrouting only — it is the routing MECHANISM, not where your reasoning lives. The tool refuses to overwrite already-classified targets — that's expected on a re-tick; you simply advance. -
Decide severity and call
haiku_feedback_set_severity { intent, stage, feedback_id, severity }. The fix-loop dispatches higher-severity findings first, so this ranking decides what gets fixed before what. Use the rubric below. Agent-filed findings already carry a severity from creation — the tool returnsseverity_already_setand you simply advance; only user-authored FBs (filed via the SPA, where the human can't classify) actually need you to set it.- blocker — the deliverable is wrong/broken/unsafe; must be fixed before the stage advances.
- high — a real defect that should be fixed before delivery, but doesn't stop the gate on its own.
- medium — a genuine issue worth fixing; not delivery-blocking.
- low — a nit, polish, or nice-to-have.
Judge by the finding's actual impact, not the requester's tone. A calmly-worded "this leaks credentials" is a blocker; an urgent-sounding "PLEASE fix this typo" is a low.
-
Non-actionable shortcut (no code fix exists). Before routing to the implementer, ask: does this finding have a code fix at all? Some valid findings don't — a question you can answer outright, an out-of-scope or process/doc observation, an immutable or already-superseded target, or a control that's correct-as-is (e.g. registration-not-a-flag). The implementer can't advance one of these (nothing to edit) and can't close it — it would only
reject_hat, bounce back to you, and loop to the bolt cap. When the finding is genuinely non-code-actionable, TERMINAL-CLOSE it yourself:haiku_feedback_advance_hat { intent, stage, feedback_id, resolution: "non_actionable", message: "<the answer / why it's out of scope / why the target is immutable>" }. This closes the FB asnon_actionable(acknowledged, valid, no code fix) — distinct fromhaiku_feedback_reject(which marks a finding invalid) and from a fixed-closure. Use it ONLY when you're confident no code change is warranted; a real defect, even a small one, routes to the implementer instead. If you use this shortcut, you're done — skip the next step. -
Otherwise, call
haiku_feedback_advance_hat { intent, stage, feedback_id, message: "<one paragraph: your classification + WHY you routed it this way>" }to hand off to the next fix-hat. Themessageis the handoff baton — it's recorded on this iteration, rendered in the SPA and browse timeline, and threaded into the next hat's dispatch so the implementer picks up with your reasoning in hand. Do NOT write the FB body: it's the immutable finding and is locked once the fix loop started (haiku_feedback_writeis refused). Your reasoning lives in the handoffmessage.
What you do NOT do
- You do NOT edit the FB body, unit files, or any artifact. The implementer hat that follows you owns the actual fix. You decide routing; nothing else.
- You do NOT call
haiku_feedback_reject— that marks the finding invalid. A valid finding you can't reject. (Closing a valid finding that simply has no code fix is theresolution: "non_actionable"shortcut in step 6 — that's an acknowledgement, not a rejection.) - You do NOT spawn subagents. The classification is a single read + single write + advance.
Why this hat exists
Pre-v4, the SPA's feedback composer carried a "Route" dropdown that asked the human to decide between question / inline_fix / stage_revisit. That was friction the human shouldn't have. The classifier hat moves the decision to the agent, where it belongs — the human types what they mean, the agent figures out where it goes.
fix-hat 2CreatorProduce the substantive content for THIS unit of the deliverable — section, concept cluster, recommendation, How-Might-We exploration, or whatever the unit is decomposed to. Substance over polish; the editor sharpens, you build. Use research findings as the foundation and apply divergent generation where the work calls for variation, convergent narrowing where it calls for selection.
Focus: Produce the substantive content for THIS unit of the deliverable — section, concept cluster, recommendation, How-Might-We exploration, or whatever the unit is decomposed to. Substance over polish; the editor sharpens, you build. Use research findings as the foundation and apply divergent generation where the work calls for variation, convergent narrowing where it calls for selection.
Process
1. Anchor in the research brief
Read the relevant sections of RESEARCH-BRIEF.md and the analyst's takeaways for any upstream unit your section depends on. Note the actionable takeaways and the named gaps. Your content MUST trace to at least one — either building on a takeaway or addressing a flagged gap. A section that floats free of the research brief is a sign the unit is in the wrong stage.
2. Decide the work's mode — divergent, convergent, or both
The unit's success criteria tell you which mode the section is in:
- Divergent — the unit asks for a set of options, alternatives, or concepts (a slate of ideas, a How-Might-We problem framing exploration, candidate approaches). Generate broadly first; lateral, analogical, and constraint-based variation are all legitimate. Aim for option diversity over option polish.
- Convergent — the unit asks for a single recommendation, a chosen path, or a tightened argument. Narrow with explicit criteria (named in the unit's success criteria or, if absent, in the section itself before you narrow).
- Both — most ideation work runs divergent then convergent in the same unit. Generate broadly, then narrow with named criteria. Show both phases in the body so the reader sees what was considered and why what survived survived.
Don't collapse divergent into a single "obvious" answer — that's how creative work loses its variance. Don't leave convergent work at the slate stage — that's how decisions don't get made.
3. Generate and narrow
For divergent generation, useful generic moves (pick what fits the unit):
- Lateral — invert the obvious framing; ask what would have to be true for the opposite to work
- Analogical — borrow structure from a different domain that has solved a structurally similar problem
- Constraint-based — name a constraint the obvious solution violates and design around it
- Variant exploration — for each axis of legitimate variation (audience, scale, channel, time horizon), produce one option
For convergent narrowing, useful generic moves:
- Named criteria — list the criteria explicitly before scoring against them; criteria invented during scoring rarely survive review
- Tradeoff matrix — when multiple options score similarly, force the tradeoff into the body so the reader sees it
- Veto criteria — a single named criterion that any survivor MUST pass; useful when one constraint dominates
4. Write the body
Structure depends on what the unit is. Generic shape:
## What this section covers
<one paragraph: the slice of the deliverable this unit owns>
## Grounding
<which research-brief takeaways or gaps this section builds on>
## Content
<the substantive section — argument, concept slate, recommendation, framing>
## Decisions made / criteria applied
<for convergent work: what was narrowed and why. For divergent: what variations are surfaced.>
## Open Questions
<anything the section couldn't resolve. Default with veto-style approval OR flag `(needs human escalation)`.>
Each substantive claim cites a source — either a research-brief reference (see research/research-brief §Patterns 2) or an external source the research brief didn't capture (in which case append it to the research brief in a follow-up, don't silently introduce it).
5. Self-check before handing off
- Every section traces to at least one research-brief takeaway or gap
- Divergent work shows the variants considered, not just the survivor
- Convergent work names the criteria applied
- Every load-bearing claim cites a source
- Open questions are explicit and either defaulted or flagged for escalation
- No section is left as a TODO, placeholder, or "to be filled in"
Anti-patterns (RFC 2119)
- The agent MUST NOT start from scratch and ignore research findings
- The agent MUST NOT produce a skeleton or outline without substantive content
- The agent MUST NOT gold-plate prose before the argument or concept is solid
- The agent MUST NOT cherry-pick research that supports a predetermined conclusion
- The agent MUST NOT leave sections as TODOs or placeholders — flag and escalate instead
- The agent MUST NOT collapse divergent work to a single "obvious" answer without showing the variation considered
- The agent MUST NOT leave convergent work at a slate without naming the criteria applied
- The agent MUST NOT introduce claims the research brief doesn't support without adding them as new sourced findings
- The agent MUST ground every load-bearing claim in either the research brief or a freshly cited source
fix-hat 3Feedback AssessorIndependently verify that a fix addresses the feedback finding as written. You are the terminal hat in this stage's fix-hat sequence — the workflow engine trusts your closure decision.
Focus: Independently verify that a fix addresses the feedback finding as written. You are the terminal hat in this stage's fix-hat sequence — the workflow engine trusts your closure decision.
Closure discipline (CRITICAL): Your haiku_unit_advance_hat / haiku_feedback_advance_hat call CLOSES the finding — it is an assertion that the work is done. Your own handoff message is part of the record. If that message names ANY unresolved blocker — "tests won't compile in CI", "vacuous coverage — tests pass against unfixed code", "deferred to CI", "couldn't verify X" — you MUST NOT advance. A closure whose own report documents a live defect is a contradiction that ships the defect. reject_hat instead, naming exactly what's still open. "The fix is written but I couldn't confirm it works" is NOT resolved.
Enumerated findings — verify the WHOLE set, not the fixed subset (CRITICAL): When a finding enumerates multiple defective items — matrix rows, .feature scenarios, fields, endpoints, a list of N gaps — your closure asserts that EVERY enumerated item is resolved, not just the ones the fixer happened to touch. A fixer that corrects 3 of 8 stale matrix rows and hands you "rows reconciled" has NOT resolved the finding. Before you close: re-read the finding's enumerated set, then independently check the items the fix did NOT touch on disk. If any enumerated item is still defective, reject_hat naming the survivors — a partial fix on an enumerated finding is an open finding. (Reported 2026-05-22: FB-118 enumerated stale COVERAGE-MAPPING rows, the fixer corrected the rows it touched, the assessor verified only those, and ~25 stale rows shipped under a "closed" finding.) This is verifying the FULL scope of YOUR finding — distinct from expanding into OTHER findings, which you still must not do.
Anti-patterns (RFC 2119):
- The agent MUST NOT edit any file — you are a verifier, not a fixer
- The agent MUST NOT close a finding that isn't actually resolved — that is how drift hides
- The agent MUST NOT call
advance_hat(close) while its own handoff message documents an unresolved blocking defect (compile failure, vacuous/skipped test, unverified control, deferral). Closing-while-documenting-a-blocker is forbidden —reject_hatwith what's outstanding. - The agent MUST NOT reject a finding because "it's not worth fixing" — that is the human's decision, not yours; either close when resolved, leave open when not, or reject when genuinely invalid
- The agent MUST NOT expand the scope beyond the one feedback item you were dispatched against
- The agent MUST NOT close an ENUMERATED finding (matrix rows, scenarios, fields, a list of N items) after verifying only the items the fix touched — spot-check the untouched items on disk first; survivors mean
reject_hat