Version: v0.1
Date: 2026-08-24
Status: Finding. States what is known. Rules nothing, fixes nothing, commissions nothing.
Occasion: the first live use of the CR-2026-234 gate — unfreezing the rendering agent identity, 2026-08-24.
Sits beside: loomworks-scoping-finding-freeze-alert-v0_1 (not amended). This is that note's argument arriving as fact rather than as design.
Cites: CR-2026-231 (W6) — the N+1 lifecycle shape; CR-2026-234; DR-15; O6, O10.
The tightening is recorded. The widening is not. The act the design treats as needing a human, a deliberation and a stated reason is the act that leaves nothing behind.
unfreeze_agent_identity writes no lifecycle row
agents/grantability.py. The function requires a human actor, requires a non-empty rationale, and validates it — refusing whitespace with "a widening that records no reason is not a deliberate act".
Then it calls _set_status, which is a bare UPDATE agent_identities SET status = :s WHERE id = :aid, reloads the roster, and emits _logger.info(... rationale=%r ...).
Nothing is written to agent_lifecycle_events. The rationale the function demands, validates, and refuses to accept empty goes to a log line and nowhere else. Logs are not the record; they rotate, they are not queryable as history, and nothing in the substrate reads them.
So the confirm-step pattern that standing note O10 names as the template for anything authority-shaped is, here, a gate with no ledger behind it. The reason is collected and discarded.
The obvious suspicion was that the freeze record exists only as a byproduct of the session cascade, and so would be absent for a freeze with nothing to end. That suspicion is wrong, and it is worth recording as wrong, because it was stated before it was checked.
freeze_agent_identity calls record_lifecycle_event(event_kind="identity_frozen", ...) unconditionally, before the cascade and outside any branch. CR-2026-231 (W6) ruled the shape explicitly in that function's own comment: one identity_frozen row for the act of freezing, and one closed row per session the cascade ends. One row is not N; the freezing and the endings are different acts.
Checked empirically as well as read, each case in its own rolled-back transaction against the dev database:
| Case | Live sessions | Cascade ended | agent_lifecycle_events delta | Rows written |
|---|---|---|---|---|
| A | 0 | 0 | +1 | identity_frozen |
| B | 1 | 1 | +2 | identity_frozen, closed (reason frozen) |
Mechanism and observation agree. The identity_frozen row is written whether or not there is anything to cascade over.
So the 2026-08-23 evidence does not exist by accident. It exists because the tightening lane records itself deliberately. That makes the asymmetry sharper, not softer: it is not that one lane happens to leave traces and the other happens not to. One lane was designed to record and the other was not.
Rollback integrity confirmed on a fresh connection afterwards: lifecycle rows back to 1, agent_sessions at 0, all four identities active. Nothing from the check persisted.
The rendering identity, platform-wide, id …022702:
29c62e33-855c-4acb-98c5-2eb075dab9f8, actor kind person. That id resolves to no principal and no contributor. It names nobody. No reason was recorded — freeze_agent_identity has no reason parameter to record one with (see the correction note beside the freeze-alert note).b1df6f2e-…, a real row, with a stated rationale, through the CR-2026-234 gate that verified the actor resolves.
The record holds the first and not the second. agent_lifecycle_events still contains exactly one row, and that row attributes a platform-wide tightening to a person who does not exist.
A reader coming to this table tomorrow sees an identity frozen by nobody, with no reason given, and no indication it was ever unfrozen — while the agent_identities row reads active. The two records disagree, and the one that is wrong is the one that is complete. The correct act is the invisible one.
unfreeze_agent_identity. That is a design question. This note does not answer it, and no such write has been added.
loomworks-scoping-finding-freeze-alert-v0_1 argued from design that the freeze/alert shape leaves the record thin. This note is that argument arriving as fact — not reasoned from the code but observed on a real identity, with a real actor that names nobody, on the day the gate went live.
That note is not amended. It was right in the direction it pointed, and its own correction note already sits beside it. Three notes now stand in a row on the same seam, which is itself worth seeing: the seam has been described three times and closed zero times.
DUNIN7 — Done In Seven LLC — Miami, Florida Finding — the widening leaves no record — v0.1 — 2026-08-24