Repository navigation
[Issue #149] Deterministic tier floors replace the size-only QA trigger (v2.1.3 P2) - #151
Conversation
… tiers Phase 3.5 now states one rule: tier floors T0-T3, computed from the diff's paths. The Phase 0 router marks every path `3.5 (per risk tier)` and mirrors each tier's Phase 3.5 value, which resolves the router/trigger disagreement in #107 (no hotfix exemption). phase3.md names its plan-approval list as the T2 floor, the project-context template and PROJECT_CONTEXT.md declare behavior and T2/T3 paths, qa-agent step 6 no longer names code analysis as an evaluator, and README matches the tier rule. Co-Authored-By: Claude Sonnet <noreply@anthropic.com>
check_risk_tiers compares the Phase 0 tier mirror and every router path with the Phase 3.5 tier table and the pinned policy, and rejects the retired size trigger. Tier pins replace the size-trigger pins; mutation tests prove each drift fails. Co-Authored-By: Claude Sonnet <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the
|
…er decides Line 51 still described the retired 80-point pass gate. It now matches the P4 outcome model, and the README retired-token pin covers the old wording. Co-Authored-By: Claude Sonnet <noreply@anthropic.com>
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Files Reviewed (9 files)
Reviewed by nemotron-3.5-super-vl:free · Input: 198.1K · Output: 30.4K · Cached: 260.2K Review guidance: REVIEW.md from base branch |
Keep both sides: check_risk_tiers and RiskTierTests from P2, and check_bounded_remediation and BoundedRemediationTests from P5. Co-Authored-By: Claude Sonnet <noreply@anthropic.com>
Closes #149
Closes #107
Rationale
Phase 3.5 decided QA by diff size (lines, file count, interface/schema/auth change) while the Phase 0 router listed 3.5 for some paths and not others (#107). This PR replaces the size trigger with deterministic risk-tier floors, stated once in
phases/phase3.5.md(Risk Tiers). The router marks every path3.5 (per risk tier)and mirrors each tier's Phase 3.5 value;scripts/validate_skill.pynow fails when the two disagree. Emergency Hotfix is not exempt; the tier rule is the single rule for every path.T1 interim: until P3 lands, T1 keeps today's lanes (QA + independent review), so QA is no longer size-gated and small T1 changes get QA. No lane is removed. P3 makes T1 QA conditional on a declared acceptance check. T2/T3 protections are unchanged.
Acceptance criteria
skip, no reviewer or acceptance lane: ✓ (tier table; pinned bytest_tier_table_states_each_floor_once)run, current T2/T3 protections unchanged: ✓ (T2 floor = plan-approval list; showrunner T2 paths declared inPROJECT_CONTEXT.md)check_risk_tiers; 14 mutation cases plus a CLI exit-code test)assertNotInpins for every retired threshold inphase3.5.md,SKILL.mdand README, plus validatorRETIRED_TRIGGER_TOKENS)qa-agent.mdstep 6 names only step-10 evaluator types: ✓ (test_qa_step_6_names_only_step_10_evaluator_types)Focused checks (owner directive; CI Verification Gate owns the rest)
scripts/verify.sh, the full suite and installer suites were not run locally.Coverage-path audit
Router paths (6): New Project, New Feature, Small Change, Hotfix, Architectural Change, Refactoring: each states Phase 3.5 once as
3.5 (per risk tier)(validator-enforced). Tier rows T0-T3 in both documents (validator-enforced for name, value and pinned policy). Referrers of the old trigger:SKILL.mdcore principle, README lines 51/86/90 (updated);CHANGELOG.mdline 52 is a historical entry (left).Caller impact
Documentation and validator only. New
check_risk_tiersruns inmain()ofvalidate_skill.py; no CLI change.PROJECT_CONTEXT.mdgains a## Risk Tierssection; the template gains an optional one. Rollback: revert the PR.🤖 Generated with Claude Code