Context
Session 07f601dc-353a-44d2-a373-18da2a0d305a surfaced a structural gap in the Golden Path ranking algorithm. Today's scoring operates on internal signals only — semantic distance, structural weight, bug label, blocked filter, community boost, needs-re-triage penalty — all derived from the Native Edge Graph. External-facing metrics (repo traffic, star trends, blog cadence, sponsors, LinkedIn reach, external blog mentions) are not ingested.
Empirical motivation: Neo has ~21,000 commits, 3,100 stars, 64k unique LinkedIn reach on one DevIndex post, zero external blog mentions by third parties, and near-zero enterprise adoption after 6 years. The production engine is prolific; the external-visibility output is systemically under-produced in a way the Golden Path cannot currently see.
⚠️ Convergence correction (Emmy + Grace, 2026-07-12 — supersedes The Fix / ACs below)
Peer convergence corrected this ticket's prescription: the goal is valid + high-ROI, but the fix is NOT a bespoke scorer ranking on external deficits (that conflates "what is happening" with "what Neo chose to prioritize" — an automatic deficit-amplification loop). Per ADR 0033 (Direction Contract): declared intent weights are operator-owned; direction influence is additive, never gating. The clean split (@neo-gpt-emmy):
- Measurement producer — hermetic injected readers emit schema-valid
METRIC records (traffic/stars/cadence/sponsor), stale/null on fault, reporting-only; composes with #14442. Output shape pinned by @neo-opus-grace (#10120→#14442): the 5 fields I proposed (claimClass, falsifyingQuery, windowSemantics, confoundDisclaimer, publicFlag) ARE the shared METRIC contract, plus identity + append-only period governance and claimClass: 'external-reported'.
- Declared direction — visibility/traction as a stable
BUSINESS_GOAL/EVOLUTION_GOAL; operator owns its intent weight; work-to-goal via graph edges, not label inference.
- GP-v2 consumption — after #14472/#14565's consumer contract, goal alignment enters the ISSUE/DISCUSSION route as a bounded additive term (never gating); raw deficits inform the human goal-weight decision, never silently mint strategy.
My hermetic-reader discipline survives as the producer implementation; the output/authority shape is the above. This is the GP-v2 input layer of the one next-lane-awareness system (co-consumers: the stop-hook forward-pull #15087, Bird Views #14435/#15088). aligned-with ADR 0033; consumes #14442; interops #14472/#14565. The v13.2 boundary: reporting can land independently; ranking evolution follows the GP-v2/direction gates. A full Fix/AC rewrite + Contract Ledger (METRIC production / goal authority / GP-v2 consumption / failure posture / public-vs-private) is the next repair pass, against Grace's business-engine substrate.
The Problem
When visibility-gap is high but internal technical ranking dominates Golden Path, every session picks up technical tickets. Blog tickets (#9849, #9850, #9853, #9854, #10074) and community work accumulate without being prioritized. The feedback loop that would redirect some capacity toward external-visibility work does not exist — the ranking function has no term that recognizes "Neo's technical output is compounding but its external legibility is not."
Content cadence collapsed 5 months ago (last external post 2025-11-23); five blog tickets sit open; sponsor income is literally zero; the Gemini 3 blog flop revealed that reach ≠ conversion (64,568 LinkedIn reach → ~2 GitHub stars per the session analysis). These are signals the Golden Path should weight.
The Architectural Reality
buildScripts/ai/runGoldenPath.mjs — the synthesis phase where scoring applies. Extensible.
ai/daemons/DreamService.mjs — REM pipeline including Phase 5 Golden Path Synthesis. Already has the scoring formula (semanticScore × 2) + structuralWeight with modifiers.
- Data sources available:
apps/portal/resources/data/blog.json + medium_blog.json — publication dates
- GitHub API — repo traffic (14-day views/unique), star count + trend, sponsors
resources/content/issues/*.md — open blog ticket count + ages (Blog Post label filter)
resources/content/release-notes/*.md — release cadence
- LinkedIn analytics (manual input or via API if available)
- Existing pattern for signal ingestion: Phase 3 Capability Gap Inference is deterministic (no LLM), scans the graph, produces
[TEST_GAP] / [GUIDE_GAP] properties. An external-visibility signal follows the same pattern — deterministic, derived from filesystem + API data, attached as graph node properties.
The Fix
- Compute
externalVisibilitySignal per REM cycle, deterministic, as an extension of Phase 3 or a new phase between 3 and 4:
daysSinceLastBlog — max of site-blog and medium-blog dates
daysSinceLastMedium, daysSinceLastLinkedIn — per-channel cadence
daysSinceLastRelease — from resources/content/release-notes/*.md
starTrend30d — delta vs 30 days ago (if GitHub API accessible)
trafficUnique14d — 14-day unique visitors
sponsorsCount + sponsorsMRR
openBlogTicketCount + oldestDraftAgeDays
- New ranking dimension:
visibilityGapWeight, computed from the signal set. Tickets with Blog Post / documentation / ai-generated labels, case-study work, community engagement — all receive a boost proportional to visibilityGapWeight.
- New sandman_handoff section:
## External Visibility — listing the raw metrics + adaptive weight + the specific tickets most likely to close the gap, sorted by age.
- Adaptive behavior: when visibility-gap is high, content and community tickets move up the ranked list alongside technical work. When it's low (if/when), tactical work dominates as today.
Acceptance Criteria
Out of Scope
- Actually writing the blog posts — picking up #9849 / #9850 / #9853 / #9854 / #10074 is discrete work, not this ticket
- Auto-publishing — human-in-loop review gate remains per authorship-respect rule (#10109 extension)
- GTM strategy outside Golden Path — enterprise motion, funding, partnerships are orthogonal; this ticket only adapts the internal scheduling substrate
- LinkedIn / external-platform publishing automation — drafts-only boundary per #10118 + #10109 discussions
Avoided Traps
- "Nag loop": the signal is a weighting term, not a notification. It shifts ranking, it doesn't generate reminders.
- Prioritizing content over correctness: technical bugs keep their
+1.0 structural weight bump. Visibility gap is an additional term, not a replacement.
- Collapsing "visibility" into "contributor community": these are different gaps needing different signals. The scope above is visibility. Contributor community (Discord engagement, PRs-from-externals, issues-from-externals) could be a sibling signal but is deliberately separate.
- Auto-posting or auto-drafting: the loop changes ranking. It does not author content. Authorship respect rule (#10109) applies.
- Treating the signal set as complete: the 8 metrics above are a starting point. Future iterations can add citation counts, HN rank, conference CFP acceptances, etc.
Related
- Surfaced during: session
07f601dc brainstorm — LinkedIn conversion analysis (64k reach → 2 stars), BMWK trauma recalibration, Client as load-bearing case, "Claude Code on Neo" agent-harness pitch as artifact-based conversion (filed as companion Discussion)
- Content backlog this ticket affects ranking for: #9849, #9850, #9853, #9854, #10074
- Dream Pipeline architecture:
learn/agentos/DreamPipeline.md §Phase 5 Golden Path Synthesis
- Complementary work: #10030 Concepts (richer semantic substrate for visibility signals), #9999 Multi-user Memory Core (swarm tenant isolation for shared visibility signals across users), #10118 create-skill downstream manifest requirement
- Possible graduation path: companion Discussion on Multi-window Neo agent harness — if that harness ships, it becomes a primary visibility-conversion artifact, and the Golden Path would weight its progress as first-class
Origin Session ID
07f601dc-353a-44d2-a373-18da2a0d305a
Context
Session
07f601dc-353a-44d2-a373-18da2a0d305asurfaced a structural gap in the Golden Path ranking algorithm. Today's scoring operates on internal signals only — semantic distance, structural weight, bug label, blocked filter, community boost, needs-re-triage penalty — all derived from the Native Edge Graph. External-facing metrics (repo traffic, star trends, blog cadence, sponsors, LinkedIn reach, external blog mentions) are not ingested.Empirical motivation: Neo has ~21,000 commits, 3,100 stars, 64k unique LinkedIn reach on one DevIndex post, zero external blog mentions by third parties, and near-zero enterprise adoption after 6 years. The production engine is prolific; the external-visibility output is systemically under-produced in a way the Golden Path cannot currently see.
⚠️ Convergence correction (Emmy + Grace, 2026-07-12 — supersedes The Fix / ACs below)
Peer convergence corrected this ticket's prescription: the goal is valid + high-ROI, but the fix is NOT a bespoke scorer ranking on external deficits (that conflates "what is happening" with "what Neo chose to prioritize" — an automatic deficit-amplification loop). Per ADR 0033 (Direction Contract): declared intent weights are operator-owned; direction influence is additive, never gating. The clean split (@neo-gpt-emmy):
METRICrecords (traffic/stars/cadence/sponsor), stale/null on fault, reporting-only; composes with #14442. Output shape pinned by @neo-opus-grace (#10120→#14442): the 5 fields I proposed (claimClass, falsifyingQuery, windowSemantics, confoundDisclaimer, publicFlag) ARE the shared METRIC contract, plus identity + append-only period governance andclaimClass: 'external-reported'.BUSINESS_GOAL/EVOLUTION_GOAL; operator owns its intent weight; work-to-goal via graph edges, not label inference.My hermetic-reader discipline survives as the producer implementation; the output/authority shape is the above. This is the GP-v2 input layer of the one next-lane-awareness system (co-consumers: the stop-hook forward-pull #15087, Bird Views #14435/#15088).
aligned-with ADR 0033; consumes #14442; interops #14472/#14565. The v13.2 boundary: reporting can land independently; ranking evolution follows the GP-v2/direction gates. A full Fix/AC rewrite + Contract Ledger (METRIC production / goal authority / GP-v2 consumption / failure posture / public-vs-private) is the next repair pass, against Grace's business-engine substrate.The Problem
When visibility-gap is high but internal technical ranking dominates Golden Path, every session picks up technical tickets. Blog tickets (#9849, #9850, #9853, #9854, #10074) and community work accumulate without being prioritized. The feedback loop that would redirect some capacity toward external-visibility work does not exist — the ranking function has no term that recognizes "Neo's technical output is compounding but its external legibility is not."
Content cadence collapsed 5 months ago (last external post 2025-11-23); five blog tickets sit open; sponsor income is literally zero; the Gemini 3 blog flop revealed that reach ≠ conversion (64,568 LinkedIn reach → ~2 GitHub stars per the session analysis). These are signals the Golden Path should weight.
The Architectural Reality
buildScripts/ai/runGoldenPath.mjs— the synthesis phase where scoring applies. Extensible.ai/daemons/DreamService.mjs— REM pipeline including Phase 5 Golden Path Synthesis. Already has the scoring formula(semanticScore × 2) + structuralWeightwith modifiers.apps/portal/resources/data/blog.json+medium_blog.json— publication datesresources/content/issues/*.md— open blog ticket count + ages (Blog Postlabel filter)resources/content/release-notes/*.md— release cadence[TEST_GAP]/[GUIDE_GAP]properties. An external-visibility signal follows the same pattern — deterministic, derived from filesystem + API data, attached as graph node properties.The Fix
externalVisibilitySignalper REM cycle, deterministic, as an extension of Phase 3 or a new phase between 3 and 4:daysSinceLastBlog— max of site-blog and medium-blog datesdaysSinceLastMedium,daysSinceLastLinkedIn— per-channel cadencedaysSinceLastRelease— fromresources/content/release-notes/*.mdstarTrend30d— delta vs 30 days ago (if GitHub API accessible)trafficUnique14d— 14-day unique visitorssponsorsCount+sponsorsMRRopenBlogTicketCount+oldestDraftAgeDaysvisibilityGapWeight, computed from the signal set. Tickets withBlog Post/documentation/ai-generatedlabels, case-study work, community engagement — all receive a boost proportional tovisibilityGapWeight.## External Visibility— listing the raw metrics + adaptive weight + the specific tickets most likely to close the gap, sorted by age.Acceptance Criteria
externalVisibilitySignalcomputed per REM cycle from the metrics above; persisted on graph with TTLvisibilityGapWeightadded as ranking-formula term with config-driven multipliersandman_handoff.mdrenders## External Visibilitysection when visibility-gap > threshold; includes raw metrics + ranked content-ticket listblog.json/medium_blog.jsonpath structure is respected; GitHub API calls are cached + rate-limit-safeOut of Scope
Avoided Traps
+1.0 structural weightbump. Visibility gap is an additional term, not a replacement.Related
07f601dcbrainstorm — LinkedIn conversion analysis (64k reach → 2 stars), BMWK trauma recalibration, Client as load-bearing case, "Claude Code on Neo" agent-harness pitch as artifact-based conversion (filed as companion Discussion)learn/agentos/DreamPipeline.md§Phase 5 Golden Path SynthesisOrigin Session ID
07f601dc-353a-44d2-a373-18da2a0d305a