IT75 — the entity-action substrate, driven against a live database.
Why this bundle exists. Everything the Track A runbook fixed is invisible to unit tests in the
one way that matters: the seams. HandleEntityActions builds a change context from an entity the
save is about to reload; a filter is compiled from a row and evaluated fail-closed; a scoped
binding is refused by a resolver that walks real foreign keys; a durable binding is handed to a
substrate that persists rows. Each half is unit-tested with the other half mocked, which is
exactly the arrangement that lets a contract look correct on both sides and still not meet in the
middle.
What is deliberately NOT here. Nothing runs a model, nothing needs a credential, and nothing
starts a dispatcher — those live in IT74. This bundle drives the entity-action layer itself:
dispatch, scope, filters, the change contract, and the shape of what durable dispatch submits.
Mutation-class throughout. Every check saves records to fire lifecycle events, so the whole
bundle is gated behind RUN_MUTATION_TESTS=1 and unwinds what it created, FK-ordered.
Fileoverview
IT75 — the entity-action substrate, driven against a live database.
Why this bundle exists. Everything the Track A runbook fixed is invisible to unit tests in the one way that matters: the seams.
HandleEntityActionsbuilds a change context from an entity the save is about to reload; a filter is compiled from a row and evaluated fail-closed; a scoped binding is refused by a resolver that walks real foreign keys; a durable binding is handed to a substrate that persists rows. Each half is unit-tested with the other half mocked, which is exactly the arrangement that lets a contract look correct on both sides and still not meet in the middle.What is deliberately NOT here. Nothing runs a model, nothing needs a credential, and nothing starts a dispatcher — those live in IT74. This bundle drives the entity-action layer itself: dispatch, scope, filters, the change contract, and the shape of what durable dispatch submits.
Mutation-class throughout. Every check saves records to fire lifecycle events, so the whole bundle is gated behind
RUN_MUTATION_TESTS=1and unwinds what it created, FK-ordered.