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:
- 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
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.
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.mjsanddiscussionQueries.mjsin 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
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
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 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
DiscussionSyncer.mjsOrigin Session ID: 837ad74b-c2d2-413d-9aab-b7165a93a82a
Handoff Retrieval Hints
GitHub Discussion nested reply edit root watermark exhaustiveDiscussion 15139 closed discussion reply falsifierCreation 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.