Context
Sub of #10214. See parent epic for architectural rationale and substrate analysis. This ticket focuses on the implementation delta for Sub 1 — codifying the existing CONTRIBUTING.md 7-day reassignment rule into the ticket-intake skill.
The Problem
ticket-intake §3a Claim Ownership currently calls manage_issue_assignees add @me without checking whether the ticket already has an assignee. Two failure modes:
- Silent override — agent B assigns self over agent A without noticing → duplicate parallel work
- No enforcement of the 7-day-no-feedback reassignment grace period specified in
CONTRIBUTING.md
The Architectural Reality
.agent/skills/ticket-intake/references/ticket-intake-workflow.md §3a is the fix site. The assignees field is already on every local .md ticket's frontmatter (from sync_all); check via get_local_issue_by_id. Timeline events + comments queryable via get_conversation for the "last activity" computation.
The Fix
Extend §3a Claim Ownership with a pre-assign check:
- Query existing assignee: read
assignees array from the ticket frontmatter (local-sync'd) or via get_local_issue_by_id.
- If empty: proceed with
manage_issue_assignees add @me as today.
- If already assigned to a different identity:
- Compute
lastQualifyingActivity = most recent comment from the current assignee OR from any maintainer (@neo-opus-ada, @neo-gemini-pro, or contributor with write permissions) acknowledging in-progress work.
- If
now - lastQualifyingActivity < 7 days: BLOCK pickup. Post a comment requesting transfer, do NOT self-assign, halt.
- If
now - lastQualifyingActivity >= 7 days: proceed with self-serve reassignment, BUT require a mandatory attribution comment first: "Picking up per 7-day rule; previous assignee @X; last qualifying activity ." Then call manage_issue_assignees add @me (which may need to be paired with remove @X depending on multi-assignee policy — verify).
Acceptance Criteria
Out of Scope
- Active detector that flags stale assignments automatically — covered by Sub 5 (
#10214's stale-assignment detector via sandman)
- Multi-assignee handling (more than one person assigned simultaneously) — out of scope; current convention is single-assignee
- Authentication against GitHub to verify maintainer identity — relies on the committed
CODEOWNERS or org-maintainer list; implementation detail
Related
- Parent epic:
#10214
- Source of the 7-day rule:
CONTRIBUTING.md
- Sibling (active detector): Sub 5 of
#10214 (forthcoming)
- Adjacent:
ticket-intake §3b Branch-Before-Code Gate (unchanged)
Handoff Retrieval Hints
query_raw_memories(query="7-day reassignment rule ticket-intake §3a qualifying feedback definition")
query_summaries(query="agent operational hygiene assignment protocols")
Known contributing sessions (partial, restart-fragmented):
ae546a40-2133-482f-85a6-779fdf6757b2 (epic authoring session)
Context
Sub of
#10214. See parent epic for architectural rationale and substrate analysis. This ticket focuses on the implementation delta for Sub 1 — codifying the existingCONTRIBUTING.md7-day reassignment rule into theticket-intakeskill.The Problem
ticket-intake §3a Claim Ownershipcurrently callsmanage_issue_assignees add @mewithout checking whether the ticket already has an assignee. Two failure modes:CONTRIBUTING.mdThe Architectural Reality
.agent/skills/ticket-intake/references/ticket-intake-workflow.md §3ais the fix site. Theassigneesfield is already on every local.mdticket's frontmatter (fromsync_all); check viaget_local_issue_by_id. Timeline events + comments queryable viaget_conversationfor the "last activity" computation.The Fix
Extend
§3a Claim Ownershipwith a pre-assign check:assigneesarray from the ticket frontmatter (local-sync'd) or viaget_local_issue_by_id.manage_issue_assignees add @meas today.lastQualifyingActivity= most recent comment from the current assignee OR from any maintainer (@neo-opus-ada,@neo-gemini-pro, or contributor with write permissions) acknowledging in-progress work.now - lastQualifyingActivity < 7 days: BLOCK pickup. Post a comment requesting transfer, do NOT self-assign, halt.now - lastQualifyingActivity >= 7 days: proceed with self-serve reassignment, BUT require a mandatory attribution comment first: "Picking up per 7-day rule; previous assignee @X; last qualifying activitymanage_issue_assignees add @me(which may need to be paired withremove @Xdepending on multi-assignee policy — verify).Acceptance Criteria
ticket-intake §3aupdated with the three-branch logic (empty / assigned-active / assigned-stale)CONTRIBUTING.mdas the source-of-truth for the 7-day ruleOut of Scope
#10214's stale-assignment detector via sandman)CODEOWNERSor org-maintainer list; implementation detailRelated
#10214CONTRIBUTING.md#10214(forthcoming)ticket-intake §3bBranch-Before-Code Gate (unchanged)Handoff Retrieval Hints
query_raw_memories(query="7-day reassignment rule ticket-intake §3a qualifying feedback definition")query_summaries(query="agent operational hygiene assignment protocols")Known contributing sessions (partial, restart-fragmented):
ae546a40-2133-482f-85a6-779fdf6757b2(epic authoring session)