Criterion-model functional/technical classification SSOT
Goal
Make the functional-vs-technical distinction representable on a SuccessCriterion so every downstream gate can key off it.
Implementation Sketch
Add kind: functional | technical to the SuccessCriterion field set (scripts/plan_corpus/schemas.py _CRITERION_ALLOWED_FIELDS ~1593) and the v7 $def (scripts/plan_corpus/schemas/v7/plan-routing.schema.json SuccessCriterion). Extend validate_success_criterion (1676) with the enum check. Add classification query helpers (criteria_functional / is_functional) beside criteria_ownerless (1866). Add a kind column to render.py _render_success_criteria. Field is optional for backward-compat read; create-plan (section-02) requires it on new plans.
Spec References
scripts/plan_corpus/schemas.py:1593-1917; scripts/plan_corpus/schemas/v7/plan-routing.schema.json SuccessCriterion $def.
Work Items
- Add
kindenum field to_CRITERION_ALLOWED_FIELDS+ v7 SuccessCriterion$def(functional|technical). - Extend
validate_success_criterionwith thekindenum teeth (reject unknown values). - Add
criteria_functional/is_functionalclassification helpers besidecriteria_ownerless. - Add
kindcolumn torender.py:_render_success_criteria; pytest accept/reject + classification-query coverage.