# QPI Contextual Routing Rules

Date: 2026-06-17

Status: draft rule hardening for `model_library_mvp`

## 1. Updated Definition

QPI is not a text classifier.

QPI judges how a cognitive subject, in a concrete context, frames an expectation-reality gap as `question`, `problem`, `issue`, `mixed`, or `no_call`.

The model must therefore inspect:

- who the subject is;
- what responsibility position they occupy;
- what scenario the gap appears in;
- what the expected outcome and current reality are;
- what resources, authority, time scale, and feedback loops are available;
- whether the frame is stable, provisional, mixed, or changing.

## 2. Source Structure

QPI currently draws from two non-substitutable source layers:

- `article_qpi_contextual_2025_001`: subjectivity, context, expectation-reality gap, dynamic lifecycle, and semantic foundation.
- `article_qpi_primary_001`: core scarcity, cognitive optics, power-framed misclassification, violent reduction, and malicious inflation.

The 2025 article is not obsolete. It supplies the subject-context-dynamic foundation that prevents QPI from becoming a shallow text classifier.

## 3. No-Call Gate

Return `classification_scope=no_call` when the input is only:

- fact lookup;
- rewrite, polish, or typo correction;
- translation;
- direct file or formatting execution;
- a low-risk instruction where the user explicitly says not to analyze.

Exception: if the user explicitly says not to execute literally and asks for analysis of the underlying problem, the no-call gate may be bypassed.

## 4. Subject-Context Gate

QPI must not produce high-confidence classification without enough context.

Rules:

- If `subject_position` is missing, `classification_confidence` must not be `high`.
- If `scenario_context` is missing, `dominant_scarcity` must not be high-confidence.
- If both subject and scenario are missing, set `is_provisional=true`.
- If context is insufficient, fill `missing_context` and `recommended_clarifying_questions`.

Example:

```text
Input: 如何提高流量？
```

This is not automatically `problem` or `mixed`. It is `insufficient_context` until the subject, responsibility scope, goal, resources, and time scale are known.

## 5. Expectation-Reality Gap

Every non-no-call QPI output should extract:

- expected state;
- current reality;
- gap summary.

If any part is unknown, write `unknown` instead of inventing context.

## 6. Mixed Versus Multi-Perspective

QPI must distinguish two different kinds of complexity.

`intra_frame_mixed`:

Same subject, same scenario, same stage. Multiple scarcities coexist inside one problem frame.

Example:

```text
我是集团营销负责人，既缺流量增长方法，也担心销售、库存、客服和激励机制跟不上。
```

`inter_viewpoint_divergence`:

The same surface input would be framed differently by different subjects or responsibility positions.

Example:

```text
如何提高流量？
```

For a student this may be `question`; for a marketing manager this may be `problem`; for a group marketing director this may be `issue`.

Do not collapse `inter_viewpoint_divergence` into `mixed`.

## 7. Scarcity Profile

Use three scarcity channels:

- `data_scarcity`: facts, concepts, examples, source location, or basic knowledge are missing.
- `path_or_resource_scarcity`: goal is clear, but method, resource, decomposition, or implementation path is missing.
- `consensus_or_order_scarcity`: success depends on alignment, incentives, governance, stability, authority, or system order.

Dominant scarcity rules:

- If exactly one channel is `high`, use its corresponding dominant scarcity.
- If two or three channels are `high` for the same subject and scenario, use `mixed`.
- If evidence is insufficient, use `unknown`.
- For `mixed` or `low` confidence, `evidence_gap` must be non-empty.

## 8. Issue As Governance Load

`issue` does not require a multi-person organization.

Raise issue weight when any of these are present:

- success criteria are not unique, and multiple standards are reasonable;
- the task cannot be solved once and closed;
- the action will change the future problem structure;
- multiple valid goals require ongoing tradeoff;
- state continuity, role boundaries, invocation authenticity, audit trail, or downstream reuse matters;
- the validator is part of the system being designed;
- local truth can masquerade as global structure;
- the next step depends on human confirmation, authority, or boundary protocol.

This covers personal workflow redesign cases where the owner, future owner, agents, source materials, token budget, audit boundary, and downstream projects behave like proxy stakeholders.

## 9. Misframing Risks

QPI must identify these risks when present:

- `violent_reduction`: compressing an issue into a personal execution problem.
- `malicious_inflation`: inflating a concrete problem into an untouchable issue.
- `tool_solutionism`: treating subject-context-governance work as mere tool unfamiliarity.
- `premature_classification`: assigning Q/P/I before subject and scenario are known.

## 10. Routing Output

The required QPI runtime output fields are declared in `models/qpi.model.json` under `structured_output_contract` and enforced by `scripts/validate_model_library.py`.

Do not write `draft-callable` into model `status`. QPI remains:

```json
{
  "status": "draft",
  "stability_level": "B",
  "regression_status": "pending"
}
```

## 11. Raw Case Preprocessing

Owner-provided raw cases should not be compressed into short classification prompts.

Each case digest should preserve:

- `subject_position`;
- `responsibility_scope`;
- `scenario_context`;
- `experience_level`;
- `goal`;
- `expected_outcome`;
- `current_reality`;
- `hard_feedback_availability`;
- `success_criteria`;
- `proxy_stakeholders`;
- `dynamic_shift`;
- `possible_qpi_by_viewpoint`;
- `owner_expected_judgment`;
- `codex_candidate_judgment`;
- `owner_review_needed`.

Round 03 completed the first owner-reviewed QPI case promotion into:

- `reports/model_case_preprocessing/qpi/round-01/*.cases.md`;
- `selector/qpi_case_digests.json`;
- `selector/selector_calibration_inputs.json`;
- `tests/qpi.regression.json`.

Round 03.1 digest field rules:

- Use `misclassification_risk`, not `misframing_risks`, to match the QPI structured output contract.
- Use `qpi_complexity_pattern`, not `mixed_or_multi_perspective`, for judgment-structure complexity.
- `qpi_complexity_pattern=intra_frame_mixed` does not require `classification=mixed`; final routing classification and judgment complexity are separate.
- If `classification_scope=multi_perspective` or `qpi_complexity_pattern=inter_viewpoint_divergence`, the digest must include `classification_by_viewpoint` or `viewpoint_summary`.
