EVA / tree

The full EVA system on one screen. A single decision tree, keyed by user intent, walking you from "where do I start?" to "how can I be sure this is finished?" — every prompt in prompts/ is a leaf. Source: docs/eva-decision-tree.md.

root decision meta-orchestration (drives the arc) prompt (kick <id>)
flowchart TD
    %% ───── ROOT ─────
    R{{"What's your situation
right now?"}} R -->|"Let the harness
drive itself"| B0 R -->|"Never run EVA/Petrova
here before"| B1 R -->|"I'm here — what's
the state?"| B2 R -->|"I need to record or
justify a choice"| B3 R -->|"I'm scoping work
to do next"| B4 R -->|"I'm doing the work"| B5 R -->|"Something's off /
I'm stuck"| B6 R -->|"Am I done?"| B7 %% ───── 0. META-ORCHESTRATION (the EVA harness itself) ───── B0{{"What should the
harness do for you?"}} B0 -->|"Bring a fresh repo
into the fleet"| P_eonboard(["eva-onboard"]) B0 -->|"Pick the single next
highest-leverage move"| P_enext(["eva-next"]) B0 -->|"Plan→queue→execute
one goal, step by step"| P_eflow(["eva-flow"]) B0 -->|"Run one governed
autopilot tick"| P_etick(["eva-tick"]) B0 -->|"Cross the phase
boundary (verify→close→open)"| P_ecycle(["eva-cycle"]) B0 -->|"Respond to the
latest red signal"| P_erecover(["eva-recover"]) B0 -->|"A script's CLI drifted
from an external tool"| P_ecli(["eva-cli-drift-recover"]) B0 -->|"Governance gauntlet,
one PASS/WARN/FAIL table"| P_ehealth(["eva-health"]) B0 -->|"Ratify a new fleet
baseline"| P_ebaseline(["eva-baseline"]) B0 -->|"Ask a question,
evidence-bound"| P_eask(["eva-ask"]) B0 -->|"Re-project the
handbook + manifest"| P_eproject(["eva-project"]) %% Branch 0 composes the arc below it P_eonboard -.->|"drives"| B1 P_enext -.->|"emits dispatch,
doesn't invoke"| B2 P_eflow -.->|"drives"| B4 P_etick -.->|"drives one
petrova verb"| B5 P_ecycle -.->|"drives"| B7 P_erecover -.->|"drives"| B6 P_ehealth -.->|"reads"| B2 P_ebaseline -.->|"requires"| P_ehealth %% ───── 1. ONBOARDING ───── B1{{"First contact?"}} B1 -->|"Brand-new machine"| P_onboard(["petrova-onboard"]) B1 -->|"Repo present, env not wired"| P_boot(["petrova-bootstrap"]) B1 -->|"Installing into a sibling repo"| P_install(["petrova-install-playbook"]) B1 -->|"Handing off to a
fresh agent mid-task"| P_handoff(["session-handoff"]) P_onboard --> B2 P_boot --> B2 P_install --> B2 P_handoff --> B2 %% ───── 2. ORIENTING ───── B2{{"What do you need
to see?"}} B2 -->|"Whole fleet at a glance"| P_snap(["petrova-fleet-snapshot"]) B2 -->|"Is this repo healthy?"| P_health(["petrova-health-check"]) B2 -->|"Is my tooling healthy?"| P_doc(["petrova-doctor"]) B2 -->|"What governance exists?"| P_gov(["petrova-governance-inventory"]) B2 -->|"What changed since X?"| P_chg(["petrova-changes-since"]) B2 -->|"Are the docs current?"| P_fresh(["petrova-doc-freshness"]) B2 -->|"What manual ops should
become Routines?"| P_arch(["petrova-routine-archaeology"]) %% ───── 3. DECIDING ───── B3{{"What kind of decision?"}} B3 -->|"Capture a single decision"| P_dec(["petrova-decision-doc"]) B3 -->|"Weigh options / ADR"| P_adr(["petrova-adr-tradeoff"]) B3 -->|"Freeze a current-state baseline"| P_base(["petrova-declare-baseline"]) B3 -->|"Check alignment with the north star"| P_ns(["petrova-north-star-align"]) %% ───── 4. PLANNING ───── B4{{"What are you planning?"}} B4 -->|"One feature, one repo"| P_plan(["petrova-plan-feature"]) B4 -->|"Bundle of tasks"| P_bundle(["task-bundle-planner"]) B4 -->|"An implementation prompt for
a downstream agent"| P_mpg(["meta-prompt-generator"]) B4 -->|"Add a milestone to the roadmap"| P_ms(["petrova-milestone-add"]) B4 -->|"Cross-repo execution graph"| P_dag(["repo-dag-generator"]) B4 -->|"Open a governance phase"| P_popen(["petrova-phase-open"]) P_dag --> B5 P_plan --> B5 P_bundle --> B5 P_mpg --> B5 %% ───── 5. EXECUTING ───── B5{{"What are you executing?"}} B5 -->|"Multi-step task, one repo"| P_orch(["orchestrate-multistep"]) B5 -->|"Cross-repo DAG"| P_dagx(["repo-dag-executor"]) B5 -->|"Refactor with hard limits"| P_ref(["refactor-with-constraints"]) B5 -->|"Let the autopilot drive"| P_auto(["petrova-autopilot"]) B5 -->|"Propose a fix for a known issue"| P_fix(["petrova-propose-fix"]) B5 -->|"Wire a sibling system"| B5W{{"Which system?"}} B5 -->|"Author content / harness"| B5A{{"What kind of content?"}} B5 -->|"Publish content downstream"| B5C{{"What stage of the
content pipeline?"}} B5 -->|"Fleet infrastructure op"| B5F{{"What kind of
fleet op?"}} %% 5a — Wiring sub-branch B5W -->|"ares"| P_wa(["petrova-wire-ares"]) B5W -->|"crumb"| P_wc(["petrova-wire-crumb"]) B5W -->|"eva"| P_we(["petrova-wire-eva"]) B5W -->|"rocky"| P_wr(["petrova-wire-rocky"]) B5W -->|"traceo"| P_wt(["petrova-wire-traceo"]) B5W -->|"generic integration"| P_wi(["petrova-wire-integration"]) B5W -->|"an HTTP API as MCP tools"| P_mcpw(["mcp-provider-wire"]) %% 5b — Authoring sub-branch B5A -->|"Impeccable handbook (full)"| P_ihg(["impeccable-handbook-generator"]) B5A -->|"Run an impeccable harness"| P_ihe(["impeccable-harness-executor"]) B5A -->|"One handbook section"| P_hsg(["handbook-section-generator"]) B5A -->|"Brand asset"| P_brand(["brand-asset-generator"]) B5A -->|"Email-flow verification harness"| P_email(["verify-email-flow-harness"]) B5A -->|"Crumb extraction (raw)"| P_crumbx(["crumb-extraction-harness"]) B5A -->|"Crumb → flashcards"| P_crumbf(["crumb-flashcard-extractor"]) B5A -->|"RAG: rewrite query"| P_rqr(["rag-query-rewriter"]) B5A -->|"RAG: rerank chunks"| P_rcr(["rag-chunk-reranker"]) B5A -->|"RAG: synthesize context"| P_rcs(["rag-context-synthesizer"]) B5A -->|"RAG: validate evidence"| P_rev(["rag-evidence-validator"]) B5A -->|"Call fleet MCP tools
via PEBBLE gateway"| P_pebble(["pebble-tools"]) %% 5c — Content/Downlink publishing sub-branch B5C -->|"Declare the org's
content arc/manifest"| P_carc(["content-arc-declare"]) B5C -->|"Gate A: intake a closed
decision into abacus"| P_cintake(["content-decision-intake"]) B5C -->|"Draft a downlink
blog entry"| P_dentry(["downlink-entry-author"]) B5C -->|"Project abacus → landing,
or check drift"| P_dpub(["downlink-publish"]) B5C -->|"Generalize publish to
any org's own surface"| P_cpub(["content-publish-sink"]) B5C -->|"Repurpose a shipped entry
into a social artefact"| P_drepurp(["downlink-social-repurposer"]) B5C -->|"Gate D: dispatch the
social artefact — the only
prompt that actually posts"| P_csocial(["content-social-dispatch"]) P_carc --> P_cintake --> P_dentry --> P_dpub P_dpub --> P_drepurp --> P_csocial P_cpub -.->|"generalizes"| P_dpub %% 5d — Fleet-ops sub-branch B5F -->|"Roll out install.sh
across tenant roots"| P_frollout(["fleet-host-rollout"]) B5F -->|"Triage an ingest ticket
on a shared fleet host"| P_ftriage(["fleet-ingest-triage"]) %% ───── 6. STUCK / DIAGNOSE ───── B6{{"What kind of stuck?"}} B6 -->|"A run failed"| P_ft(["petrova-failure-triage"]) B6 -->|"Work is sitting idle"| P_stall(["petrova-stalled-work"]) B6 -->|"Feels harder than it should"| P_fric(["petrova-friction-classify"]) B6 -->|"Capture a one-off observation"| P_find(["petrova-finding"]) B6 -->|"Suspect drift between repos"| P_drift(["petrova-drift-check"]) B6 -->|"Suspect a boundary violation"| P_bnd(["petrova-boundary-audit"]) B6 -->|"Old decision still binding?"| P_sup(["petrova-supersession-check"]) B6 -->|"Upstream dep changed?"| P_up(["petrova-upstream-watch"]) B6 -->|"Wire a contract-drift detector"| P_wcd(["petrova-wire-contract-drift"]) B6 -->|"Soak an invariant under load"| P_inv(["petrova-invariant-soak"]) B6 -->|"Suspect a dev-mode
auth fail-open"| P_authaudit(["auth-fail-open-audit"]) %% loops back: triage → fix → execute P_ft -.->|"propose a fix"| P_fix %% ───── 7. VERIFYING / CLOSING ───── B7{{"What are you verifying?"}} B7 -->|"A single task's AC"| P_tac(["task-acceptance-check"]) B7 -->|"A full verification round"| P_vr(["petrova-verify-round"]) B7 -->|"A merge request is green"| P_mr(["petrova-mr-check"]) B7 -->|"Need human review"| P_rr(["petrova-request-review"]) B7 -->|"Auto-merge when CI passes"| P_rmw(["petrova-request-merge-when-green"]) B7 -->|"Write up after-the-fact"| P_pm(["petrova-post-mortem"]) B7 -->|"Close the governance phase"| P_pclose(["petrova-phase-close"]) B7 -->|"Is this green signal
even real?"| P_vfr(["verify-for-real"]) %% lessons from a post-mortem usually become a new decision P_pm -.->|"often spawns"| P_dec %% lifecycle loop: closing a phase opens the next orientation cycle P_pclose -.->|"new cycle"| B2 P_popen -.->|"phase active"| B5 %% ───── style ───── classDef root fill:#1f2937,color:#fff,stroke:#111,stroke-width:2px; classDef branch fill:#fef3c7,stroke:#92400e,color:#111; classDef prompt fill:#ecfdf5,stroke:#065f46,color:#064e3b; classDef meta fill:#ede9fe,stroke:#5b21b6,color:#3b0764; class R,B1,B2,B3,B4,B5,B5W,B5A,B5C,B5F,B6,B7 branch; class B0 branch; class R root; class P_eonboard,P_enext,P_eflow,P_etick,P_ecycle,P_erecover,P_ecli,P_ehealth,P_ebaseline,P_eask,P_eproject meta; class P_onboard,P_boot,P_install,P_handoff,P_snap,P_health,P_doc,P_gov,P_chg,P_fresh,P_arch,P_dec,P_adr,P_base,P_ns,P_plan,P_bundle,P_mpg,P_ms,P_dag,P_popen,P_orch,P_dagx,P_ref,P_auto,P_fix,P_wa,P_wc,P_we,P_wr,P_wt,P_wcd,P_wi,P_mcpw,P_ihg,P_ihe,P_hsg,P_brand,P_email,P_crumbx,P_crumbf,P_rqr,P_rcr,P_rcs,P_rev,P_pebble,P_carc,P_cintake,P_dentry,P_dpub,P_cpub,P_drepurp,P_csocial,P_frollout,P_ftriage,P_ft,P_stall,P_fric,P_find,P_drift,P_bnd,P_sup,P_up,P_inv,P_authaudit,P_pm,P_tac,P_vr,P_mr,P_rr,P_rmw,P_pclose,P_vfr prompt;
84 of 85 prompts placed as leaves · qa-adversary excluded (stub, no meta.yml/prompt.xml) · source of truth: docs/eva-decision-tree.md ↗