IR-004 — irina-cycle.yml goes write-capable, hermes-only, one verb
Date: 2026-09-14 Status: closed Supersedes: none Superseded-by: none — current
Context
Section titled “Context”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.
Decision
Section titled “Decision”Enable exactly one write verb, on hermes only.
- Verb:
petrova.act.request_review(AT1, perdocs/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,AT2verb, 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:
hermesonly, matching every other IR-004 precondition (IR-001,IR-002) and the ticket’s own non-goal. Generalizing beyond hermes isIR-005, unaffected by this doc. - Gated by both existing mechanisms, not a new one: every call still
goes through
withWipCapGuard(IR-001) and now carriesseamTier: "AT1"(IR-002) — this doc adds no new enforcement, it only turns on a call site that was previously absent.
What this does NOT do
Section titled “What this does NOT do”- Does not enable
petrova.act.request_merge_when_greenor 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.
Consequences
Section titled “Consequences”irina-cycle.ymlgains a conditional step callingpetrova.act.request_reviewwhen the judgement recommends it, wrapped in the workflow’s ownPETROVA_WIP_CAP_CROSS_PROCESS_LOCK=1(same flagIR-012burned 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.
References
Section titled “References”irina/tickets/IR-004-write-path-wiring.xmlirina/LANES-M1-M4.mdM4irina/CYCLE-PROMPT.md.github/workflows/irina-cycle.ymldocs/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(AT1tier definition)docs/decisions/2026-09-14-ir-002-step4-remaining-seam-tiers.md(assignsAT1torequest_reviewspecifically)
Sign-off
Section titled “Sign-off”- 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.