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

EVA cycle — phase-boundary chain

Run the phase-boundary chain (verify-round → phase-close → optional phase-open); halt at first FAIL and draft a decision doc if an invariant slipped.

  • petrova
  • power-prompt
  • eva-super

inputs

namerequireddefault
meta_rules_path no —
fleet_context_path no —

routing

triggers

  • close out this phase
  • run the phase-boundary chain
  • verify and close the phase

not for

  • repos that are not petrova-aware

prompt

<task>
  <role>You are **eva-cycle**. Run the phase-boundary chain: verify-round, then phase-close, then optionally phase-open; halt at the first FAIL and draft a decision doc if an invariant slipped.</role>
  <preamble>
    Read {{meta_rules_path}}. The guard has fetched fleet context to {{fleet_context_path}}.
    If that file contains the line `petrova.context unreachable, working without fleet state`,
    you are in DEGRADED state: you MUST echo that exact line, you MUST NOT name any phase,
    acceptance gate, or drift-watch that is not literally present in the file, and you fall
    back to `docs/` + `git log` only.
  </preamble>
  <rules>
    <rule>petrova-verify-round → petrova-phase-close → optional petrova-phase-open if a successor phase is queued.</rule>
    <rule>Halt at first FAIL.</rule>
    <rule>If any invariant slipped, emit a petrova-decision-doc draft.</rule>
  </rules>
  <output_format>
    Output names the three sub-verbs (petrova-verify-round, petrova-phase-close,
    petrova-phase-open) in that order. On FAIL, next_action is "halt".
  </output_format>
</task>

examples

case · basic

notes

Phase-boundary chain. Halts at first FAIL. Honours degraded-state. First real end-to-end run observed 2026-09-06 (mary-wiki fleet ticket T-01): guard.sh fetched live fleet context for eva-hq (phase: null — no phase ever opened, confirmed against docs/decisions/ history, not just the derived state mirror), so petrova-verify-round correctly refused with nothing-to-verify and the chain halted at step one, per its own contract. Recorded as run_id run_t01_evacycle_20260906T124132Z in the eva-run-events stream (started id 1788698599122-0, terminal id 1788698740727-0), queryable via GET /api/eva/stream. `tested` reflects that the guard→chain→halt mechanics were exercised for real, not that a successful verify→close path has been observed — that needs a repo with an open phase and remains unexercised.
T-01's exit criterion is REWRITTEN 2026-09-07, not resourced: the original asked for a chained verify→close run, which on every repo actually reachable meant manufacturing a phase five minutes before closing it (onboard a throwaway repo, author its bootstrap answers, open a synthetic phase, close it) — proving eva-cycle can close a phase created to be closed, not that it can close one with real state or residue. That is weaker evidence than the halt-path run already in hand, which was a genuine refusal against real (absent) state. Four scope expansions chasing one criterion (canary onboarding, bootstrap answers, the petrova-probe App credential, which this session could not dispatch) was the criterion objecting to itself, not a resourcing gap. Rewritten: the verify→close path is observed on the next phase that closes naturally anywhere petrova-aware, with the run captured from the existing eva-run-events stream. Status stays `tested`, not `verified`, until then. T-01 is CLOSED on this observation-based criterion, not on a manufactured run.

description

Run petrova-verify-round then petrova-phase-close, then petrova-phase-open if a successor phase is queued. Halts at the first FAIL; drafts a petrova-decision-doc if any invariant slipped.