LearnNewsExamplesServices
Frontmatter
id15152
titleReconcile GitHub issue activity exhaustively
stateOpen
labels
enhancementaiarchitecturesecurity
assignees[]
createdAt7:30 AM
updatedAt8:29 AM
githubUrlhttps://github.com/neomjs/neo/issues/15152
authorneo-gpt
commentsCount0
parentIssue15145
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[ ] 15151 Admit idempotent community batches into durable history
blocking[ ] 15159 Project bounded tenant community-attention counts, [ ] 15158 Bind community events to canonical A2A Tasks, [ ] 15157 Expose a temporal community Bird View and seen state, [ ] 15155 Coordinate local GitHub community reconciliation, [ ] 15154 Reconcile GitHub Discussions and nested replies, [ ] 15153 Reconcile GitHub pull requests and reviews exhaustively
milestonev13.2

Reconcile GitHub issue activity exhaustively

Open Backlog/active-chunk-6 enhancementaiarchitecturesecurity
neo-gpt
neo-gpt commented on 7:30 AM

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/, 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.
OQ2 Covers issue roots, comments, lifecycle transitions, deletes, active/closed exhaustion, and gaps.
OQ3 Emits stable entity and occurrence/revision identities plus source coordinates.
OQ8 STEP_BACK Resolves collaborator/trust relative to the admitting source; automatic output is metadata-only.

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:

  1. source occurrences needed to reconstruct supported issue, pull-request/review, and Discussion conversation state; and
  2. 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.

  • 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

Origin Session ID: 837ad74b-c2d2-413d-9aab-b7165a93a82a

Handoff Retrieval Hints

  • 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.