Problem
Top-level examples/ is reserved for Body (frontend) examples consumed by webpack build-all. When AI / harness / test examples are placed there, build-all breaks — it builds every examples/* subdir as a Neo app, and non-Neo / vanilla / app-less structures choke it.
This is a repeated friction item (operator-flagged 2026-06-13 on PR #13066: the harness-endurance benchmark — a falsifier with a vanilla single-main-thread comparator + an app-less shared/ dir — broke build-all there; explicitly "not a first time occurrence"). AI-domain examples belong under ai/examples/, which the dev-server's process.cwd() static root still serves (so browser e2e keeps working).
There is no mechanical guard preventing recurrence — it surfaces only when build-all breaks, or via human review.
Proposed Fix (two layers)
- CI guard (hard, PR-time): a check that scans top-level
examples/ and FAILS with an actionable message — "examples/ is Body-only; AI / non-Body examples go under ai/examples/" — when a subdir is non-conforming (lacks the standard Neo-app layout app.mjs + index.html + neo-config.json, OR imports from ai/, OR is a non-Neo/vanilla app). Mirror the existing CI-lint pattern (e.g. lint-pr-body / retired-primitives).
structural-pre-flight rule (soft, authoring-time): extend .agents/skills/structural-pre-flight (fires on new .mjs placement) to flag examples/-vs-ai/examples/ placement, so misplacement is caught before the file is written — closing the gap at the same 0th-level discipline point the skill already owns.
Acceptance Criteria
Context
- Immediate fix landed in PR #13066 (relocated the harness-endurance benchmark
examples/ → ai/examples/, verified e2e 4/4 + units 16/16).
- Operator framing (@tobiu, 2026-06-13): "reserved for body (frontend) only examples... this is not a first time occurrence, but repeated friction item. needs a solution to not happen again."
Authored by Claude Opus 4.8 (Claude Code, @neo-opus-vega / Vega).
Problem
Top-level
examples/is reserved for Body (frontend) examples consumed by webpackbuild-all. When AI / harness / test examples are placed there,build-allbreaks — it builds everyexamples/*subdir as a Neo app, and non-Neo / vanilla / app-less structures choke it.This is a repeated friction item (operator-flagged 2026-06-13 on PR #13066: the harness-endurance benchmark — a falsifier with a vanilla single-main-thread comparator + an app-less
shared/dir — brokebuild-allthere; explicitly "not a first time occurrence"). AI-domain examples belong underai/examples/, which the dev-server'sprocess.cwd()static root still serves (so browser e2e keeps working).There is no mechanical guard preventing recurrence — it surfaces only when
build-allbreaks, or via human review.Proposed Fix (two layers)
examples/and FAILS with an actionable message — "examples/is Body-only; AI / non-Body examples go underai/examples/" — when a subdir is non-conforming (lacks the standard Neo-app layoutapp.mjs+index.html+neo-config.json, OR imports fromai/, OR is a non-Neo/vanilla app). Mirror the existing CI-lint pattern (e.g.lint-pr-body/retired-primitives).structural-pre-flightrule (soft, authoring-time): extend.agents/skills/structural-pre-flight(fires on new.mjsplacement) to flagexamples/-vs-ai/examples/placement, so misplacement is caught before the file is written — closing the gap at the same 0th-level discipline point the skill already owns.Acceptance Criteria
examples/with an actionable message pointing atai/examples/.structural-pre-flightflags an AI-domain example authored under top-levelexamples/.ai/examples/content (no false positives).examples/README orstructural-pre-flightatlas) states theexamples/= Body-only /ai/examples/= AI-domain convention.Context
examples/ → ai/examples/, verified e2e 4/4 + units 16/16).Authored by Claude Opus 4.8 (Claude Code, @neo-opus-vega / Vega).