Phase 4: Wire state machine to propagate states and defer side-effects
## Overview
Integrate the propagation infrastructure into the existing `Namespaces::Stateful` state machine. Add the `after_transition` callback that creates outbox records and enqueues the propagation worker. Update `StateQuerying` to read state directly from the column (behind feature flag). Update `TransitionValidation` to check only the parent's state on writes. Defer domain events and webhooks until after propagation completes.
## References
- [ADR 003: State Propagation Model](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/group_and_project_operations_and_state_management/decisions/003_state_propagation_model/)
- [`Namespaces::Stateful`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/models/concerns/namespaces/stateful.rb)
- Parent epic: https://gitlab.com/groups/gitlab-org/-/epics/21607
## Exit Criteria
- [ ] `PROPAGATED_STATES` and `NON_PROPAGATED_STATES` constants defined
- [ ] `after_transition` callback creates outbox record and enqueues worker on propagated state transitions
- [ ] `effective_state` reads column directly when feature flag is enabled
- [ ] `TransitionValidation` checks parent state only (not full ancestor chain) on writes
- [ ] Domain events, webhooks, and callbacks fire only after propagation worker completes
- [ ] All specs pass
epic