Frontmatter
| id | 10087 |
| title | [enhancement] ORPHAN_CONCEPT signal — distinct display channel in sandman_handoff.md |
| state | Closed |
| labels | enhancementai |
| assignees | tobiu |
| createdAt | Apr 19, 2026, 12:31 PM |
| updatedAt | Apr 19, 2026, 6:19 PM |
| githubUrl | https://github.com/neomjs/neo/issues/10087 |
| author | tobiu |
| commentsCount | 0 |
| parentIssue | 10030 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Apr 19, 2026, 5:12 PM |
[enhancement] ORPHAN_CONCEPT signal — distinct display channel in sandman_handoff.md
tobiu added parent issue #10030 on Apr 19, 2026, 12:32 PM
tobiu cross-referenced by #10030 on Apr 19, 2026, 12:33 PM
tobiu cross-referenced by PR #10100 on Apr 19, 2026, 4:17 PM
tobiu cross-referenced by #10085 on Apr 19, 2026, 4:19 PM
tobiu assigned to @tobiu on Apr 19, 2026, 4:47 PM
tobiu cross-referenced by PR #10101 on Apr 19, 2026, 4:59 PM
tobiu closed this issue on Apr 19, 2026, 5:12 PM
tobiu cross-referenced by PR #10102 on Apr 19, 2026, 5:20 PM
tobiu cross-referenced by #10104 on Apr 19, 2026, 5:39 PM
tobiu cross-referenced by PR #10105 on Apr 19, 2026, 6:05 PM
tobiu cross-referenced by PR #10116 on Apr 20, 2026, 1:40 AM
Context
PR #10084 (resolves #10035) detects orphan concepts (CONCEPT nodes with no
IMPLEMENTED_BYedge — concepts that exist in the ontology but aren't anchored to any source code) and emits them aslogger.warnduring ingestion. The choice to suppress them from the capability-gap channel was deliberate: orphans are ontology data-quality signals, not coverage gaps, and conflating them would dilute the signalGoldenPathSynthesizerconsumes forsandman_handoff.md.As the ontology grows (#10050 description enrichment, #10036 Memory Core concept discovery, #10037 ChromaDB embedding), orphans may become frequent enough that invisibility becomes the wrong default. A dedicated display channel is the right fix — keeps the main gap channel clean while making orphans actionable for curators.
The Fix
ConceptIngestoremits[ORPHAN_CONCEPT]entries to a new property channel (e.g.,node.properties.dataQualityFlagto keep it separate fromcapabilityGap) OR to the samecapabilityGapJSON array with the distinct tag — decide during implementation based on which is cleaner downstreamGoldenPathSynthesizercategorizes[ORPHAN_CONCEPT]into a new array parallel totestGaps/guideGaps/exampleGapssandman_handoff.md:### ⚠️ Orphaned Concepts (X of Y items)with the same 5-item limit patternDecision Needed During Implementation
Should
ORPHAN_CONCEPTshare thecapabilityGapproperty channel withTEST_GAP/GUIDE_GAP/EXAMPLE_GAP, or live on its own property? Sharing reduces GoldenPathSynthesizer's node-scanning work (one loop not two); separating keeps the "coverage gap" semantics pure. Lean: share the channel, since the tag-prefix categorization pattern already handles taxonomy separation downstream.Acceptance Criteria
[ORPHAN_CONCEPT]entries to orphan nodeslogger.warnsimplified — warn only on first detection per orphan (TTL-based dedup) or removed entirely if graph persistence is enough signal⚠️ Orphaned Conceptssection to appear in handoffOrigin Session ID
62d6f155-e57f-4279-9b59-36c9e4ecbc5e— flagged as out-of-scope in PR #10084 bodyRelated