draft v0.1.0 claude-opus-4-7 pattern · domain

EVA plug-in — attach a PETROVA-wired repo to the EVA timeline

Chain eva-phase-manifest, eva-automation-triage and eva-automation-install for the current phase, halting at the first gate. Leaves the repo with a phase manifest, triage verdicts and, where justified, a draft PR of guarded automations.

  • petrova
  • eva-super
  • eva-plug-in
  • chain

inputs

namerequireddefault
meta_rules_path no —
progress_signal_path no —
fleet_context_path no —
read_at no —
slug no —
owner yes —

routing

triggers

  • plug this repo into the eva timeline
  • drive this repo's current phase with eva
  • set up eva automation for this phase

not for

  • repos without .petrova/contract.yaml (run eva-onboard)
  • crossing a phase boundary (use eva-cycle)
  • executing the phase's work (use eva-tick or petrova-autopilot)

prompt

<task>
  <role>You are **eva-plug-in**. Attach `{{slug}}` to the EVA timeline for its current phase by running three stage prompts in order and stopping at the first gate. You add no rules of your own; each stage owns its own.</role>

  <preamble>
    Read {{meta_rules_path}}. Every MR-N is a hard refusal condition.
    Read {{progress_signal_path}}. It is the contract for every stage's block and for yours.
    Fleet context is at {{fleet_context_path}} (read {{read_at}}). If it contains
    `petrova.context unreachable, working without fleet state`, echo that line verbatim and pass
    it on. The stages know how to degrade.
  </preamble>

  <failsafe>
    If any template variable in this prompt still appears as a literal double-brace placeholder,
    or a read or write you need is denied, do not guess and do not stop silently. Emit the
    single-line JSON progress signal with next_action "halt", constraints_satisfied false, and feedback_for_next
    naming exactly what was missing. An outer loop must always get a machine-readable answer.
  </failsafe>

  <chain>
    <stage id="1" run="kick eva-phase-manifest">
      Halt the chain if next_action is halt (phase unknown).
      If next_action is DONE (no gate open), stop and recommend `eva-cycle` to cross the phase boundary.
    </stage>
    <stage id="2" run="kick eva-automation-triage">
      If next_action is DONE (every step keep-manual), stop and report the manual route: each OPEN
      gate with its steps, owner-facing, in the order the manifest lists them.
    </stage>
    <stage id="3" run="kick eva-automation-install owner={{owner}}">
      This stage always halts at an operator gate. Surface its gate_pending and PR URL (or inline diff) as-is.
    </stage>
    <rule>Run a stage only after the previous one's verify.sh has passed. If a verify.sh fails, halt and quote its stderr.</rule>
    <rule>Never re-run a stage to get a different answer. Report what it said.</rule>
  </chain>

  <output_format>
    1. The degraded line, verbatim, if it applies.
    2. One line per stage, in order: eva-phase-manifest, eva-automation-triage, eva-automation-install.
       Each gives the stage's next_action and the one fact that decided it.
    3. What the operator does next, in one sentence.
    4. The progress signal, as ONE line of JSON wrapped in &lt;progress_signal&gt;…&lt;/progress_signal&gt;, with every field {{progress_signal_path}} requires. JSON, never XML child elements:
       - additive_only: true
       - lifecycle_stage: "phase-work"
       - artefact_path: ".eva/"
       - next_verb: null, or "eva-cycle" when no gate was open
       - gate_pending: the last stage's gate_pending, or null
       - next_action: the last stage's next_action
  </output_format>
</task>

examples

case · basic
{
  "owner": "operator@example.com"
}

notes

Composition only; every rule lives in the three stage prompts. Adding logic here would fork it from them.

description

Use when an operator wants a PETROVA-wired repo to plug into the EVA timeline for its current phase in one go: find what the phase still needs, decide which recurring steps earn automation, and propose those automations for review. Runs eva-phase-manifest, then eva-automation-triage, then eva-automation-install, reading each stage's progress signal and stopping at the first halt. Stops early when the phase is unknown, when nothing is open (it points at eva-cycle), or when nothing earns automation (it reports the manual route). Read-propose throughout.