mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-22 11:45:52 +00:00
94ccc7a0c2
Proposals now require their full correlation identity before anything persists: a Submit without a finding ID or investigation ID is refused, so a planned action can never lose the deterministic link back to its Patrol finding. Pinned in the plan-only broker contract test. The persisted-state transition callback becomes org-scoped (OnActionTransition func(orgID, record)) and is wired through ResourceHandlers.SetActionTransitionPublisher into the shared lifecycle service, so a multi-tenant Patrol reconciler can key per-tenant stores and can never apply a transition to the wrong tenant. Publication still strictly follows persistence; code-standards pins guard the org-scoped signature and wiring. pkg/aicontracts/action_broker.go gains machine ownership: a shared ai-runtime/api-contracts registry boundary (owned_files plus a sorted shared_ownerships entry) with path policies proving through pkg/aicontracts/contracts_test.go, and Shared Boundaries entries inserted in canonical sorted order in both contracts. Slice 2b-1 of the typed-lifecycle ratchet; the Patrol reconciler itself lands with the orchestrator wiring now that ai_handlers.go is free.