Skip to content

IR-004 — irina-cycle.yml goes write-capable, hermes-only, one verb

Date: 2026-09-14 Status: closed Supersedes: none Superseded-by: none — current

irina-cycle.yml has been report-only since it shipped (2026-09-11): computes hermes’s decisions-only drain time, produces a headless judgement report, opens nothing, calls no verb. irina/tickets/IR-004-write-path-wiring.xml names this as its own deliberate ratification, gated on IR-001 (WIP cap) and IR-002 (seam class) existing first — both closed as of today (docs/decisions/2026-09-13-ir-012-wip-cap-cross-process-lock.md burned in, docs/decisions/2026-09-14-ir-002-step4-remaining-seam-tiers.md closed the population step). This doc is IR-004’s own required ruling, separate from either of those.

This is not a decision to widen IRINA’s mandate. The direction beyond this doc — IRINA as the single PETROVA-facing point of contact that delegates precisely to kahn-hq/rocky-hq subfleets — is real and worth building toward, but is a separate, larger scoping decision this doc does not make. Ideation on IRINA’s scope closed 2026-09-11 (irina/IRINA-SCOPE-FANOUT-2.xml’s synthesis); this doc stays inside that closed scope — hermes pilot, decisions-only, one verb — and does not reopen it.

Enable exactly one write verb, on hermes only.

  • Verb: petrova.act.request_review (AT1, per docs/decisions/2026-09-14-ir-002-step4-remaining-seam-tiers.md). Opens a PR carrying the cycle’s own judgement report as its rationale/grounding, naming the oldest open decisions the report already surfaces. It does not request merge (petrova.act.request_merge_when_green, a different, AT2 verb, stays out of scope) — a human still merges or closes whatever this PR proposes. This is the lowest-blast-radius write on the registry that does anything closure-shaped at all: it nudges toward closure, it does not itself close.
  • Trigger condition, not every cycle: only when the cycle’s own judgement (irina/CYCLE-PROMPT.md’s existing output) recommends “something needs a human decision” — i.e. the write path fires on the same signal the report-only pilot already computes, not on a new judgement invented for this doc. A cycle that reads “let it run” opens nothing.
  • Scope: hermes only, matching every other IR-004 precondition (IR-001, IR-002) and the ticket’s own non-goal. Generalizing beyond hermes is IR-005, unaffected by this doc.
  • Gated by both existing mechanisms, not a new one: every call still goes through withWipCapGuard (IR-001) and now carries seamTier: "AT1" (IR-002) — this doc adds no new enforcement, it only turns on a call site that was previously absent.
  • Does not enable petrova.act.request_merge_when_green or any other verb — one verb, named above, nothing else.
  • Does not generalize beyond hermes (IR-005’s job).
  • Does not ratify IRINA as a fleet-wide delegation point routing into kahn-hq/rocky-hq — a real direction, a separate and larger decision, not made here.
  • Does not change CYCLE-PROMPT.md’s judgement logic itself, only adds a write step conditioned on that judgement’s existing output.
  • irina-cycle.yml gains a conditional step calling petrova.act.request_review when the judgement recommends it, wrapped in the workflow’s own PETROVA_WIP_CAP_CROSS_PROCESS_LOCK=1 (same flag IR-012 burned in).
  • irina/CYCLE-PROMPT.md’s report-only header comment and its explicit “do not open a PR” instruction need updating to match — that text becomes false the moment this doc is ratified and the workflow changed, so the two must land together, not this doc alone.
  • IR-004’s own acceptance criteria (C2/C3/C4) still need real verification once the workflow change lands — this doc is the ratification C1 asks for, not proof the other three hold.
  • irina/tickets/IR-004-write-path-wiring.xml
  • irina/LANES-M1-M4.md M4
  • irina/CYCLE-PROMPT.md
  • .github/workflows/irina-cycle.yml
  • docs/decisions/2026-09-13-ir-012-wip-cap-cross-process-lock.md (IR-001 precondition satisfied)
  • docs/decisions/2026-09-14-ir-002-step4-remaining-seam-tiers.md (IR-002 precondition satisfied)
  • docs/decisions/2026-09-12-seam-class-taxonomy.md (AT1 tier definition)
  • docs/decisions/2026-09-14-ir-002-step4-remaining-seam-tiers.md (assigns AT1 to request_review specifically)
  • Subagent: claude-sonnet-5 (session_01Ft2mfLuQC63sLqH3vGWxWA)
  • Human: alex@devarno.com

Countersigned by human:alex@devarno.com on 2026-09-14 — commit 90973005 (this file’s creation commit) is authored by the human directly, per docs/decisions/2026-09-05-proxy-countersign-retired.md’s post-retirement definition. Line added retroactively by the agent as scribe.