Context
Today's session (2026-04-22) surfaced three operational-hygiene gaps that aren't yet codified:
- Assignment discipline —
ticket-intake skill blocks on branch-creation but not on existing-assignee collision. The repo's CONTRIBUTING.md specifies a 7-day no-feedback re-assignment rule, but no skill enforces it.
- Label authority — maintainers (currently
@neo-opus-ada + @neo-gemini-pro) can set labels via manage_issue_labels; non-maintainer contributors / agents cannot. The social contract for what happens when an unlabeled contributor ticket arrives is not codified.
- Inbound-from-external silence — agents have GitHub accounts and receive @mention notifications, but no skill or tool surfaces inbound-from-external-world signal.
#10139's memory-core mailbox covers internal A2A; GitHub @mentions cover the external channel. No bridge exists.
These compound under rapid merge tempo (see #10208, #10212 for the parallel "velocity-sensitive hygiene conventions" pattern).
The Problem
Five concrete operational pain points:
- An agent could grab a ticket assigned to another agent without noticing (ticket-intake doesn't check existing assignment).
- The 7-day reassignment grace period exists in
CONTRIBUTING.md but has no enforcement substrate in the agent skills.
- A contributor files a ticket without labels — no agent-facing workflow covers the maintainer-side triage (apply labels, confirm scope, assign if appropriate).
- A human or external agent @mentions an agent in a PR/ticket comment — the mention lands in GH's notification feed, but the agent has no consistent primitive to discover it.
- Cross-family review mandate (
#10208) currently relies on reviewer self-initiative — no formal review-request invitation mechanism leveraging GitHub's native requested_reviewers API.
The Architectural Reality
Enforcement sites + primitive candidates:
.agent/skills/ticket-intake/references/ticket-intake-workflow.md §3a — Claim Ownership step; extend to block on existing assignee + formalize 7-day exception.
- New
ticket-triage skill OR ticket-intake extension — maintainer-side workflow for labeling unlabeled contributor tickets.
- GitHub
requested_reviewers API — extend manage_issue_assignees (or sibling manage_pr_reviewers) to cover PR reviewer invitations.
github-workflow MCP server healthcheck — enrich response with notificationPreview: {unreadMentionsCount, latestMention} mirroring memory-core's existing mailboxPreview shape. Passive signal on every boot-time healthcheck; zero new polling discipline.
- Noise discipline — GitHub notifications fire on any subscription activity (authoring, commenting, cross-ref, merging). Default filter MUST be
reason=mention (authoritative "someone wants you"); assign + review_requested are opt-in expansions. Excluded by default: author, comment, subscribed, manual.
- Sandman / Dream Pipeline substrate (tied to
#10030) — active stale-assignment detector could surface via the same pipeline that builds sandman_handoff.md.
The Fix
Five sub-tickets, each independently pick-uppable:
Sub 1: Ticket-intake 7-day assignment rule
- Extend
ticket-intake §3a Claim Ownership to check existing assignees field before manage_issue_assignees add @me.
- If already assigned to different identity: block pickup; require comment-request OR 7-day-no-feedback reassignment.
- "Feedback" definition: any comment from the current assignee OR any maintainer comment acknowledging in-progress work. Random observer comments do NOT reset the clock.
- Reassignment mechanism: self-serve after 7 days, with mandatory attribution comment: "Picking up per 7-day rule; previous assignee @X; last activity ."
- Verifiable via:
get_conversation / get_local_issue_by_id — compute now - lastAssigneeOrMaintainerActivity.
Sub 2: Maintainer vs contributor label workflow
- Codify the social contract for unlabeled contributor-authored tickets.
- Natural substrate: either extend
ticket-intake with a "triage-on-intake" branch OR new ticket-triage skill (maintainer-facing).
- Contributor can: file ticket, request assignment via comment, see what's available.
- Maintainer responsibility: apply
ai-or-equivalent-provenance label, primary label (bug/enhancement/epic), secondary labels, assign if appropriate.
Sub 3: GitHub PR reviewer-request MCP tool
- New or extended MCP tool surface for
gh pr edit --add-reviewer <login> (GitHub's requested_reviewers API).
- Integration with
pull-request §6.1 cross-family mandate: if no cross-family reviewer has engaged ~2 hours after open, author formally requests review from the opposite family.
- Review-request is the invitation mechanism; cross-family mandate is the validation mechanism. They pair, don't overlap.
Sub 4: GitHub notifications via healthcheck enrichment
- Extend
github-workflow MCP server's healthcheck response with:
{
"notificationPreview": {
"unreadMentionsCount": 3,
"latestMention": { "repo": "...", "url": "...", "title": "...", "mentionedBy": "..." }
}
}
- Mirrors memory-core's existing
mailboxPreview pattern — passive signal surfaced on every boot-time call, no new polling discipline required.
- Default filter:
reason=mention only. GitHub fires notifications on any subscription-triggering activity (authoring, commenting, cross-ref, merging) — raw polling is high-noise. The mention filter is authoritative "someone specifically tagged this agent."
- Opt-in expansion:
assign (someone assigned the agent) and review_requested (someone wants the agent's review) can be added as a second tier.
- Excluded:
author, comment, subscribed, manual — all high-noise reasons.
Sub 5: Active stale-assignment detector via sandman
- Once
#10030 (Dream Pipeline) substrate is operational, DreamService includes a detector pass:
- Scan open issues; for each with an assignee and no qualifying activity in ≥7 days, flag in the
sandman_handoff.md output + optionally auto-apply status: needs-reassignment label.
- Pairs with Sub 1: Sub 1 is passive (picks up on request); this is active (surfaces opportunities).
- Can also include "5 most recent open PRs" listing as originally proposed — same substrate, adjacent output.
Acceptance Criteria
Out of Scope
- Event-driven webhook substrate — polling via healthcheck is phase 1; webhooks require hosting and are follow-up
- Rate-limiting agent-initiated ticket creation — YAGNI until empirical trigger observed; was considered and deferred in the brainstorm
- Reviewer-pool rotation logic — YAGNI until third agent family added (currently Claude ↔ Gemini is the binary)
- Extending to non-Claude / non-Gemini agent families — architecture already supports it; codification waits for adoption
- Memory Core ↔ GitHub notification bridge (write-path from GH mention → memory-core mailbox INBOX entry) — valuable follow-up but separate surface; file as sibling ticket once Sub 4 lands
Avoided Traps
- Standalone polling convention for notifications — rejected. Healthcheck enrichment mirrors the memory-core
mailboxPreview pattern, no new discipline needed.
- Raw GitHub notifications without filter — rejected. High noise (every merge, comment, cross-ref fires).
reason=mention is the authoritative default.
- Treat review-request as substitute for cross-family mandate — rejected. Invitation vs validation are distinct mechanisms that PAIR; neither replaces the other.
- Active auto-reassignment without attribution — rejected. Sub 1's reassignment protocol requires a comment trail for audit.
- Maintainer gate-keeping on contributor pickup — rejected. 7-day rule is self-serve; maintainer oversight is via post-hoc review, not pre-hoc approval. Lowers friction for contributors while preserving accountability via the attribution-comment requirement.
- Bundling rate-limiting into this epic — deferred per YAGNI; empirical trigger hasn't surfaced.
Related
#10208 — cross-family PR review mandate (merged). Sub 3 (review-request) is the invitation mechanism that complements this mandate's validation requirement.
#10212 — pre-PR rebase mandate (in flight PR #10213). Sibling in the "velocity-sensitive hygiene conventions" cluster.
#10139 — Mailbox A2A primitive epic. Sub 4 covers the external-inbound channel complementary to this internal-inbound one.
#10030 — Dream Pipeline / sandman substrate. Sub 5 rides on this once operational.
#10109 — PR comment hygiene (adjacent scope in PR-workflow space).
CONTRIBUTING.md — source of the 7-day-reassignment rule this epic codifies into agent skills.
Handoff Retrieval Hints
query_raw_memories(query="agent operational hygiene assignment labels inbound channels epic")
query_raw_memories(query="GitHub notifications healthcheck enrichment reason mention filter")
query_raw_memories(query="7-day reassignment rule ticket-intake §3a")
query_summaries(query="swarm operational discipline sub-ticket breakdown")
- Commit-range anchor: PR
#10211 + #10213 (sibling conventions in the same hygiene cluster) + #10208 / #10212 (parent tickets)
Known contributing sessions (partial, restart-fragmented):
ae546a40-2133-482f-85a6-779fdf6757b2 (brainstorm + authoring session; contains the empirical rationale + Tobi's noise/healthcheck-enrichment corrections)
Context
Today's session (2026-04-22) surfaced three operational-hygiene gaps that aren't yet codified:
ticket-intakeskill blocks on branch-creation but not on existing-assignee collision. The repo'sCONTRIBUTING.mdspecifies a 7-day no-feedback re-assignment rule, but no skill enforces it.@neo-opus-ada+@neo-gemini-pro) can set labels viamanage_issue_labels; non-maintainer contributors / agents cannot. The social contract for what happens when an unlabeled contributor ticket arrives is not codified.#10139's memory-core mailbox covers internal A2A; GitHub @mentions cover the external channel. No bridge exists.These compound under rapid merge tempo (see
#10208,#10212for the parallel "velocity-sensitive hygiene conventions" pattern).The Problem
Five concrete operational pain points:
CONTRIBUTING.mdbut has no enforcement substrate in the agent skills.#10208) currently relies on reviewer self-initiative — no formal review-request invitation mechanism leveraging GitHub's nativerequested_reviewersAPI.The Architectural Reality
Enforcement sites + primitive candidates:
.agent/skills/ticket-intake/references/ticket-intake-workflow.md §3a— Claim Ownership step; extend to block on existing assignee + formalize 7-day exception.ticket-triageskill ORticket-intakeextension — maintainer-side workflow for labeling unlabeled contributor tickets.requested_reviewersAPI — extendmanage_issue_assignees(or siblingmanage_pr_reviewers) to cover PR reviewer invitations.github-workflowMCP serverhealthcheck— enrich response withnotificationPreview: {unreadMentionsCount, latestMention}mirroring memory-core's existingmailboxPreviewshape. Passive signal on every boot-time healthcheck; zero new polling discipline.reason=mention(authoritative "someone wants you");assign+review_requestedare opt-in expansions. Excluded by default:author,comment,subscribed,manual.#10030) — active stale-assignment detector could surface via the same pipeline that buildssandman_handoff.md.The Fix
Five sub-tickets, each independently pick-uppable:
Sub 1: Ticket-intake 7-day assignment rule
ticket-intake §3a Claim Ownershipto check existingassigneesfield beforemanage_issue_assignees add @me.get_conversation/get_local_issue_by_id— computenow - lastAssigneeOrMaintainerActivity.Sub 2: Maintainer vs contributor label workflow
ticket-intakewith a "triage-on-intake" branch OR newticket-triageskill (maintainer-facing).ai-or-equivalent-provenance label, primary label (bug/enhancement/epic), secondary labels, assign if appropriate.Sub 3: GitHub PR reviewer-request MCP tool
gh pr edit --add-reviewer <login>(GitHub'srequested_reviewersAPI).pull-request §6.1cross-family mandate: if no cross-family reviewer has engaged ~2 hours after open, author formally requests review from the opposite family.Sub 4: GitHub notifications via healthcheck enrichment
github-workflowMCP server'shealthcheckresponse with:{ "notificationPreview": { "unreadMentionsCount": 3, "latestMention": { "repo": "...", "url": "...", "title": "...", "mentionedBy": "..." } } }mailboxPreviewpattern — passive signal surfaced on every boot-time call, no new polling discipline required.reason=mentiononly. GitHub fires notifications on any subscription-triggering activity (authoring, commenting, cross-ref, merging) — raw polling is high-noise. Thementionfilter is authoritative "someone specifically tagged this agent."assign(someone assigned the agent) andreview_requested(someone wants the agent's review) can be added as a second tier.author,comment,subscribed,manual— all high-noise reasons.Sub 5: Active stale-assignment detector via sandman
#10030(Dream Pipeline) substrate is operational, DreamService includes a detector pass:sandman_handoff.mdoutput + optionally auto-applystatus: needs-reassignmentlabel.Acceptance Criteria
ticket-intake §3acodifies the existing-assignee check + 7-day rule + comment-request protocolticket-triageskill (orticket-intakeextension) codifies the maintainer-triage workflow for unlabeled contributor ticketspull-request §6.1cross-references it as the invitation mechanismgithub-workflowhealthcheck enriched withnotificationPreviewusingreason=mentiondefault filter#10030) surfaces stale-assignment candidates + recent open PRs insandman_handoff.mdOut of Scope
Avoided Traps
mailboxPreviewpattern, no new discipline needed.reason=mentionis the authoritative default.Related
#10208— cross-family PR review mandate (merged). Sub 3 (review-request) is the invitation mechanism that complements this mandate's validation requirement.#10212— pre-PR rebase mandate (in flight PR#10213). Sibling in the "velocity-sensitive hygiene conventions" cluster.#10139— Mailbox A2A primitive epic. Sub 4 covers the external-inbound channel complementary to this internal-inbound one.#10030— Dream Pipeline / sandman substrate. Sub 5 rides on this once operational.#10109— PR comment hygiene (adjacent scope in PR-workflow space).CONTRIBUTING.md— source of the 7-day-reassignment rule this epic codifies into agent skills.Handoff Retrieval Hints
query_raw_memories(query="agent operational hygiene assignment labels inbound channels epic")query_raw_memories(query="GitHub notifications healthcheck enrichment reason mention filter")query_raw_memories(query="7-day reassignment rule ticket-intake §3a")query_summaries(query="swarm operational discipline sub-ticket breakdown")#10211+#10213(sibling conventions in the same hygiene cluster) +#10208/#10212(parent tickets)Known contributing sessions (partial, restart-fragmented):
ae546a40-2133-482f-85a6-779fdf6757b2(brainstorm + authoring session; contains the empirical rationale + Tobi's noise/healthcheck-enrichment corrections)