petrova_onboard
Initialise a registered repo’s mechanical petrova floor: write
.petrova/contract.yamlwith default integration declarations + install.github/workflows/docs-invariants.ymlif missing. Narrow compliance verb — does NOT generate CLAUDE.md / MILESTONES.md / AGENTS.xml / north-star (those stay prose-driven via00-bootstrap.md). The verb’s job is to make the mechanical floor harder to skip.
Upholds: MR-13 · MR-14
Side effects: Creates a branch petrova/onboard/.petrova/contract.yaml and (if missing) .github/workflows/docs-invariants.yml. Opens a PR.
Constraints
Section titled “Constraints”REPO_IN_REGISTRY— target_repo must appear in registry.yaml.BOOTSTRAP_ANSWERS_EXIST— bootstrap_answers_path must resolve to a markdown file in target_repo’s default_branch (verifies the Q1–Q8 answers from00-bootstrap.mdare already written down).CONTRACT_DOES_NOT_EXIST— target path .petrova/contract.yaml must not already exist in target_repo’s default_branch (no double-bootstrap; rerun is a different verb).FLEETS_ALLOWED_EMPTY— Standard policy gate; human override via PETROVA_ALLOW_HUMAN_OVERRIDE=1 + actor=human:.
Input shape
Section titled “Input shape”bootstrap_answers_pathstring(required) — Path within target_repo (e.g.docs/decisions/2026-05-13-bootstrap-answers.md) to the doc capturing Q1–Q8 answers from00-bootstrap.md. Verb verifies path resolves; does not validate content.integrationsobject— Optional override of the default integration declarations (all pending). Use when the repo already has evidence to declare for one or more integrations at onboarding time.ares→#/$defs/IntegrationDecltraceo→#/$defs/IntegrationDeclcrumb→#/$defs/IntegrationDeclrocky→#/$defs/IntegrationDecleva→#/$defs/IntegrationDecl
install_workflowboolean— Whether to install.github/workflows/docs-invariants.ymlfrom the canonical petrova-codes template if absent. Default true. Set false only for repos that intentionally customise the workflow (rare).
Output shape
Section titled “Output shape”contract_pathstringworkflow_installedbooleanpr→PRRefdiff_preview→DiffPreview
Example
Section titled “Example”Input:
{ "envelope": { "verb": "petrova_onboard", "target_repo": "oompa-tools", "idempotency_key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", "dry_run": true, "actor": "human:alex@devarno.com", "triggered_by": { "kind": "human_request", "ref": "petrova-codes:baseline-v2-s2" } }, "params": { "bootstrap_answers_path": "docs/decisions/2026-05-07-extract-from-choco-hq.md", "install_workflow": true }}Output (output_dry_run):
{ "envelope": { "verb": "petrova_onboard", "status": "dry_run", "idempotency_key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", "mr_citations": [ "MR-13", "MR-14" ] }, "result": { "contract_path": ".petrova/contract.yaml", "workflow_installed": true, "diff_preview": { "files": [ { "path": ".petrova/contract.yaml", "operation": "create", "size_bytes": 612 }, { "path": ".github/workflows/docs-invariants.yml", "operation": "create", "size_bytes": 8743 } ], "branch": "petrova/onboard/oompa-tools", "commit_message": "feat(petrova): onboard oompa-tools (idempotency: 0123456789ab)" } }}Recipe
Section titled “Recipe”(no recipe yet — see SKILL guide)