REQ-FUN-097
In-process lifecycle hooks fire on board-item state transitions and sign-off lifecycle events
What
System SHALL fire in-process lifecycle hooks on board-item state transitions (item.queued, item.claimed, item.released, item.completed, item.failed, item.abandoned) and on sign-off lifecycle events (signoff.requested, signoff.approved, signoff.rejected, signoff.expired).
Why
Inspired by AoE; gives synchronous pre-commit veto power to side effects (e.g. worktree provisioning) without bloating the outbox. See arch_decision_lifecycle_hooks memory.
How
Hooks registered at process start; immutable at runtime; run inside the parent DB transaction; raise HookFailure to roll back. Each invocation logged in audit_log.
Done when
Registered handlers receive event payload synchronously before the transition is committed; HookFailure rolls back the parent transaction atomically; audit row records action='hook.<event>.<hook_name>'.
Out of scope
Webhook flavour (post-MVP); dynamic hook registration.
established project management guidelines Mapping
In-process hooks let local subscribers react to lifecycle events - the integration extension surface.