Context
Operator review of stale backlog risks surfaced a specific failure mode: an old ticket can remain open after newer architecture, newer tickets, or merged PRs have superseded it. If an agent implements the stale ticket literally, a PR reviewer can still approve the work because the patch matches the unchallenged source ticket.
Today's empirical anchor was the #11187 vs #11120/#11122 cleanup: #11187 superseded the older chunking direction, while #11120/#11122 remained open until manually marked dropped/closed. That is not just a backlog-hygiene issue; it is a review-safety issue.
#10758 already covers the intake-side fix: add age-aware successor-risk audit to ticket-intake. This ticket covers the reviewer-side companion. Reviewers need a small Cycle-1 check that asks whether the linked source ticket is still current before judging the implementation as "matches spec".
Duplicate / Adjacency Sweep
Verified before filing:
ticket-intake-workflow.md already contains Ticket Reality Classification and states that only valid-as-written proceeds to branch/code work.
- #10758 is open and specifically scoped to
ticket-intake; its Out of Scope explicitly excludes broad sweeps and keeps the work intake-side.
- #11084 / PR #11085 added
pr-review Cycle-1 Premise Pre-Flight and Drop+Supersede framing, but its trigger list is general structural invalidity, not an explicit source-ticket currency audit for old/stale/no-auto-close tickets.
- Grep over
resources/content/issues, resources/content/issue-archive, resources/content/discussions, and .agents/skills found #10758 and #11084 as adjacent work, but no exact review-side source-ticket currency ticket.
- GitHub issue search for
source-ticket currency returned no results; successor-risk returned #10758 only.
The Problem
ticket-intake is the correct first guard, but it is not sufficient as the only guard:
- A PR can exist even if the author skipped intake, executed intake from stale context, or accepted a weak
valid-as-written verdict.
- Reviewers often start from the PR diff + ticket body. If the ticket body is stale but internally coherent, implementation can look correct.
- Existing
pr-review §9.0 can catch "better existing substrate" or "premise-invalid" cases, but it does not force reviewers to inspect the source ticket's age/successor-risk state before approving a PR that resolves an old ticket.
- The dangerous outcome is a high-quality implementation of obsolete architecture: green CI, matching ACs, and still net-negative substrate.
The Architectural Reality
.agents/skills/ticket-intake/references/ticket-intake-workflow.md owns the pre-execution ticket reality gate.
.agents/skills/pr-review/references/pr-review-guide.md owns PR review flow and §9.0 Cycle-1 Premise Pre-Flight.
.agents/skills/pr-review/audits/cycle-1-premise-preflight.md owns the deeper wrong-premise audit payload.
.agents/skills/pr-review/assets/pr-review-template.md carries the short Cycle-1 reminder reviewers see while drafting comments.
.agents/skills/create-skill/references/skill-authoring-guide.md requires Map-vs-Atlas discipline: keep router/template additions short, move detailed audit logic to the payload.
- #10758 is the intake-side sibling; this ticket should not duplicate it.
The Fix
Add a compact source-ticket currency check to pr-review, likely by extending the existing Cycle-1 Premise Pre-Flight payload rather than creating a new skill.
Suggested shape:
- In
pr-review-guide.md §9.0, add one sentence that source tickets older than the stale workflow threshold, carrying stale, carrying no auto close, or visibly superseded by newer work trigger the premise pre-flight.
- In
audits/cycle-1-premise-preflight.md, add a Source-ticket stale/currency-risk trigger with the falsifying questions:
- Is the linked ticket older than the workflow stale threshold or carrying stale/no-auto-close state?
- Did the reviewer check newer tickets, newer PRs, merged PRs without close keywords, current source/docs/tests, and recent discussions before accepting the ticket as review authority?
- Does a newer epic or architecture decision supersede this ticket even if the ticket remains open?
- In
pr-review-template.md, keep only a short reminder so the always-loaded review template does not become an atlas.
When the check fails, the review should use the existing Drop+Supersede / Request Changes shape: one Required Action to close/restart or refresh the source ticket, not a list of implementation tweaks.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
pr-review Cycle-1 premise pre-flight |
#11084 plus this ticket |
Reviewers must test source-ticket currency before approving old/stale/no-auto-close ticket PRs |
If currency cannot be verified, request changes for ticket refresh instead of approving implementation |
pr-review-guide.md, premise audit payload |
Markdown grep + review-template check |
| Source-ticket authority |
#10758 plus live issue/PR/source state |
Ticket body is review input, not unquestioned authority |
If ticket contradicts current architecture, Drop+Supersede or request source-ticket update |
ticket-intake-workflow.md, pr-review audit |
Simulated review case in docs or test fixture if available |
| Skill payload placement |
create-skill Map-vs-Atlas guidance |
Short trigger in map/template, detailed questions in audit payload |
Reject bloating top-level SKILL/router files |
create-skill guide |
Diff keeps router/template compact |
Acceptance Criteria
Out of Scope
- Implementing #10758's intake-side Age / Successor-Risk Audit.
- Mass backlog sweeping or auto-closing old issues.
- Changing stale bot timing or label behavior.
- Creating a new skill.
- Rewriting
ticket-triage.
Avoided Traps
- Do not make age itself a rejection verdict. Age raises proof burden.
- Do not bloat
pr-review/SKILL.md; use existing guide and audit payload.
- Do not force full archaeology on every PR. Trigger on old/stale/no-auto-close/superseded source-ticket risk.
- Do not approve solely because the PR matches an unchallenged ticket body.
- Do not duplicate #10758; this is a reviewer-side safety net for cases where intake did not catch the stale premise.
Related
- #10758 — intake-side age-aware successor-risk audit.
- #11084 / PR #11085 — Cycle-1 premise pre-flight and Drop+Supersede framing.
- #11187 — newer archive architecture epic that superseded older #11120/#11122 direction.
- #10555 — Ticket Reality Classification.
Handoff Retrieval Hints
ticket-intake age successor-risk pr-review stale ticket source authority
pr-review Cycle-1 premise pre-flight stale source ticket currency
#11187 #11120 #11122 superseded backlog stale ticket review acceptance risk
Context
Operator review of stale backlog risks surfaced a specific failure mode: an old ticket can remain open after newer architecture, newer tickets, or merged PRs have superseded it. If an agent implements the stale ticket literally, a PR reviewer can still approve the work because the patch matches the unchallenged source ticket.
Today's empirical anchor was the #11187 vs #11120/#11122 cleanup: #11187 superseded the older chunking direction, while #11120/#11122 remained open until manually marked dropped/closed. That is not just a backlog-hygiene issue; it is a review-safety issue.
#10758 already covers the intake-side fix: add age-aware successor-risk audit to
ticket-intake. This ticket covers the reviewer-side companion. Reviewers need a small Cycle-1 check that asks whether the linked source ticket is still current before judging the implementation as "matches spec".Duplicate / Adjacency Sweep
Verified before filing:
ticket-intake-workflow.mdalready contains Ticket Reality Classification and states that onlyvalid-as-writtenproceeds to branch/code work.ticket-intake; its Out of Scope explicitly excludes broad sweeps and keeps the work intake-side.pr-reviewCycle-1 Premise Pre-Flight and Drop+Supersede framing, but its trigger list is general structural invalidity, not an explicit source-ticket currency audit for old/stale/no-auto-close tickets.resources/content/issues,resources/content/issue-archive,resources/content/discussions, and.agents/skillsfound #10758 and #11084 as adjacent work, but no exact review-sidesource-ticket currencyticket.source-ticket currencyreturned no results;successor-riskreturned #10758 only.The Problem
ticket-intakeis the correct first guard, but it is not sufficient as the only guard:valid-as-writtenverdict.pr-review§9.0 can catch "better existing substrate" or "premise-invalid" cases, but it does not force reviewers to inspect the source ticket's age/successor-risk state before approving a PR that resolves an old ticket.The Architectural Reality
.agents/skills/ticket-intake/references/ticket-intake-workflow.mdowns the pre-execution ticket reality gate..agents/skills/pr-review/references/pr-review-guide.mdowns PR review flow and §9.0 Cycle-1 Premise Pre-Flight..agents/skills/pr-review/audits/cycle-1-premise-preflight.mdowns the deeper wrong-premise audit payload..agents/skills/pr-review/assets/pr-review-template.mdcarries the short Cycle-1 reminder reviewers see while drafting comments..agents/skills/create-skill/references/skill-authoring-guide.mdrequires Map-vs-Atlas discipline: keep router/template additions short, move detailed audit logic to the payload.The Fix
Add a compact source-ticket currency check to
pr-review, likely by extending the existing Cycle-1 Premise Pre-Flight payload rather than creating a new skill.Suggested shape:
pr-review-guide.md§9.0, add one sentence that source tickets older than the stale workflow threshold, carryingstale, carryingno auto close, or visibly superseded by newer work trigger the premise pre-flight.audits/cycle-1-premise-preflight.md, add aSource-ticket stale/currency-risktrigger with the falsifying questions:pr-review-template.md, keep only a short reminder so the always-loaded review template does not become an atlas.When the check fails, the review should use the existing Drop+Supersede / Request Changes shape: one Required Action to close/restart or refresh the source ticket, not a list of implementation tweaks.
Contract Ledger Matrix
pr-reviewCycle-1 premise pre-flightpr-review-guide.md, premise audit payloadticket-intake-workflow.md,pr-reviewauditcreate-skillMap-vs-Atlas guidancecreate-skillguideAcceptance Criteria
pr-review-guide.md§9.0 names source-ticket currency risk as a Cycle-1 Premise Pre-Flight trigger for older/stale/no-auto-close/superseded tickets.cycle-1-premise-preflight.mdadds aSource-ticket stale/currency-risktrigger with concrete falsifying questions.pr-review-template.mdadds only a compact reminder, preserving Map-vs-Atlas placement.Out of Scope
ticket-triage.Avoided Traps
pr-review/SKILL.md; use existing guide and audit payload.Related
Handoff Retrieval Hints
ticket-intake age successor-risk pr-review stale ticket source authoritypr-review Cycle-1 premise pre-flight stale source ticket currency#11187 #11120 #11122 superseded backlog stale ticket review acceptance risk