Every lifecycle event, and which ones fire
All twenty-four event names, what each means, and whether it has a firing site today.
Written By Dustin
Last updated About 3 hours ago
Event names are a closed set pinned in TOVIO's core. An unknown name on a manifest or a binding is refused with a typed error rather than quietly accepted, so a typo is caught at bind time instead of showing up as a plugin that silently never runs.
Being bindable and being fired are separate things. An event is dispatched only where the subsystem that owns the operation has a wired firing site. Binding an event that does not fire yet is legal and deliberate — it lets a manifest be authored, reviewed, and pinned ahead of the subsystem, so nothing needs editing when dispatch lands.
Snapshot and change lifecycle
Land
Sync
Conflicts
Review and proposals
Permissions and policy
Locks
Agents
Git bridge
Release and distribution
Those four have no backing subsystem yet — no command, object kind, or transport format — so nothing dispatches them. They remain bindable placeholders.
The one request-and-response event
transcript-parse is unlike everything above. Every other event is observe-or-block: TOVIO announces something and reads a verdict. This one asks a question — here are an AI agent transcript's raw bytes, what turns are in them? — and uses the answer.
It exists so per-runtime transcript adapters can be written by anyone. Three things make it safe:
- Its grant is empty and none is grantable. A manifest declaring
transcript-parsemust request no capability at all; one that asks for even a single capability is refused at validation, naming the offender. The guest runs with an empty grant no matter what a binding approves. TOVIO reads the file itself, first-party and in-process, because transcript files live outside the repository next to~/.awsand~/.ssh. Only parsing is sandboxed. - It receives nothing that locates the bytes — no path, no handle, no repository root.
- It cannot fail a commit. Mode and required are inert here. A refusal, timeout, or undecodable answer makes TOVIO fall through to its built-in adapters silently. Built-ins are consulted first; yours is reached only for bytes none of them claims.
It fires today during tovio commit for a transcript no built-in adapter recognises — in practice an explicit --session-from, or a file in the open-transcript drop directory.
Post-event semantics
Post-events fire after their operation is already durable. An enforcing binding on a post-event cannot undo it — the commit is committed, the ref has advanced. TOVIO still runs the binding and audits the result, but the failure is diagnostic. If you need to gate, bind the matching pre-event.