Version. 0.1 Date. 2026-08-21 Status. Standing note recording a system property. Filed per CR-2026-232 §7.6, so the property lives in the record rather than only inside a change request. Origin. Operator ruling 2026-08-21, that API-acting agent contributors are in scope of the accountability commitment. Enumerated by CR-2026-232.
**loomworks-standing-note-agent-accountability-v0_1 §1 commits that every agent action records who acted and what authorized it, by construction rather than by policy.**
That commitment is currently unmet for three populations of agent action. They record who acted. They do not record what authorized them, because nothing authorized them — no session is minted on their paths.
They are in scope. This is debt, not design. Ruling them out would have been the cheaper answer and would have written an exclusion into the record permanently; ruling them in makes the gap the kind of thing that gets paid.
| Population | Why it holds no session | Discharged by |
|---|---|---|
| HTTP bearer-token agents — 14 files across the routers and api/deps.py | The actor is an agent contributor row reached by a bearer token, not an agent_identity. There is nothing to mint a session against. | Grants at the API boundary. Unscoped, with its own design question: what a session means for an agent that arrives per-request holding a token. |
| Seed induction — engagement/seed_induction.py, engagement/creation.py | Nothing. It holds a seeded identity — role seed_induction, migration 0113 — and simply does not mint. | Not blocked. Minting is one call. The smallest of the three and the one that could be discharged next. |
| Render specialists — agents/render_specialist_bootstrap.py | Per-binding identity from render_specialist_binding, which per-role session minting cannot express. | loomworks-scoping-per-binding-session-minting-v0_1 — named design work with a real blocker. |
Grouped by blocker rather than listed flat, because they are stuck on different things. A flat list would suggest one fix.
Seed induction is worth naming separately. It is the only one of the three with no obstacle. It is unmet because nobody has minted, not because minting is unavailable.
CR-2026-232 changed nothing about who has a grant. Every one of these actions is as ungoverned as it was.
What changed is that the absence is now recorded. UNSESSIONED_ACTION_ID is written where a session would go, so three states are distinguishable on an agent write: a real session, a deliberate absence, and None — which is now a defect rather than a silence. The enumerated baseline in agents/unsessioned_baseline.py fails when a new unsessioned path appears.
The most this is entitled to claim: the record is honest about being incomplete.
The responsible human behind an API agent is whoever holds the bearer token, and that token's issuance is unrecorded too. The token is a contribution credential, and foray-reference/loomworks-contribution-credential-event-log-bypass-v0_1 records that the credential lifecycle writes via raw SQL into its own table, reaching neither the event log nor any FORAY reserved location.
So the chain from token to human is unrecorded at both ends. The action does not record its grant; the grant's issuance is not recorded either. They are one gap seen from two directions, and closing one without the other leaves the chain broken in a different place.
This note is deleted when its table is empty. So are UNSESSIONED_ACTION_ID and the baseline module — they exist to describe a gap, and they have no meaning after it closes.
A note recording a debt should say what its own discharge looks like, or it becomes a permanent description of a temporary state, which is how debt turns into design without anyone deciding to.