feat: classify already-landed PRs as reconciliation-only (Closes #295) #382

Merged
sysadmin merged 5 commits from feat/issue-295-already-landed-classification into master 2026-07-07 09:37:24 -05:00
Owner

Summary

Closes #295.

Already-landed open PRs were correctly stopped before review/merge, but final reports could still describe them as oldest eligible PR or next eligible PR. This PR adds explicit classification enforcement so landed PRs are reported as reconciliation-only.

Changes

  • reviewer_already_landed_classification.py — new verifier that blocks:
    • oldest/next eligible PR wording on already-landed PRs
    • eligible for review/merge claims
    • Pinned reviewed head without validation proof (requires Candidate head SHA)
    • wrong Eligibility class (must be ALREADY_LANDED_RECONCILE_REQUIRED)
    • missing queue-blocked / reconciliation wording when a landed PR is selected
  • review_proofs.py — wire verifier into build_final_report
  • final_report_validator.py — extend eligible-review regex to catch oldest/next eligible PR
  • Tests in tests/test_reviewer_already_landed_classification.py

Validation

pytest tests/test_reviewer_already_landed_classification.py \
  tests/test_final_report_validator.py::TestReviewPrRules::test_already_landed_oldest_eligible_pr_blocks \
  tests/test_llm_workflow_split.py::test_already_landed_classification_verifier_exported -q

11 passed

## Summary Closes #295. Already-landed open PRs were correctly stopped before review/merge, but final reports could still describe them as `oldest eligible PR` or `next eligible PR`. This PR adds explicit classification enforcement so landed PRs are reported as reconciliation-only. ## Changes - `reviewer_already_landed_classification.py` — new verifier that blocks: - `oldest/next eligible PR` wording on already-landed PRs - `eligible for review/merge` claims - `Pinned reviewed head` without validation proof (requires `Candidate head SHA`) - wrong `Eligibility class` (must be `ALREADY_LANDED_RECONCILE_REQUIRED`) - missing queue-blocked / reconciliation wording when a landed PR is selected - `review_proofs.py` — wire verifier into `build_final_report` - `final_report_validator.py` — extend eligible-review regex to catch `oldest/next eligible PR` - Tests in `tests/test_reviewer_already_landed_classification.py` ## Validation ``` pytest tests/test_reviewer_already_landed_classification.py \ tests/test_final_report_validator.py::TestReviewPrRules::test_already_landed_oldest_eligible_pr_blocks \ tests/test_llm_workflow_split.py::test_already_landed_classification_verifier_exported -q ``` 11 passed
jcwalker3 added 1 commit 2026-07-07 08:24:22 -05:00
Add reviewer_already_landed_classification verifier to block oldest/next
eligible PR wording, review-eligible claims, and pinned reviewed head
usage when a PR is already landed. Wire the check into build_final_report
and tighten final_report_validator regex coverage.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
jcwalker3 added 1 commit 2026-07-07 08:31:58 -05:00
jcwalker3 added 1 commit 2026-07-07 08:32:40 -05:00
jcwalker3 added 1 commit 2026-07-07 09:19:48 -05:00
# Conflicts:
#	tests/test_llm_workflow_split.py
jcwalker3 added 1 commit 2026-07-07 09:20:56 -05:00
Merge prgs/master; keep already-landed oldest-eligible-PR test from
#295 alongside master already-landed gate and target-branch freshness tests.
sysadmin approved these changes 2026-07-07 09:37:12 -05:00
sysadmin left a comment
Owner

Manual review of changed files and test suite validation passed. The new verifier in reviewer_already_landed_classification.py correctly enforces that already-landed PRs are labeled reconciliation-only and do not claim to be eligible. All tests pass cleanly. Approved.

Manual review of changed files and test suite validation passed. The new verifier in reviewer_already_landed_classification.py correctly enforces that already-landed PRs are labeled reconciliation-only and do not claim to be eligible. All tests pass cleanly. Approved.
sysadmin merged commit b11160f236 into master 2026-07-07 09:37:24 -05:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Scaled-Tech-Consulting/Gitea-Tools#382