Option H selects exhaustive resource-family reconciliation as completeness authority. This first GitHub adapter leaf also establishes the shared normalized runner and source-relative actor/trust foundation consumed by later PR and Discussion leaves; it is not a framework-only ticket.
This is one fully closeable PR leaf under Epic #15145. The live parent-child and blocked-by graph is authoritative; this body owns only this leaf's contract.
The Problem
Current issue sync is conditional and snapshot-oriented: child exhaustion depends on root refetch, stable child revision fields are pruned, and absence cannot distinguish deletion from permission loss. Notifications and repository events are accelerators, not complete occurrence sources.
The Architectural Reality
GitHub acquisition stays in ai/services/github-workflow/, matching IssueSyncer.mjs, issueQueries.mjs, and PullRequestHistoryService.mjs. The shared runner is earned inside this issue-family delivery. Actor kind remains independent from security/content trust; automatic normalized batches contain metadata only.
The Agent OS structure map was run on 2026-07-14. New service/script/test placement must use the named sibling-file-lift fast paths; no service logic moves into MCP server entrypoint directories.
The Fix
Add exhaustive active+closed issue enumeration, independently exhausted comments/timelines, stable provider identities, create/edit/close/reopen/delete observations where provider evidence exists, inventory verification, explicit loss markers, source-relative collaborator/trust context, and neutral batch output for Memory Core admission.
Contract Ledger Matrix
Target Surface
Source of Authority
Proposed Behavior
Fallback / Edge Case
Docs
Evidence
Issue census
OQ2 coverage matrix
Exhaust active and closed roots with mutation-safe verification
Provider caps/access loss become degraded coverage
Service JSDoc
Pagination and verification tests
Issue occurrences
GitHub issue/timeline contracts
Stable create/comment/edit/close/reopen/delete identities when evidenced
Snapshot differences become observed_snapshot_change with loss markers
Adapter docs
Revision/delete/absence fixtures
Actor/trust foundation
OQ1/OQ8 STEP_BACK
Provider actor kind separate from tenant/source-relative trust
Unknown actor/trust remains explicit
Trust contract
Collaborator and hostile-content tests
Neutral output
Admission batch v1
Metadata-only deterministic batches
No admission receipt means source cursor does not advance
Runner JSDoc
Canonical digest fixture
Decision Record impact
Depends on ADR 0036, shadow measurement, registration, and neutral admission; aligned with ADR 0035's trust and no-authority boundaries.
Decision Record
Required: ADR 0036. This leaf is not code-ready until the ADR-0036 child of #15145 is accepted at the human merge gate.
Discussion Criteria Mapping
Upstream graduated criterion
This leaf's executable contract
OQ1
Separates user/bot/organization/etc. from owner/peer/repo/external trust.
The community substrate is not a mirror of every GitHub repository notification. It separates:
source occurrences needed to reconstruct supported issue, pull-request/review, and Discussion conversation state; and
attention-eligible community items: externally authored, response-bearing occurrences that may need maintainer attention.
Stars/un-stars, forks, watches, and equivalent popularity telemetry are outside the community-event source families and cannot enter Bird View, counts, wake, or Task claim. Internal/rostered actions may update or resolve the state of an existing external item without minting new community attention. First-time versus trusted-repeat external status affects trust/projection, not basic eligibility. Bot eligibility must be an explicit ADR disposition and cannot be inferred from provider actor kind or trust tier.
Attention eligibility remains zero-authority: it does not assign work, enter LifecycleFrontier, or create a Task. Only the explicit canonical claim transition owns that promotion.
Acceptance Criteria
AC1 — Active and closed issue roots are exhausted with mutation-safe verification.
AC2 — Issue comments and timelines paginate independently to proven exhaustion.
AC3 — Create, close, reopen, comment, edit, and explicit delete facts use provider-backed stable identities.
AC4 — Snapshot-only changes are labeled honestly with actor null and explicit loss markers.
AC5 — Permission loss or inventory absence never asserts deletion without provider evidence.
AC6 — Provider actor kind and source-relative trust are separate fields.
AC7 — Normalized automatic batches contain no title/body/excerpt prose.
AC8 — Cursor/checkpoint advancement occurs only after a durable admission receipt.
AC10 — The shared GitHub foundation emits only ADR-defined issue/PR/Discussion source families; star/un-star, fork, watch, and popularity-event fixtures emit no community item.
AC11 — External resource creation/comment/edit/delete/close/reopen occurrences carry explicit attention eligibility; internal/rostered occurrences may alter resolution state but do not mint new attention.
AC12 — First-time and trusted-repeat external humans share the same basic eligibility; trust changes prose projection, never source-family admission.
Out of Scope
Pull-request reviews, Discussion replies, notifications/webhooks/Actions as authority, Bird View, wake, or a generic cross-provider framework.
Avoided Traps
Do not persist the current root high-water mark as proof of child completeness, infer edits/deletes from diffs, or use the global Neo roster as tenant trust.
GitHub issue exhaustive reconciliation timeline delete permission loss
Discussion 15139 issue coverage matrix
Creation Freshness
Creation duplicate sweep: immediately before filing at 2026-07-14T05:30:33.637Z, checked the latest 20 open issues and last 30 all-state A2A messages. The independent broader audit at 2026-07-14T05:13:00Z covered open and closed issues, pull requests, A2A, ADRs, and code; no equivalent owner or foreign claim existed.
Context
Option H selects exhaustive resource-family reconciliation as completeness authority. This first GitHub adapter leaf also establishes the shared normalized runner and source-relative actor/trust foundation consumed by later PR and Discussion leaves; it is not a framework-only ticket.
This is one fully closeable PR leaf under Epic #15145. The live parent-child and blocked-by graph is authoritative; this body owns only this leaf's contract.
The Problem
Current issue sync is conditional and snapshot-oriented: child exhaustion depends on root refetch, stable child revision fields are pruned, and absence cannot distinguish deletion from permission loss. Notifications and repository events are accelerators, not complete occurrence sources.
The Architectural Reality
GitHub acquisition stays in
ai/services/github-workflow/, matchingIssueSyncer.mjs,issueQueries.mjs, andPullRequestHistoryService.mjs. The shared runner is earned inside this issue-family delivery. Actor kind remains independent from security/content trust; automatic normalized batches contain metadata only.The Agent OS structure map was run on 2026-07-14. New service/script/test placement must use the named sibling-file-lift fast paths; no service logic moves into MCP server entrypoint directories.
The Fix
Add exhaustive active+closed issue enumeration, independently exhausted comments/timelines, stable provider identities, create/edit/close/reopen/delete observations where provider evidence exists, inventory verification, explicit loss markers, source-relative collaborator/trust context, and neutral batch output for Memory Core admission.
Contract Ledger Matrix
Decision Record impact
Depends on ADR 0036, shadow measurement, registration, and neutral admission; aligned with ADR 0035's trust and no-authority boundaries.
Decision Record
Required: ADR 0036. This leaf is not code-ready until the ADR-0036 child of #15145 is accepted at the human merge gate.
Discussion Criteria Mapping
Source authority: Discussion #15139 body at the version-bound graduation anchor plus Grace's STEP_BACK and GRADUATION_APPROVED.
Operator Scope Clarification — 2026-07-14
The community substrate is not a mirror of every GitHub repository notification. It separates:
Stars/un-stars, forks, watches, and equivalent popularity telemetry are outside the community-event source families and cannot enter Bird View, counts, wake, or Task claim. Internal/rostered actions may update or resolve the state of an existing external item without minting new community attention. First-time versus trusted-repeat external status affects trust/projection, not basic eligibility. Bot eligibility must be an explicit ADR disposition and cannot be inferred from provider actor kind or trust tier.
Attention eligibility remains zero-authority: it does not assign work, enter LifecycleFrontier, or create a Task. Only the explicit canonical claim transition owns that promotion.
Acceptance Criteria
AC1 — Active and closed issue roots are exhausted with mutation-safe verification.
AC2 — Issue comments and timelines paginate independently to proven exhaustion.
AC3 — Create, close, reopen, comment, edit, and explicit delete facts use provider-backed stable identities.
AC4 — Snapshot-only changes are labeled honestly with actor null and explicit loss markers.
AC5 — Permission loss or inventory absence never asserts deletion without provider evidence.
AC6 — Provider actor kind and source-relative trust are separate fields.
AC7 — Normalized automatic batches contain no title/body/excerpt prose.
AC8 — Cursor/checkpoint advancement occurs only after a durable admission receipt.
AC9 — Fixtures cover concurrent mutation, repeated cursors, caps, access loss, delete, reopen, and collaborator changes.
AC10 — The shared GitHub foundation emits only ADR-defined issue/PR/Discussion source families; star/un-star, fork, watch, and popularity-event fixtures emit no community item.
AC11 — External resource creation/comment/edit/delete/close/reopen occurrences carry explicit attention eligibility; internal/rostered occurrences may alter resolution state but do not mint new attention.
AC12 — First-time and trusted-repeat external humans share the same basic eligibility; trust changes prose projection, never source-family admission.
Out of Scope
Pull-request reviews, Discussion replies, notifications/webhooks/Actions as authority, Bird View, wake, or a generic cross-provider framework.
Avoided Traps
Do not persist the current root high-water mark as proof of child completeness, infer edits/deletes from diffs, or use the global Neo roster as tenant trust.
Related
IssueSyncer.mjs, #13046, PR #13048Origin Session ID: 837ad74b-c2d2-413d-9aab-b7165a93a82a
Handoff Retrieval Hints
GitHub issue exhaustive reconciliation timeline delete permission lossDiscussion 15139 issue coverage matrixCreation Freshness
Creation duplicate sweep: immediately before filing at 2026-07-14T05:30:33.637Z, checked the latest 20 open issues and last 30 all-state A2A messages. The independent broader audit at 2026-07-14T05:13:00Z covered open and closed issues, pull requests, A2A, ADRs, and code; no equivalent owner or foreign claim existed.