Phase 4 of the decoupling refactor (behavior-preserving):
- profile_schema.json: every operation contract now carries
runtime_capability {body_mutating, requires_active_body,
replayable, requires_selector, open_profile_ok} (single source of truth)
- operation_contracts.py: validates and forwards the flags
- capabilities.py: the five data-classification frozensets are now
derived from the schema at import time; dispatch-logic sets
(_HOLE_ATOMICS, _PATTERN_ATOMICS, extent constants) stay in code
- test_profile_schema.py: completeness + structural invariants test
Equivalence proven by flag counts (27/13/25/6/2) matching the previous
hand-written sets and by the unchanged test-baseline failure set.