LearnNewsExamplesServices
Frontmatter
id15154
titleReconcile GitHub Discussions and nested replies
stateOpen
labels
enhancementaiarchitecturesecurity
assignees[]
createdAt7:30 AM
updatedAt8:29 AM
githubUrlhttps://github.com/neomjs/neo/issues/15154
authorneo-gpt
commentsCount0
parentIssue15145
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[ ] 15152 Reconcile GitHub issue activity exhaustively
blocking[ ] 15159 Project bounded tenant community-attention counts, [ ] 15157 Expose a temporal community Bird View and seen state, [ ] 15155 Coordinate local GitHub community reconciliation
milestonev13.2

Reconcile GitHub Discussions and nested replies

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

Context

Discussion #15139's live falsifier was a new nested reply inside an already-closed Discussion. The Discussion family therefore needs its own exhaustive leaf, built on the shared GitHub reconciliation runner.

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 sync bounds comments/replies, omits child ids/revision timestamps, and can miss child edits because the root watermark does not always advance. Root absence also conflates deletion with permission loss.

The Architectural Reality

The work belongs beside DiscussionSyncer.mjs and discussionQueries.mjs in GitHub Workflow. GraphQL child connections have independent cursors; root and child revision/watermark semantics must stay separate.

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

Exhaust visible active/closed Discussion roots, comments, and nested replies with independent pagination and verification; emit stable creation/revision/delete evidence where available; preserve permission-loss/unknown absence and explicit coverage gaps in neutral metadata-only batches.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Docs Evidence
Discussion census OQ2 matrix Exhaust visible roots without relying on pruned root HWM Access/cap gaps are explicit Service JSDoc Outer-page tests
Nested children Provider child connections Independent comment/reply cursors and stable revision identity Root watermark cannot close child coverage Query docs 50+ child/reply fixtures
Deletion/absence OQ2 consequence 4 Explicit delete tombstone only with provider evidence Otherwise deleted/inaccessible/unknown Adapter docs Permission-loss/delete tests

Decision Record impact

Depends on ADR 0036, neutral admission, and the GitHub issue reconciliation foundation.

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
Live falsifier/OQ2 Finds nested replies and edits on active or closed Discussions.
OQ3 Keeps root, child entity, child revision, batch, and admitted order distinct.
OQ8 Uses source-relative trust and metadata-only automatic output.

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 Discussion roots are exhausted with explicit coverage.

  • AC2 — Comments and replies paginate independently with progress and mutation checks.

  • AC3 — Child edits are detected from child revision evidence, not inferred from root updatedAt.

  • AC4 — Stable child ids and revision timestamps survive normalization.

  • AC5 — Explicit delete evidence yields metadata-only tombstones; absence remains uncertain.

  • AC6 — Permission loss and incomplete pagination degrade coverage without deleting history.

  • AC7 — No title/body/excerpt enters automatic batches.

  • AC8 — Cursor advances only after durable admission receipt.

  • AC9 — Fixtures reproduce the closed-Discussion nested-reply falsifier and later child edit.

  • AC10 — Discussion output inherits the shared eligibility contract: external comments/replies and their evidenced mutations are eligible, while internal/rostered context cannot mint new attention.

  • AC11 — A closed Discussion receiving a new external reply becomes attention-eligible even when unrelated repository popularity telemetry is present.

Out of Scope

Issue/PR reconciliation, live-query-only explorer, generic webhook receiver, or prose persistence.

Avoided Traps

Do not persist a root watermark as child completeness, use fixed 50x20 bounds, or infer deletion from disappearance.

Related

  • Parent: #15145
  • Source: Discussion #15139 live falsifier/OQ2/OQ3/OQ8
  • Precedent: DiscussionSyncer.mjs

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

Handoff Retrieval Hints

  • GitHub Discussion nested reply edit root watermark exhaustive
  • Discussion 15139 closed discussion reply falsifier

Creation Freshness

Creation duplicate sweep: immediately before filing at 2026-07-14T05:30:41.209Z, 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.