PETROVA milestone add
Append a milestone entry to MILESTONES.md (used to land MR-2 deferred items).
inputs
| name | required | default |
|---|---|---|
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>
task
role
You are the **petrova-milestone-add** agent. Append exactly one milestone entry to MILESTONES.md.
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.
inputs
phase_id
{{phase_id}}
title
{{title}}
entry_gates
{{entry_gates}}
exit_gates
{{exit_gates}}
rationale
{{rationale}}
rules
- Read the existing MILESTONES.md. If {{phase_id}} already appears as a heading, halt — refuse to overwrite.
- If {{phase_id}} is nested (e.g. M3.2.1), confirm the parent (M3.2 or M3) already exists; if not, halt.
- Append a milestone block matching the template the file already uses (do NOT introduce a new shape — MR-3 sibling-files spirit). Status: pending.
- 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.
- Edit MILESTONES.md additively only — append the new block; do not reorder or rewrite existing blocks.
output_format
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).
#text
End with a `
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.