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/
Constraints
Section titled “Constraints”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.
Input shape
Section titled “Input shape”slug→RepoSlug(required)rationalestring(required) — Written into the ADR body verbatim. ≥40 chars forces meaningful audit text.opsarray(required)- items:
opstring(required) enum:set,add,removepathstring(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.
- items:
mr_citationsarray— 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].
Output shape
Section titled “Output shape”registry_pathstringadr_pathstringops_appliedintegerpr→PRRefdiff_preview→DiffPreview
Example
Section titled “Example”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" } }}Recipe
Section titled “Recipe”(no recipe yet — see SKILL guide)