Reject controllerSpec combining reachability with assumptions
The 'reachability' goal flag and environment assumptions are handled by different synthesis paths and do not compose meaningfully: the synthesizer that honors reachability ignores assumptions, and the assumption-aware GR game does not apply reachability semantics. Silently accepting both led to controllers that ignored one of the two clauses.
Add a guard in GoalDefToControllerGoal.buildControllerGoal -- the single converter every synthesis engine passes through to build its ControllerGoal -- that aborts via Diagnostics.fatal when a goal has both reachability and a non-empty assumption block. This covers all engines (classic GR-game, DCS, monolithic director, compositional, POR, control-stack).
Add ReachabilityWithAssumptionsTest covering the rejection and confirming the guard does not over-fire when only reachability is present.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com