Profile→tier-ceiling mapping ratified — min-of-both's other half
Date: 2026-09-22 Status: closed Supersedes: none Superseded-by: none — current
Context
Section titled “Context”docs/decisions/2026-09-12-seam-class-taxonomy.md ratified the AT0–AT3
autonomy-tier taxonomy and, in its second countersign box, ratified
min-of-both as the composition mechanism between a verb’s own tier
and a repo’s registry profile — falsified both directions in stratt-hq
(TK-petrova-min-of-both-0001). It explicitly withheld one piece: “No
profile→tier-ceiling mapping is ratified by this — that remains a
separate, tracked decision.” IR-002’s closure note names the same gap.
Nothing in host/src/ implements or reads such a mapping today (verified
by grep — min-of-both/minOfBoth/tierCeiling return zero hits outside
the taxonomy doc’s own prose); the mechanism exists, unpopulated.
This doc supplies the missing values.
Decision
Section titled “Decision”Each registry profile value implies a ceiling — the strictest AT tier
a verb may reach in a repo carrying that profile, regardless of the verb’s
own tier:
profile | ceiling | rationale |
|---|---|---|
strict | AT1 | Only reversible, single-repo, no-privileged-path writes ever land here unattended-adjacent — matches profile=strict’s existing FR-009 role as “the anti-echo damper.” |
standard | AT2 | Reversible-with-a-second-act writes (registry edits, phase transitions, request_merge_when_green) are in scope; still no irreversible/externally-visible act. |
permissive | AT3 | Full range, including petrova.sweeps.trigger — the only verb currently rated AT3. |
Composition (unchanged, already ratified): effective ceiling for a
(verb, repo) pair = min(verb's own AT tier, this table's ceiling for the repo's profile). A repo cannot loosen a verb’s own ceiling by carrying a
looser profile; a verb cannot force a stricter repo to accept a tier its
profile refuses.
Registry fact this mapping lands on, checked before ratifying it: none
of the five repos IRINA can currently target (fleets_allowed non-empty,
role != canary — kahn-hq, hermes, yao-agent, abacus, fathom)
carry profile: permissive; all five are strict or standard. Only
eva-hq is permissive registry-wide, and it is not IRINA-eligible today
(empty fleets_allowed). The AT3 ceiling is therefore not live against
any real IRINA target the moment this doc ratifies — it exists for when a
repo’s profile or fleets_allowed changes, not to unlock anything today.
Alternatives considered
Section titled “Alternatives considered”- strict→AT0, standard→AT1, permissive→AT2 (one tier lower across the
board) — considered; rejected as stricter than the taxonomy doc’s own
worked examples require (
AT1verbs likeopen_decisionandupdate_milestoneare exactly the kind of act astrict-profile repo is meant to still permit — anAT0ceiling would silently make everystrictrepo read-only to IRINA, which no prior doc asked for). - A single fleet-wide ceiling, no per-profile table — rejected: this
is exactly the “no profile axis” shape
seam-class-taxonomy.mdalready rejected once (its own “no taxonomy” alternative), just moved one level up; the registry already carriesprofilefor exactly this purpose. - Defer ratification until a
permissiverepo is actually IRINA-eligible — rejected: the taxonomy doc named this gap as blocking, and leaving it open costs nothing to close now against the worked cases already on record (strict/standard), while thepermissiverow is honestly flagged above as currently inert rather than silently asserted as tested.
Consequences
Section titled “Consequences”For code: none yet. This ratifies the values; wiring min-of-both
enforcement into host/src/registry.ts’s act() dispatch (reading
registry.yaml’s profile alongside a verb’s seamTier) is a separate,
tracked follow-up — filing it as such rather than silently expanding this
doc’s own scope past “ratify the mapping,” the same discipline IR-002 used
splitting taxonomy/schema/validator/population into four acts, not one.
For docs: docs/decisions/2026-09-12-seam-class-taxonomy.md’s “stated,
not ratified” line for the mapping is now answered by this doc; that doc
stays as-is (append-only, not edited) per MR-7.
For in-flight phases: none named.
For invariants: none added or repealed.
References
Section titled “References”- docs/decisions/2026-09-12-seam-class-taxonomy.md
- docs/decisions/2026-09-14-ir-002-step4-remaining-seam-tiers.md
- irina/tickets/IR-002-seam-class-sequence.xml
- registry.yaml
Sign-off
Section titled “Sign-off”- Subagent: claude-sonnet-5 (session_01488gmoyur1UAMfpNMgUAhC)
- Human: alex@devarno.com approves the strict→AT1 / standard→AT2 / permissive→AT3 mapping as the ratified values for min-of-both composition.
Countersigned by human:alex@devarno.com on 2026-09-22. Box ticked by the
human directly, in-file; this line recorded by the agent as scribe.