Charter
External gateDefine project scope, stakeholders, and success criteria
Charter
The opening stage of a project: define the business case, scope, stakeholders, and measurable success criteria. The charter is the contract every later stage reads — plan decomposes against it, track measures against it, close accepts against it. A weak charter cascades downstream into scope drift, unclear authority, and "success" no one can prove.
Scope
The business case, scope boundaries, stakeholder map, governance, and success criteria. Charter decides why the project exists, what's in and out, who decides, and what done means — not how the work breaks down (plan), how progress is measured (track), or how it's accepted (close). Units are charter elements.
What to do
- Frame the business case and define success criteria measurable enough that close can accept against them.
- Draw explicit in-scope and out-of-scope boundaries, with the constraints and assumptions stated.
- Establish governance and decision rights so authority is clear before the work starts.
- Map the stakeholders — who's accountable, consulted, and informed.
What NOT to do
- Don't decompose the work or build the schedule — that's the plan stage reading this charter.
- Don't track progress or accept deliverables; those are the track and close stages.
- Don't leave scope boundaries fuzzy or success criteria unmeasurable — the ambiguity compounds downstream.
- Don't self-advance the gate — the charter is committed through the sponsor's actual sign-off.
How the engine runs this stage
1Elaborate
collaborative · plan the work, fan out discovery, declare outputsDiscovery fan-out
knowledge artifactProject CharterProject authorization document with scope, stakeholders, success criteria, and governance.
Project Charter
Project authorization document with scope, stakeholders, success criteria, and governance.
Content Guide
Structure the charter as the project's foundational reference:
- Business case -- why this project exists and what outcomes are expected
- Scope -- explicit in-scope and out-of-scope items with rationale for boundaries
- Success criteria -- quantified measures with thresholds and measurement methods
- Stakeholder map -- all stakeholders with interests, influence, and engagement approach
- Governance -- decision rights, escalation paths, and reporting cadence
- Constraints and assumptions -- known limitations and documented assumptions
Quality Signals
- Scope boundaries are explicit with rationale for what is excluded
- Success criteria are measurable with defined data sources
- Stakeholders are mapped with actual influence, not just titles
- Constraints and assumptions are documented for later validation
Phase guidance
phase overrideELABORATION- "Project charter defines scope boundaries with explicit in-scope and out-of-scope items and rationale for each exclusion"
Charter Stage — Elaboration
Criteria Guidance
Good criteria — concrete and verifiable
- "Project charter defines scope boundaries with explicit in-scope and out-of-scope items and rationale for each exclusion"
- "Success criteria are quantified with measurement methods, data sources, and target thresholds"
- "Stakeholder map identifies each stakeholder's interest, influence level, and required engagement approach"
Bad criteria — vague (no clear check)
- "Charter is written"
- "Scope is defined"
- "Stakeholders are identified"
Outputs produced
output templateProject CharterScope boundaries, success criteria, stakeholder map, and governance structure.
Project Charter
Scope boundaries, success criteria, stakeholder map, and governance structure.
Expected Artifacts
- Scope definition -- explicit in-scope and out-of-scope items with exclusion rationale
- Success criteria -- quantified with measurement methods, data sources, and target thresholds
- Stakeholder map -- each stakeholder's interest, influence level, and engagement approach
- Governance structure -- decision-making authority and escalation paths
Quality Signals
- Scope boundaries have explicit inclusion/exclusion rationale
- Success criteria are quantified with measurement methods
- Stakeholder map identifies interest, influence, and required engagement
- Charter reflects the business intent and resource commitment is authorized
2Review
pre-execute · agents audit the planned spec before any code landsreview agentFeasibilityThe agent **MUST** verify the charter is operationally feasible — scope is bounded explicitly, success criteria are measurable, the governance structure can actually make decisions, and the resource envelope is real. A charter that's aspirational rather than operational sets up `plan` to fail in week one.
Mandate: The agent MUST verify the charter is operationally feasible — scope is bounded explicitly, success criteria are measurable, the governance structure can actually make decisions, and the resource envelope is real. A charter that's aspirational rather than operational sets up plan to fail in week one.
Check
The agent MUST verify, file feedback for any violation:
- Scope boundary integrity — scope has both in-scope items (specific enough to decompose into work packages) and out-of-scope items (with rationale for each exclusion). A scope expressed only as inclusions is incomplete.
- Measurable success criteria — every success criterion has metric + target + measurement method + named owner. Qualitative-only criteria (
"users will be happy","the system will be reliable") without operational definition are rejected. - Single accountable sponsor — the governance section names exactly one role with sponsor authority. Committees, "the leadership team," or unnamed groups are rejected.
- Decision-rights coverage — decision rights are enumerated by category (scope, schedule, budget, technical approach, hiring, vendor) — not implicit. A category without a named decision-maker is rejected.
- Resource envelope explicit — the charter names a budget envelope, headcount envelope, or duration envelope (whichever the org uses) — not just "appropriate resources."
- Assumptions with falsification triggers — every assumption has a named owner and a trigger condition that would mark it false. Assumptions stated as facts are rejected.
- Stakeholder map completeness — each stakeholder has interest, influence, position, and engagement defined. Names without engagement plans are rejected.
Common failure modes to look for
- Success criteria stated in solution language (
"migrate to the new platform") instead of outcome language ("reduce checkout latency to < 200ms p95") - Out-of-scope section missing or trivial — the most-likely sources of scope debate aren't named
- "TBD" or "to be determined" in a governance, sponsor, or decision-rights field — close the gap before approving
- Stakeholders listed by title but not by named role-holder, leaving authority ambiguous
- Constraints stated without a source (
"$500K budget"with no name on who set the envelope) - Assumptions phrased as facts (
"users will adopt the feature") rather than as testable propositions with owners - A single accountable sponsor combined with a committee that the sponsor has to "consult" on every decision — that's a committee, not a sponsor
3Execute
per-unit baton · Sponsor → Scoper → Verifierhat 1ScoperConvert the sponsor's business case and success criteria into the operational boundary of the project — explicit scope (in / out), constraints, assumptions, and a stakeholder map with influence-and-engagement strategy. You are the do role for the charter stage — your work turns the strategic frame into something a planner can decompose without further ambiguity.
Focus: Convert the sponsor's business case and success criteria into the operational boundary of the project — explicit scope (in / out), constraints, assumptions, and a stakeholder map with influence-and-engagement strategy. You are the do role for the charter stage — your work turns the strategic frame into something a planner can decompose without further ambiguity.
You produce the scope, constraints, assumptions, and stakeholder sections of PROJECT-CHARTER.md (the sponsor hat owns business case, success criteria, and governance).
Process
1. Define scope as boundary, not list
Scope is what's IN minus what's OUT. Both halves are load-bearing.
In-scope items MUST be specific enough that a planner can decompose them:
"User authentication for the web app, including signup, login, password reset, and session management"— yes"Authentication"— no (which surfaces? which users? which methods?)
Out-of-scope items MUST be the obvious adjacent surfaces a stakeholder might assume are included:
"SSO via SAML — out of scope this phase""Native mobile authentication — separate project"
For every out-of-scope item, name why it's excluded (timing, dependency, budget, separate project) so future scope conversations have context.
2. Capture constraints
Constraints are hard limits the project must operate within. For each, name the source so it's debatable when conditions change:
| Category | Examples |
|---|---|
| Budget | Fixed-fee envelope, headcount cap, vendor-spend ceiling |
| Schedule | External deadline (regulatory, contractual, market window), dependent-project handoff date |
| Technology | Required platform, banned dependency, mandatory standard |
| Regulatory / compliance | GDPR, SOC2 control, accessibility standard, industry-specific (HIPAA, PCI, FERPA) |
| Organizational | Required vendor, internal-team-only delivery, no contractors on sensitive surfaces |
A constraint without a source is folklore. Document who set it and when.
3. Document assumptions
Assumptions are the things you're acting as if are true. They're load-bearing — if any assumption proves false, the plan needs to change. Each assumption MUST be:
- Specific — not "users will adopt the feature" but "≥ 30% of weekly-active users will enable the feature within 60 days of launch"
- Owned — a named role responsible for monitoring whether it holds
- Falsifiable — there's a way to find out it's wrong before the project ends
Track assumptions in a list with an ID, the assumption text, owner, and the trigger condition that would mark it false.
4. Map stakeholders
For every stakeholder (individual or role), capture:
| Field | What goes here |
|---|---|
| Stakeholder | Named role or person |
| Interest | Why this project matters to them (positive or negative) |
| Influence | High / medium / low — their ability to shape the project's path |
| Position | Champion / supporter / neutral / skeptic / blocker |
| Engagement | The cadence and channel for keeping them informed or involved |
The influence-and-position combination drives engagement strategy: high-influence skeptics need direct attention; low-influence champions are amplifiers; the rest get the cadence appropriate to their role.
5. Cross-check before handoff
- Every in-scope item is specific enough to decompose into work packages
- Every out-of-scope item names why it's excluded and (if known) where it goes instead
- Every constraint cites its source
- Every assumption has an owner and a falsification trigger
- Every stakeholder has interest, influence, position, and engagement noted
- No stakeholder appears in scope or governance whose engagement isn't defined
Anti-patterns (RFC 2119)
- The agent MUST NOT define scope only by what's included — explicit out-of-scope items are the contract
- The agent MUST NOT state scope at a level too vague for a planner to decompose
- The agent MUST NOT capture constraints without naming their source
- The agent MUST NOT document assumptions without an owner and a falsification trigger
- The agent MUST NOT map stakeholders only by name — interest, influence, position, and engagement are all required
- The agent MUST NOT invent stakeholder positions without confirming them with the sponsor
- The agent MUST NOT treat the stakeholder map as static — capture how it'll be re-confirmed at status-report cadence
- The agent MUST flag any constraint that conflicts with a stated success criterion as
(needs sponsor resolution)rather than papering over it - The agent MUST match the naming and structure conventions of any project overlay if present — consistency over preference
hat 2SponsorFrame the business case, define measurable success criteria, and establish the governance structure that gives the project decision-making authority. You are the plan role for the charter stage — your output is the contract every downstream stage reads. A weak business case or fuzzy success criteria here cascades: scope creep in `plan`, debate-not-decisions in `track`, no clear definition of done at `close`.
Focus: Frame the business case, define measurable success criteria, and establish the governance structure that gives the project decision-making authority. You are the plan role for the charter stage — your output is the contract every downstream stage reads. A weak business case or fuzzy success criteria here cascades: scope creep in plan, debate-not-decisions in track, no clear definition of done at close.
You produce the business-case, success-criteria, and governance sections of PROJECT-CHARTER.md (the scoper hat handles scope boundaries, assumptions, constraints, and the stakeholder map in the same artifact).
Process
1. Anchor the business case
Before drafting the charter, confirm with the user:
- Problem statement — what hurts today, in concrete terms, not aspirational language
- Why now — what changed that makes this the right time (new requirement, market shift, deadline, dependency unblocking)
- Expected outcome — what's different after the project succeeds, stated as observable change
- Authority and funding — who's chartering this and against what budget envelope
Capture each in plain language. If the user can only describe the desired outcome in technical-solution terms ("we'll migrate to X"), push back to the underlying problem ("what does that migration enable?"). Solutions belong in plan, not the charter.
2. Define success criteria
Every success criterion MUST have three parts:
- Metric — what's measured (cycle time, conversion rate, defect rate, customer-satisfaction score)
- Target — the threshold that distinguishes success from failure (
< 200ms p95,≥ 4.5 / 5,0 sev-1 incidents) - Measurement method — how and when the metric is read (data source, query, instrument, observation window)
A criterion with a metric but no target is theater. A criterion with a target but no measurement method is unverifiable.
Use this shape:
SC-1: <plain-language outcome>
Metric: <named measurement>
Target: <specific threshold or range>
Method: <data source / query / instrument / cadence>
Owner: <named role accountable for the measurement>
3. Establish governance
Document:
- Sponsor — single accountable role with authority to approve scope changes
- Decision rights — who decides what, by category (scope, schedule, budget, technical approach, hiring, vendor selection)
- Escalation path — when a decision can't be made at one level, who's next, with response-time expectations
- Change-control threshold — what magnitude of change requires sponsor sign-off vs. PM decision vs. team-level
Governance MUST name roles, not just titles. "VP of Engineering" is a role; "Alice" is a name; "the eng team" is neither.
4. Cross-check before handoff
- Every success criterion has metric + target + measurement method + owner
- Business case names what changes, not what gets built
- Governance section names a single accountable sponsor (not a committee)
- Escalation path resolves to a single decision-maker at every level
- Change-control threshold is numeric or otherwise unambiguous
Anti-patterns (RFC 2119)
- The agent MUST NOT charter a project without a documented business case naming what changes and why now
- The agent MUST NOT define success in qualitative-only terms — every criterion needs metric, target, and measurement method
- The agent MUST NOT describe success in solution language (
"migrate to the new platform") instead of outcome language ("reduce checkout latency to < 200ms p95") - The agent MUST NOT name a committee as the sponsor — single accountable role only
- The agent MUST NOT leave decision rights implicit — they MUST be enumerated by category
- The agent MUST NOT approve scope without confirming the resource envelope explicitly
- The agent MUST NOT invent metrics or targets without confirming them with the sponsor
- The agent MUST flag any criterion the user can't yet specify a measurement method for as
(needs measurement plan)rather than papering over the gap - The agent MUST distinguish "must-have" success criteria (failure to hit = project failed) from "stretch" criteria (failure to hit = partial success)
hat 3VerifierValidate the per-unit knowledge artifact for the charter stage of project-management. Units here are charter artifact — knowledge artifacts that downstream stages consume. Validation rules check substance, citation, internal consistency, and decision-register accountability. NOT executable verify-commands or DAG validity (workflow engine/build-stage concerns).
Focus: Validate the per-unit knowledge artifact for the charter stage of project-management. Units here are charter artifact — knowledge artifacts that downstream stages consume. Validation rules check substance, citation, internal consistency, and decision-register accountability. NOT executable verify-commands or DAG validity (workflow engine/build-stage concerns).
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 topic
The unit's title and first paragraph define the topic. The remaining body MUST deliver substantive content on that topic. Reject placeholders, content-free outlines, or redirects.
2. Sources cited
Non-trivial claims (numbers, market signals, system behavior, stakeholder positions) MUST cite specific sources — URL, doc path, dated stakeholder conversation, named standard. Reject "industry common knowledge" or unsourced numerical claims.
3. Internal consistency
Title, mission, and body must align. Numerical/categorical claims must be consistent across the body. Recommendations must follow from the evidence presented.
4. Decision-register consistency
The unit must not propose, default to, or assume an option that contradicts a recorded Decision. Cite the Decision ID in any rejection.
5. Open questions accounted for
Every "Open Questions" entry must be answered, defaulted with veto-style approval, OR flagged (needs human escalation).
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 agentFeasibilityThe agent **MUST** verify the charter is operationally feasible — scope is bounded explicitly, success criteria are measurable, the governance structure can actually make decisions, and the resource envelope is real. A charter that's aspirational rather than operational sets up `plan` to fail in week one.
Mandate: The agent MUST verify the charter is operationally feasible — scope is bounded explicitly, success criteria are measurable, the governance structure can actually make decisions, and the resource envelope is real. A charter that's aspirational rather than operational sets up plan to fail in week one.
Check
The agent MUST verify, file feedback for any violation:
- Scope boundary integrity — scope has both in-scope items (specific enough to decompose into work packages) and out-of-scope items (with rationale for each exclusion). A scope expressed only as inclusions is incomplete.
- Measurable success criteria — every success criterion has metric + target + measurement method + named owner. Qualitative-only criteria (
"users will be happy","the system will be reliable") without operational definition are rejected. - Single accountable sponsor — the governance section names exactly one role with sponsor authority. Committees, "the leadership team," or unnamed groups are rejected.
- Decision-rights coverage — decision rights are enumerated by category (scope, schedule, budget, technical approach, hiring, vendor) — not implicit. A category without a named decision-maker is rejected.
- Resource envelope explicit — the charter names a budget envelope, headcount envelope, or duration envelope (whichever the org uses) — not just "appropriate resources."
- Assumptions with falsification triggers — every assumption has a named owner and a trigger condition that would mark it false. Assumptions stated as facts are rejected.
- Stakeholder map completeness — each stakeholder has interest, influence, position, and engagement defined. Names without engagement plans are rejected.
Common failure modes to look for
- Success criteria stated in solution language (
"migrate to the new platform") instead of outcome language ("reduce checkout latency to < 200ms p95") - Out-of-scope section missing or trivial — the most-likely sources of scope debate aren't named
- "TBD" or "to be determined" in a governance, sponsor, or decision-rights field — close the gap before approving
- Stakeholders listed by title but not by named role-holder, leaving authority ambiguous
- Constraints stated without a source (
"$500K budget"with no name on who set the envelope) - Assumptions phrased as facts (
"users will adopt the feature") rather than as testable propositions with owners - A single accountable sponsor combined with a committee that the sponsor has to "consult" on every decision — that's a committee, not a sponsor
5Gate
controls advancement to the next stageBlocks until an external system (GitHub/GitLab) signals approval, usually via branch merge.
Fix loop
a separate track · Classifier → Sponsor → Scoper → 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 2SponsorFrame the business case, define measurable success criteria, and establish the governance structure that gives the project decision-making authority. You are the plan role for the charter stage — your output is the contract every downstream stage reads. A weak business case or fuzzy success criteria here cascades: scope creep in `plan`, debate-not-decisions in `track`, no clear definition of done at `close`.
Focus: Frame the business case, define measurable success criteria, and establish the governance structure that gives the project decision-making authority. You are the plan role for the charter stage — your output is the contract every downstream stage reads. A weak business case or fuzzy success criteria here cascades: scope creep in plan, debate-not-decisions in track, no clear definition of done at close.
You produce the business-case, success-criteria, and governance sections of PROJECT-CHARTER.md (the scoper hat handles scope boundaries, assumptions, constraints, and the stakeholder map in the same artifact).
Process
1. Anchor the business case
Before drafting the charter, confirm with the user:
- Problem statement — what hurts today, in concrete terms, not aspirational language
- Why now — what changed that makes this the right time (new requirement, market shift, deadline, dependency unblocking)
- Expected outcome — what's different after the project succeeds, stated as observable change
- Authority and funding — who's chartering this and against what budget envelope
Capture each in plain language. If the user can only describe the desired outcome in technical-solution terms ("we'll migrate to X"), push back to the underlying problem ("what does that migration enable?"). Solutions belong in plan, not the charter.
2. Define success criteria
Every success criterion MUST have three parts:
- Metric — what's measured (cycle time, conversion rate, defect rate, customer-satisfaction score)
- Target — the threshold that distinguishes success from failure (
< 200ms p95,≥ 4.5 / 5,0 sev-1 incidents) - Measurement method — how and when the metric is read (data source, query, instrument, observation window)
A criterion with a metric but no target is theater. A criterion with a target but no measurement method is unverifiable.
Use this shape:
SC-1: <plain-language outcome>
Metric: <named measurement>
Target: <specific threshold or range>
Method: <data source / query / instrument / cadence>
Owner: <named role accountable for the measurement>
3. Establish governance
Document:
- Sponsor — single accountable role with authority to approve scope changes
- Decision rights — who decides what, by category (scope, schedule, budget, technical approach, hiring, vendor selection)
- Escalation path — when a decision can't be made at one level, who's next, with response-time expectations
- Change-control threshold — what magnitude of change requires sponsor sign-off vs. PM decision vs. team-level
Governance MUST name roles, not just titles. "VP of Engineering" is a role; "Alice" is a name; "the eng team" is neither.
4. Cross-check before handoff
- Every success criterion has metric + target + measurement method + owner
- Business case names what changes, not what gets built
- Governance section names a single accountable sponsor (not a committee)
- Escalation path resolves to a single decision-maker at every level
- Change-control threshold is numeric or otherwise unambiguous
Anti-patterns (RFC 2119)
- The agent MUST NOT charter a project without a documented business case naming what changes and why now
- The agent MUST NOT define success in qualitative-only terms — every criterion needs metric, target, and measurement method
- The agent MUST NOT describe success in solution language (
"migrate to the new platform") instead of outcome language ("reduce checkout latency to < 200ms p95") - The agent MUST NOT name a committee as the sponsor — single accountable role only
- The agent MUST NOT leave decision rights implicit — they MUST be enumerated by category
- The agent MUST NOT approve scope without confirming the resource envelope explicitly
- The agent MUST NOT invent metrics or targets without confirming them with the sponsor
- The agent MUST flag any criterion the user can't yet specify a measurement method for as
(needs measurement plan)rather than papering over the gap - The agent MUST distinguish "must-have" success criteria (failure to hit = project failed) from "stretch" criteria (failure to hit = partial success)
fix-hat 3ScoperConvert the sponsor's business case and success criteria into the operational boundary of the project — explicit scope (in / out), constraints, assumptions, and a stakeholder map with influence-and-engagement strategy. You are the do role for the charter stage — your work turns the strategic frame into something a planner can decompose without further ambiguity.
Focus: Convert the sponsor's business case and success criteria into the operational boundary of the project — explicit scope (in / out), constraints, assumptions, and a stakeholder map with influence-and-engagement strategy. You are the do role for the charter stage — your work turns the strategic frame into something a planner can decompose without further ambiguity.
You produce the scope, constraints, assumptions, and stakeholder sections of PROJECT-CHARTER.md (the sponsor hat owns business case, success criteria, and governance).
Process
1. Define scope as boundary, not list
Scope is what's IN minus what's OUT. Both halves are load-bearing.
In-scope items MUST be specific enough that a planner can decompose them:
"User authentication for the web app, including signup, login, password reset, and session management"— yes"Authentication"— no (which surfaces? which users? which methods?)
Out-of-scope items MUST be the obvious adjacent surfaces a stakeholder might assume are included:
"SSO via SAML — out of scope this phase""Native mobile authentication — separate project"
For every out-of-scope item, name why it's excluded (timing, dependency, budget, separate project) so future scope conversations have context.
2. Capture constraints
Constraints are hard limits the project must operate within. For each, name the source so it's debatable when conditions change:
| Category | Examples |
|---|---|
| Budget | Fixed-fee envelope, headcount cap, vendor-spend ceiling |
| Schedule | External deadline (regulatory, contractual, market window), dependent-project handoff date |
| Technology | Required platform, banned dependency, mandatory standard |
| Regulatory / compliance | GDPR, SOC2 control, accessibility standard, industry-specific (HIPAA, PCI, FERPA) |
| Organizational | Required vendor, internal-team-only delivery, no contractors on sensitive surfaces |
A constraint without a source is folklore. Document who set it and when.
3. Document assumptions
Assumptions are the things you're acting as if are true. They're load-bearing — if any assumption proves false, the plan needs to change. Each assumption MUST be:
- Specific — not "users will adopt the feature" but "≥ 30% of weekly-active users will enable the feature within 60 days of launch"
- Owned — a named role responsible for monitoring whether it holds
- Falsifiable — there's a way to find out it's wrong before the project ends
Track assumptions in a list with an ID, the assumption text, owner, and the trigger condition that would mark it false.
4. Map stakeholders
For every stakeholder (individual or role), capture:
| Field | What goes here |
|---|---|
| Stakeholder | Named role or person |
| Interest | Why this project matters to them (positive or negative) |
| Influence | High / medium / low — their ability to shape the project's path |
| Position | Champion / supporter / neutral / skeptic / blocker |
| Engagement | The cadence and channel for keeping them informed or involved |
The influence-and-position combination drives engagement strategy: high-influence skeptics need direct attention; low-influence champions are amplifiers; the rest get the cadence appropriate to their role.
5. Cross-check before handoff
- Every in-scope item is specific enough to decompose into work packages
- Every out-of-scope item names why it's excluded and (if known) where it goes instead
- Every constraint cites its source
- Every assumption has an owner and a falsification trigger
- Every stakeholder has interest, influence, position, and engagement noted
- No stakeholder appears in scope or governance whose engagement isn't defined
Anti-patterns (RFC 2119)
- The agent MUST NOT define scope only by what's included — explicit out-of-scope items are the contract
- The agent MUST NOT state scope at a level too vague for a planner to decompose
- The agent MUST NOT capture constraints without naming their source
- The agent MUST NOT document assumptions without an owner and a falsification trigger
- The agent MUST NOT map stakeholders only by name — interest, influence, position, and engagement are all required
- The agent MUST NOT invent stakeholder positions without confirming them with the sponsor
- The agent MUST NOT treat the stakeholder map as static — capture how it'll be re-confirmed at status-report cadence
- The agent MUST flag any constraint that conflicts with a stated success criterion as
(needs sponsor resolution)rather than papering over it - The agent MUST match the naming and structure conventions of any project overlay if present — consistency over preference
fix-hat 4Feedback 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