Context
Operator-flagged (@tobiu, 2026-07-02): the README Quickstart is the worst section — every link is dead or rule-violating. "Every user that uses those links is a lost one forever."
The Rule (operator-stated)
README learning links may target ONLY:
learn/ folder markdown (the LLM-readable view; GitHub-renders; never dies), OR
- The portal learning section —
https://neomjs.com/#/learn/<id> — the human-superior view (nav tree + live component previews + prev/next buttons).
NEVER dist/production (dead) and NEVER .github/ links for learning content.
Key invariant (V-B-A'd): every learn/**.md registered in learn/tree.json (and not hidden) is a live portal page at neomjs.com/#/learn/<tree.json id>. So tree.json membership = a guaranteed-live portal route. The tree.json id uses / separators (the old dead link used a stale . — gettingstarted.Setup).
The Problem (audit)
| Line |
Link |
Violation |
| 126 |
Getting Started → .github/GETTING_STARTED.md |
.github/ |
| 127 |
Learning Section → …/dist/production/apps/portal/#/learn/gettingstarted.Setup |
dist/production + stale . separator |
| 128 |
Examples → …/dist/production/apps/portal/#/examples |
dist/production; #/examples route no longer exists |
| 129 |
AI Quick Start → .github/AI_QUICK_START.md |
.github/ |
| 130 |
Blog → …/dist/production/apps/portal/#/blog |
dist/production; #/blog route no longer exists |
(Read Next lines 182-183 — VISION/STORY → .github/ — are a related but separate finding; those files physically live in .github/, so relocating them is out of this ticket's scope.)
The Fix
Rewrite the Quickstart CTAs as verified portal learning-section links (each id confirmed present in learn/tree.json):
- Getting Started →
https://neomjs.com/#/learn/gettingstarted/Setup (gettingstarted/Setup ✓)
- Learning Section →
https://neomjs.com/#/learn (the hub — shows the nav tree)
- What Is Neo? →
https://neomjs.com/#/learn/benefits/WhatIsNeo (benefits/WhatIsNeo ✓ — the canonical front-door intro; replaces a dead slot)
- Run Your Own Agent Team →
https://neomjs.com/#/learn/agentos/OwnAgentTeam (agentos/OwnAgentTeam ✓ — actual title "Provision Your Own Agent Team"; the accurate replacement for the stale .github KB-setup doc)
Examples + Blog dropped from the list: neither is in learn/tree.json and their old #/examples/#/blog routes are gone — so they are neither learn/ nor portal-learning content, and linking them would create new dead links. Re-add only once live routes are confirmed.
Acceptance Criteria
Out of Scope
- Read Next VISION/STORY
.github/ relocation (separate decision — those are project-meta, not learning content).
- The broader codebase portal-URL inconsistency sweep (
dist/esm, apps/portal/#/, #/ all appear across learn/blog/* + guides) — a follow-up #14310/#14327 leaf.
Related
- Parent epic: #14310 (Documentation & learning-experience overhaul, v13.1).
learn/tree.json (portal learning-section SSOT).
Authored by Grace (@neo-opus-grace, Claude Opus 4.8). Operator-flagged (@tobiu).
Context
Operator-flagged (@tobiu, 2026-07-02): the README Quickstart is the worst section — every link is dead or rule-violating. "Every user that uses those links is a lost one forever."
The Rule (operator-stated)
README learning links may target ONLY:
learn/folder markdown (the LLM-readable view; GitHub-renders; never dies), ORhttps://neomjs.com/#/learn/<id>— the human-superior view (nav tree + live component previews + prev/next buttons).NEVER
dist/production(dead) and NEVER.github/links for learning content.Key invariant (V-B-A'd): every
learn/**.mdregistered inlearn/tree.json(and nothidden) is a live portal page atneomjs.com/#/learn/<tree.json id>. Sotree.jsonmembership = a guaranteed-live portal route. The tree.json id uses/separators (the old dead link used a stale.—gettingstarted.Setup).The Problem (audit)
.github/GETTING_STARTED.md.github/…/dist/production/apps/portal/#/learn/gettingstarted.Setupdist/production+ stale.separator…/dist/production/apps/portal/#/examplesdist/production;#/examplesroute no longer exists.github/AI_QUICK_START.md.github/…/dist/production/apps/portal/#/blogdist/production;#/blogroute no longer exists(Read Next lines 182-183 — VISION/STORY →
.github/— are a related but separate finding; those files physically live in.github/, so relocating them is out of this ticket's scope.)The Fix
Rewrite the Quickstart CTAs as verified portal learning-section links (each id confirmed present in
learn/tree.json):https://neomjs.com/#/learn/gettingstarted/Setup(gettingstarted/Setup✓)https://neomjs.com/#/learn(the hub — shows the nav tree)https://neomjs.com/#/learn/benefits/WhatIsNeo(benefits/WhatIsNeo✓ — the canonical front-door intro; replaces a dead slot)https://neomjs.com/#/learn/agentos/OwnAgentTeam(agentos/OwnAgentTeam✓ — actual title "Provision Your Own Agent Team"; the accurate replacement for the stale.githubKB-setup doc)Examples + Blog dropped from the list: neither is in
learn/tree.jsonand their old#/examples/#/blogroutes are gone — so they are neitherlearn/nor portal-learning content, and linking them would create new dead links. Re-add only once live routes are confirmed.Acceptance Criteria
dist/productionand zero.github/links.learn/**.mdrelative path OR aneomjs.com/#/learn/<id>where<id>is present inlearn/tree.json.<id>V-B-A'd againstlearn/tree.json(membership = live route).#/examples,#/blogexcluded until confirmed).Out of Scope
.github/relocation (separate decision — those are project-meta, not learning content).dist/esm,apps/portal/#/,#/all appear acrosslearn/blog/*+ guides) — a follow-up #14310/#14327 leaf.Related
learn/tree.json(portal learning-section SSOT).Authored by Grace (@neo-opus-grace, Claude Opus 4.8). Operator-flagged (@tobiu).