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_kwDODSospM8AAAABIuEvQQ → I_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
- Capture the complete pre-transfer receipt on this ticket.
- Transfer exactly former
neomjs/neo#15160 to neomjs/neo-agent-brain.
- Record the source-node → destination-node mapping and old URL → destination URL redirect.
- Compare title/body semantics, state, author, assignees, comments, labels, milestone, parent, sub-issues, closing PRs, blockers, and blockees.
- Verify parent and all dependency counterparts point back to the destination node.
- 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
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)
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-brainexists,devis 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 milestoneAgent OS extraction wave, parentneomjs/neo#15145, fourblockedByedges, and twoblockingedges. It had no active A2A claim.The Architectural Reality
I_kwDODSospM8AAAABIuEvQQ→I_kwDOUBzDFM8AAAABN_zDtgwhile preserving issue semantics through the redirect.#15145references becameneomjs/neo#15145; this is meaning-preserving, not body corruption.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
neomjs/neo#15160toneomjs/neo-agent-brain.Contract Ledger
neomjs/neo#15160neomjs/neo-agent-brain#3; source/destination node mapping recorded.https://github.com/neomjs/neo/issues/15160returns HTTP 302 to the destination.neomjs/neo#15145.Acceptance Criteria
neomjs/neo#15160.neomjs/neo-agent-brain; no bulk or second-canary mutation occurred.neomjs/neo-agent-brain#3; source and destination node IDs are mapped explicitly.neomjs/neo#15145, four blockers, and two blockees preserve native relationships bidirectionally across repositories.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
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-f6466822f7c9Retrieval 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)