Skip to content

petrova_act_registry_edit

Generic registry-mutation substrate. Applies a list of structured ops (set/add/remove against dotted paths under repos[].) to registry.yaml and opens a PR with the diff plus a co-emitted ADR. Ops outside repos[]. are rejected — this verb cannot edit top-level registry fields. target_repo MUST be petrova-codes.

Upholds: MR-4 · MR-7 · MR-12 Side effects: Creates branch petrova/registry-edit/petrova_act_registry_edit/ in petrova-codes. Modifies registry.yaml. Adds the ADR. Opens a PR labelled registry-edit + awaiting-human-merge. Does NOT auto-merge (MR-12).

  • TARGET_REPO_IS_PETROVA_CODES — envelope.target_repo must be ‘petrova-codes’.
  • SLUG_NOT_IN_REGISTRY — params.slug must already appear in registry.yaml.
  • INVALID_OP_PATH — Every op path must stay under repos[].* — top-level registry fields are off-limits.
  • RATIONALE_TOO_SHORT — rationale must be ≥40 characters — forces meaningful audit text in the co-emitted ADR.
  • REGISTRY_VALIDATION_FAILED — Post-mutation registry.yaml must validate against registry.schema.json.
  • slugRepoSlug (required)
  • rationale string (required) — Written into the ADR body verbatim. ≥40 chars forces meaningful audit text.
  • ops array (required)
    • items:
      • op string (required) enum: set, add, remove
      • path string (required) — Dotted path under repos[].* (e.g. ‘profile’, ‘integrations_applicability.ares’, ‘fleets_allowed[0]’).
      • value (any) — Required for set/add; ignored for remove. Schema-untyped at the verb level — substrate validates against registry.schema.json after applying.
  • mr_citations array — Additional MR-N tags to append to the ADR mr_compliance list. Always combined with the verb’s baseline [MR-4, MR-7, MR-12].
  • registry_path string
  • adr_path string
  • ops_applied integer
  • prPRRef
  • diff_previewDiffPreview

Input:

{
"envelope": {
"verb": "petrova_act_registry_edit",
"target_repo": "petrova-codes",
"idempotency_key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"dry_run": true,
"actor": "human:alex@devarno.com",
"triggered_by": {
"kind": "human_request",
"ref": "cli:registry-edit"
}
},
"params": {
"slug": "rocky-hq",
"rationale": "Promote rocky-hq from experimental to production profile after Phase 9 baseline.",
"ops": [
{
"op": "set",
"path": "profile",
"value": "standard"
},
{
"op": "set",
"path": "role",
"value": "production"
}
],
"mr_citations": [
"MR-3"
]
}
}

Output (output_dry_run):

{
"envelope": {
"verb": "petrova_act_registry_edit",
"status": "dry_run",
"idempotency_key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"mr_citations": [
"MR-4",
"MR-7",
"MR-12",
"MR-3"
]
},
"result": {
"registry_path": "registry.yaml",
"adr_path": "docs/decisions/2026-05-14-petrova_act_registry_edit-rocky-hq.md",
"ops_applied": 2,
"diff_preview": {
"files": [
{
"path": "registry.yaml",
"operation": "modify"
},
{
"path": "docs/decisions/2026-05-14-petrova_act_registry_edit-rocky-hq.md",
"operation": "create"
}
],
"branch": "petrova/registry-edit/petrova_act_registry_edit/rocky-hq",
"commit_message": "act(petrova): edit registry for rocky-hq"
}
}
}

(no recipe yet — see SKILL guide)