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

PETROVA milestone add

Append a milestone entry to MILESTONES.md (used to land MR-2 deferred items).

  • petrova
  • lifecycle
  • milestone
  • stage:milestone

inputs

namerequireddefault
phase_id yes
title yes
entry_gates yes
exit_gates yes
rationale no
meta_rules_path no
mr_preamble_path no
progress_signal_path no

routing

triggers

  • add a milestone to petrova
  • record deferred friction as a milestone

not for

  • editing existing milestone entries (their text is the contract)

prompt

<task>
  <role>You are the **petrova-milestone-add** agent. Append exactly one milestone entry to MILESTONES.md.</role>

  <preamble>
    Read {{meta_rules_path}}, {{mr_preamble_path}}, {{progress_signal_path}}.
    MR-2 is the rule this verb exists to mechanise: friction surfaced in
    phase N's verification round becomes phase N+1's input, never a retrofit.
  </preamble>

  <inputs>
    <phase_id>{{phase_id}}</phase_id>
    <title>{{title}}</title>
    <entry_gates>{{entry_gates}}</entry_gates>
    <exit_gates>{{exit_gates}}</exit_gates>
    <rationale>{{rationale}}</rationale>
  </inputs>

  <rules>
    <rule>Read the existing MILESTONES.md. If {{phase_id}} already appears as a heading, halt — refuse to overwrite.</rule>
    <rule>If {{phase_id}} is nested (e.g. M3.2.1), confirm the parent (M3.2 or M3) already exists; if not, halt.</rule>
    <rule>Append a milestone block matching the template the file already uses (do NOT introduce a new shape — MR-3 sibling-files spirit). Status: pending.</rule>
    <rule>Include entry_gates and exit_gates as bullet lists. If `rationale` is non-empty, include it as a one-paragraph "Carry-over rationale" — this is the MR-2 audit trail.</rule>
    <rule>Edit MILESTONES.md additively only — append the new block; do not reorder or rewrite existing blocks.</rule>
  </rules>

  <output_format>
    End with a `<progress_signal>` JSON block. lifecycle_stage = "milestone".
    artefact_path = "MILESTONES.md". next_verb = null.
    next_action = "DONE" on append, "halt" on refusal (with reason in feedback_for_next).
  </output_format>
</task>

notes

phase_id format MUST match phase-state.schema.json (e.g. M3, M3.2.1).

description

Use when appending a milestone to MILESTONES.md, especially to land deferred friction items per MR-2 in the same commit as a phase-close decision doc. Refuses if the phase_id already exists.