--- name: pyright-test-policy description: Enforces Pyright test policy, preserving type precision and requiring justification for test changes. --- # Pyright Test Policy Tests are the specification for Pyright behavior. Agents must **not modify tests simply to make CI pass**. The goal is to **preserve or improve type precision** unless a justified upstream change requires otherwise. --- # Allowed Changes Agents may modify tests only when one of the following is true: 1. A **typeshed stub change** legitimately alters the expected type. 2. A **Pyright diagnostic message format** changed but the semantic meaning is the same. 3. A test relied on unstable formatting or ordering. --- # Precision Regression Rule (Default) Any change that makes types less precise is considered a **regression by default**. Examples: - `T → Unknown` - `T → Any` - container precision loss `list[int] → list[Any]` - literal widening `Literal["x"] → str` These regressions are **allowed only with justification**. --- # Allowed Regression With Evidence `Unknown` or `Any` changes may be accepted **only if the PR includes**: 1. **Evidence** - the relevant typeshed stub diff - or an upstream typing change 2. **Reasoning** - why Pyright cannot infer the previous precision 3. **Classification** - A) typeshed became less precise - B) Pyright limitation - C) test fragility - D) harness issue 4. **Mitigation** When possible: - open a typeshed issue/PR - or add a TODO referencing the issue --- # Forbidden Changes Agents must NOT: - blindly replace expected types with `Unknown` or `Any` - remove diagnostics - delete `reveal_type` checks - suppress errors to make tests pass without the justification process above. --- # Preferred Fix Order Agents must attempt fixes in this order: 1. **Fix Pyright behavior** 2. **Fix incorrect typeshed stub** 3. **Adjust tests (last resort)** --- # Precision Regression Reporting If a regression is introduced, the agent must include a report in the PR: Example: Precision Regression Report Test | Before | After | Reason ---- | ---- | ---- | ---- test_numpy_array | ndarray[int] | ndarray[Any] | typeshed change in numpy/__init__.pyi This ensures reviewers can quickly understand the impact. --- # Review Gate If more than **2 precision regressions** occur in a single PR, the agent must stop and request human review. --- # Commit Message Requirements Each fix must include: - failure classification (A/B/C/D) - relevant typeshed commit (if applicable) - explanation of how the change preserves or justifies type precision