LearnNewsExamplesServices
Frontmatter
id17701
titleTransfer one relationship-bearing issue as the tracker canary
stateClosed
labels
enhancementaitestingarchitectureagent-os
assigneesneo-gpt-emmy
createdAtAug 24, 2026, 1:38 PM
updatedAtAug 24, 2026, 1:43 PM
githubUrlhttps://github.com/neomjs/neo/issues/17701
authorneo-gpt-emmy
commentsCount2
parentIssue17500
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 24, 2026, 1:43 PM

Transfer one relationship-bearing issue as the tracker canary

Closed Backlog/active-chunk-19 enhancementaitestingarchitectureagent-os
neo-gpt-emmy
neo-gpt-emmy commented on Aug 24, 2026, 1:38 PM

Context

Sub of Epic #17500, implementing leaf 8's live one-ticket tracker canary before bulk conversion.

The labels-first prerequisite is live: neomjs/neo-agent-brain exists, dev is default, and the target carries the complete 42-label Engine taxonomy. GitHub's transfer contract retains comments/assignees, maps labels by name, and redirects the old URL; cross-repository sub-issues and dependencies are supported.

The source Discussion's canary contract is exact: verify redirect + labels + relationship behavior. It records the Engine holding milestone as expected to drop, so this leaf creates no target milestone.

The Problem

Bulk conversion is destructive if transfer semantics are inferred from documentation or a dry-run. The staged population has no relationship-free low-risk mover; a real canary must exercise topology deliberately.

The selected specimen, former neomjs/neo#15160, was OPEN, unassigned, had zero comments/PRs/sub-issues, five target-matching labels, holding milestone Agent OS extraction wave, parent neomjs/neo#15145, four blockedBy edges, and two blocking edges. It had no active A2A claim.

The Architectural Reality

  • ADR 0040 §2.8 requires labels → one transfer canary → bulk.
  • D#17489 names redirect, label, and relationship behavior; the Engine holding milestone drops.
  • GitHub transfer is replacement-node mapping, not node preservation. The canary changed node I_kwDODSospM8AAAABIuEvQQI_kwDOUBzDFM8AAAABN_zDtg while preserving issue semantics through the redirect.
  • GitHub qualifies source-repository references inside a transferred body. Exactly three bare #15145 references became neomjs/neo#15145; this is meaning-preserving, not body corruption.
  • Cross-repository parent and dependency edges remain native graph relationships and must be verified bidirectionally after projection settles.

Agent OS structure-map gate: the mandatory full command was attempted in this session and failed with Cannot create a string longer than 0x1fffffe8 characters. Placement is N/A: no repository file, code path, or directory is created.

The Fix

  1. Capture the complete pre-transfer receipt on this ticket.
  2. Transfer exactly former neomjs/neo#15160 to neomjs/neo-agent-brain.
  3. Record the source-node → destination-node mapping and old URL → destination URL redirect.
  4. Compare title/body semantics, state, author, assignees, comments, labels, milestone, parent, sub-issues, closing PRs, blockers, and blockees.
  5. Verify parent and all dependency counterparts point back to the destination node.
  6. Publish the final receipt here and on Epic #17500; stop after one issue.

Contract Ledger

Target Surface Source of Authority Delivered Behavior Fallback / Edge Case Evidence
Former neomjs/neo#15160 ADR 0040 §2.8 + D#17489 Transfers once to neomjs/neo-agent-brain#3; source/destination node mapping recorded. Command failure leaves source untouched; postcondition red blocks bulk. Pre/post REST + GraphQL receipts.
Original URL GitHub transfer contract https://github.com/neomjs/neo/issues/15160 returns HTTP 302 to the destination. Missing/incorrect redirect is terminal red. HTTP headers.
Body GitHub transfer behavior Semantic body preserved; three source-parent tokens qualified to neomjs/neo#15145. Any other delta is red and reviewed before bulk. Pre/post length/hash + mirror diff.
Labels Target taxonomy + GitHub name mapping All five labels survive exactly by name. Missing/extra label is recorded and repaired before another transfer. Sorted equality.
Native relationships GitHub cross-repository sub-issues/dependencies Parent, four blockers, and two blockees retain the destination node bidirectionally. Projection is stabilized before repair; persistent loss blocks bulk. Both-side GraphQL reads.
Holding milestone D#17489 tracker fold Drops; no target milestone fabricated. Unexpected retention is recorded, not deleted to fit expectation. Pre/post milestone read.

Acceptance Criteria

  • Pre-transfer receipt captures every named source invariant for former neomjs/neo#15160.
  • Exactly one issue transferred to neomjs/neo-agent-brain; no bulk or second-canary mutation occurred.
  • Original Engine URL redirects to neomjs/neo-agent-brain#3; source and destination node IDs are mapped explicitly.
  • Title/body semantics, OPEN state, author, and empty assignee/comment/sub-issue/closing-PR sets remain stable; the only body delta is three source-parent reference qualifications.
  • All five labels survived exactly by name; the Engine holding milestone dropped without target replacement.
  • Parent neomjs/neo#15145, four blockers, and two blockees preserve native relationships bidirectionally across repositories.
  • Complete post-transfer receipt is published on this ticket and Epic #17500.
  • Bulk conversion remains a distinct operator-window action; no automatic transfer-back or second transfer hides the canary behavior.

Out of Scope

Bulk tracker conversion · a second issue · target milestone creation · issue content edits beyond GitHub's automatic source-reference qualification · assignee changes · label taxonomy changes · Project fields · repository shell/PR #2 · code/workflow changes · cut window.

Avoided Traps

  • Choosing a relationship-free canary: no such staged low-risk mover exists, and it would not test the source criterion.
  • Demanding node-ID stability: falsified by the live canary; transfer creates a destination issue node and a redirect-backed mapping.
  • Treating any body hash delta as corruption: falsified by the three automatic, meaning-preserving source-repo qualifications.
  • Creating a target milestone: rejected because D#17489 explicitly expects the Engine holding milestone to drop.
  • Inferring success from CLI exit 0: post-state, redirect, labels, and every relationship direction were read independently.
  • Automatic transfer-back on red: rejected because it adds another number/redirect and can hide the original behavior.
  • Letting one green canary execute bulk: rejected; bulk remains an operator-window action.

Decision Record impact

depends-on ADR 0040 §2.8; no amendment.

ADR successor-risk: adr-aligned — this executes the accepted canary gate and changes no topology/custody decision.

Decision Record

Not needed — ADR 0040 is the authority.

Related

Parent: #17500
Repository scaffold: #17640
Canary destination: https://github.com/neomjs/neo-agent-brain/issues/3
Canary parent: #15145
Source Discussion: https://github.com/orgs/neomjs/discussions/17489
GitHub transfer contract: https://docs.github.com/en/issues/tracking-your-work-with-issues/administering-issues/transferring-an-issue-to-another-repository?tool=cli

Live duplicate gate: latest 20 created-open issues + last 30 all-state A2A messages checked immediately before creation at 2026-08-24T11:36Z; no equivalent ticket/earlier claim. Memory Core/Knowledge Base framings were clear misses; live Epic/Discussion/GitHub state decide.

Origin Session ID: 0dc1379e-5329-4fba-80ca-f6466822f7c9

Retrieval Hint: query_raw_memories("AgentOS tracker transfer canary labels parent redirect")
Retrieval Hint: neomjs/neo#15160 -> neo-agent-brain#3 transfer canary

— Emmy (GPT-5.6 Sol Ultra, Codex)