LearnNewsExamplesServices
Frontmatter
id12511
titlePrune exploration artifacts from public learn/agentos nav + guard recurrence
stateClosed
labels
documentationenhancementai
assigneesneo-opus-ada
createdAtJun 4, 2026, 4:46 PM
updatedAtJun 4, 2026, 8:47 PM
githubUrlhttps://github.com/neomjs/neo/issues/12511
authorneo-opus-ada
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 4, 2026, 8:47 PM

Prune exploration artifacts from public learn/agentos nav + guard recurrence

Closed v13.0.0/archive-v13-0-0-chunk-16 documentationenhancementai
neo-opus-ada
neo-opus-ada commented on Jun 4, 2026, 4:46 PM

Context

Operator flagged (2026-06-04): learn/agentos/ is public-facing docs (rendered in the portal learn-viewer), but the swarm increasingly pollutes it with exploration/audit/plan artifacts = technical debt. Operator boundary: agentos/ top-level guides + decisions/ + cloud-deployment/ are public; exploration/ledger/audit items are not, and should not be top-level. "Small ticket, but prevent recurrence."

The Problem

learn/tree.json is the publish-gate for the public portal learn-viewer (Portal.view.learnContentStoretree.json). V-B-A of the AgentOS deck found two failure modes:

  1. Exploration registered as published guides (in tree.json → rendered in public nav next to real guides): SkillCompressionRolloutPlan, ConfigSubstrateDeadConfigAudit, ConfigSubstrateEnvVarAudit.
  2. Real guides wrongly unpublished (the inverse bug): AiConfigModel (ADR 0019 line 128 literally names it "the public configuration-model guide"), MX, rem-state-model are unpublished orphans.

(50% of top-level — 14/28 .md — are unpublished orphans; the broader orphan-dump cleanup is split to a follow-up, see Out of Scope.)

The Architectural Reality

  • learn/tree.json flat adjacency list drives portal nav + SEO; ai/scripts/lint/lint-tree-json.mjs already enforces tree↔folder mirroring (LEAF_FILE / PARENT_INTEGRITY / GROUP_COHESION / FOLDER_UNIQUENESS). The recurrence guard belongs here as a fifth invariant.
  • learn/agentos/cloud-deployment/Configuration.md:134 load-bearingly links ../ConfigSubstrateEnvVarAudit.md — so that audit cannot be deleted without de-linking first.

The Fix (this PR)

  1. De-publish (remove tree.json leaves): SkillCompressionRolloutPlan, ConfigSubstrateDeadConfigAudit, ConfigSubstrateEnvVarAudit.
  2. Delete files (no inbound refs; content lives in owning tickets — SkillCompressionRolloutPlan#11605/#12496): SkillCompressionRolloutPlan.md, ConfigSubstrateDeadConfigAudit.md. Keep ConfigSubstrateEnvVarAudit.md on disk (referenced by Configuration.md; final disposition deferred) + de-link Configuration.md's portal link to it (convert to plain text so no broken portal nav).
  3. Publish (add tree.json leaves under AgentOS): AiConfigModel, MX, rem-state-model.
  4. Guard — new lint-tree-json.mjs invariant EXPLORATION_ARTIFACT: a tree.json leaf id whose basename matches exploration-artifact patterns (*Audit, *RolloutPlan/*Plan, *Sweep, *Census, *Forensics, *Benchmark) is rejected — those belong in a non-published subfolder or the owning ticket, never the public nav. + unit test.

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
lint-tree-json.mjs EXPLORATION_ARTIFACT invariant this ticket (operator 2026-06-04) reject tree.json leaves whose basename matches exploration-artifact naming patterns none — fail-build yes (lint JSDoc) unit test (positive + negative); node ai/scripts/lint/lint-tree-json.mjs green post-cleanup
learn/tree.json AgentOS nav operator boundary de-publish exploration artifacts; publish the mis-filed guides yes lint-tree-json green

Acceptance Criteria

  • SkillCompressionRolloutPlan + both ConfigSubstrate*Audit removed from tree.json nav.
  • SkillCompressionRolloutPlan.md + ConfigSubstrateDeadConfigAudit.md deleted (V-B-A'd: no inbound refs).
  • Configuration.md no longer hard-links the unpublished ConfigSubstrateEnvVarAudit.md (no broken portal link).
  • AiConfigModel, MX, rem-state-model published in tree.json.
  • lint-tree-json.mjs rejects exploration-artifact basenames in tree.json + unit test (positive + negative) passes.
  • node ai/scripts/lint/lint-tree-json.mjs green; existing tree-json unit tests green.

Out of Scope (follow-up tickets)

  • Orphan-dump cleanup: the remaining ~11 top-level orphans (ModelStats, Tier2RevalidationSweep, v13-path, gemma4-rem-benchmark, sandman-*, IdentitySchema) + a stricter NO_TOP_LEVEL_ORPHAN guard (every depth-1 *.md must be registered).
  • Methodology docs → new agentos/process/ subfolder (contract-ledger, evidence-ladder, reference-hygiene, AGENTS_ATLAS) + skill-pointer + #12497 reference-integrity ref updates.
  • ConfigSubstrateEnvVarAudit final disposition (keep-as-reference vs absorb into Configuration.md) + add *Audit follow-up if relocated.
  • measurements/ de-publish decision (internal baselines vs MX-transparency curation).

Related

Authority: operator boundary 2026-06-04; ADR 0019 (AiConfigModel is the public config guide). Consumer: apps/portal/view/learn/MainContainerStateProvider.mjs.

Origin Session ID: c2800781-b204-4883-a52f-2979a560718b

tobiu referenced in commit 3afd62e - "feat(agentos): guard public learn/ nav vs exploration artifacts + prune existing (#12511) (#12512) on Jun 4, 2026, 8:47 PM
tobiu closed this issue on Jun 4, 2026, 8:47 PM
tobiu referenced in commit 3659367 - "refactor(agentos): relocate learn/agentos top-level orphans + NO_TOP_LEVEL_ORPHAN guard (#12513) (#12556) on Jun 5, 2026, 4:13 PM