create-plan requires a plan-wide functional acceptance criterion
Goal
A plan with work-bearing sections is refused at emit time unless it carries >=1 plan-wide (owner_section_id:null) kind: functional criterion distinct from regression proxies.
Implementation Sketch
Extend create_plan_runtime/floor.py:assert_floor_or_raise with a plan-wide gate after the per-section check: when any work-bearing section exists, require >=1 ownerless kind: functional criterion; else raise PlanWideFunctionalCriterionMissing. Catch in __main__.py:_cmd_scaffold and emit a halt envelope (exit_reason: plan_wide_functional_criterion_missing, payload.section_ids: [null]). Bug-plan floor_exempt carve-out unchanged.
Spec References
scripts/create_plan_runtime/floor.py:96-111; scripts/create_plan_runtime/main.py:157-170.
Work Items
- Extend
floor.py:assert_floor_or_raisewith the plan-wide functional-criterion gate + new error class. - Catch the new error in
__main__.py:_cmd_scaffold; emit halt envelope withplan_wide_functional_criterion_missing. - pytest: regression-only plan-wide criteria refused; functional plan-wide criterion accepted; bug floor_exempt still bypasses.