# Selector This folder contains rule-based selector configuration and examples. The v0.2 selector should not call an LLM. It should use simple matching rules: - Trigger keywords - Input types - Negative triggers - Pipeline position - Selection priority - Negative trigger first - No-call threshold - QPI-before-IA gate - QPI positive-signal gate - Direct-execution no-call signals - Calibration smoke checks Current files: - `selector_rules.json` - `selector_examples.json` - `selector_calibration_inputs.json` - `qpi_case_digests.json` The selector does not call an LLM. The executable demo is `scripts/run_selector_demo.py`. Selector regression is `scripts/run_selector_regression.py`. Selector calibration smoke check is `scripts/run_selector_calibration_smoke.py`. `qpi_case_digests.json` stores owner-reviewed QPI case digests that can feed selector calibration or later regression selection. It is not a model status upgrade and should not include unreviewed draft cases. Digest field notes: - `misclassification_risk` is the canonical digest field matching QPI's structured output contract. - `qpi_complexity_pattern` records judgment complexity: `not_mixed`, `intra_frame_mixed`, or `inter_viewpoint_divergence`. - `qpi_complexity_pattern=intra_frame_mixed` does not imply `classification=mixed`; `classification` is the final routing class, while `qpi_complexity_pattern` records the structure of the judgment. - Multi-perspective / inter-viewpoint cases require `classification_by_viewpoint` or `viewpoint_summary`.