Problem
A downstream project cannot control which docs guides ship without editing stack files (= drift). The public-docs guide list is assembled glob-only and the glob always wins:
config/assets.js → allGuides: 'modules/*/doc/guides/*.md'
config/index.js (~line 159) runs config.files = deepMerge(config, { files: initGlobalConfigFiles(assets) }) last, after all project/env layers — so a files.guides set in config/defaults/{project}.config.js is replaced, not merged (arrays are replaced by deepMerge).
- The only filter applied afterwards is
filterByActivation (module on/off, ~line 161-166).
Net: a downstream that ships its own curated docs (own welcome/quickstart/ordering) has no config-level hook to exclude or reorder guides. It either accepts every modules/*/doc/guides/*.md the stack ships, or deletes stack guide files (drift, blocked by the /update-stack gate).
This is the root mechanism behind #3921 (devkit sample home/{welcome,quickstart} guides collide with a downstream's own slugs). #3921 fixes the specific sample-guide instance; this issue asks for the general curation capability so downstream doc config is insulated from stack guide changes.
Affected file(s)
config/assets.js (allGuides glob — authoritative)
config/index.js (~159 glob applied last, replacing project files.guides)
lib/helpers/config.js (initGlobalConfigFiles, filterByActivation)
modules/public/services/public.docs.service.js (guideFiles() reads config.files.guides)
Suggested fix (pick one)
- Exclusion knob: honor
config.docs.excludeGuides (array of slugs or path globs) when building files.guides, applied alongside filterByActivation.
- Override-aware merge: if project config explicitly sets
files.guides / config.docs.guideGlobs, let it take precedence over the default allGuides glob instead of being overwritten.
- Per-module opt-out: a module config flag (e.g.
home: { shipSampleGuides: false }) so scaffolding guides can be dropped downstream without touching stack files.
Goal: a downstream can curate its docs set (drop devkit scaffolding, reorder) purely via config — no stack-file edits, no drift.
Related: #3921 (sample-guide slug collision — the symptom this mechanism causes).
Problem
A downstream project cannot control which docs guides ship without editing stack files (= drift). The public-docs guide list is assembled glob-only and the glob always wins:
config/assets.js→allGuides: 'modules/*/doc/guides/*.md'config/index.js(~line 159) runsconfig.files = deepMerge(config, { files: initGlobalConfigFiles(assets) })last, after all project/env layers — so afiles.guidesset inconfig/defaults/{project}.config.jsis replaced, not merged (arrays are replaced bydeepMerge).filterByActivation(module on/off, ~line 161-166).Net: a downstream that ships its own curated docs (own welcome/quickstart/ordering) has no config-level hook to exclude or reorder guides. It either accepts every
modules/*/doc/guides/*.mdthe stack ships, or deletes stack guide files (drift, blocked by the/update-stackgate).This is the root mechanism behind #3921 (devkit sample
home/{welcome,quickstart}guides collide with a downstream's own slugs). #3921 fixes the specific sample-guide instance; this issue asks for the general curation capability so downstream doc config is insulated from stack guide changes.Affected file(s)
config/assets.js(allGuidesglob — authoritative)config/index.js(~159 glob applied last, replacing projectfiles.guides)lib/helpers/config.js(initGlobalConfigFiles,filterByActivation)modules/public/services/public.docs.service.js(guideFiles()readsconfig.files.guides)Suggested fix (pick one)
config.docs.excludeGuides(array of slugs or path globs) when buildingfiles.guides, applied alongsidefilterByActivation.files.guides/config.docs.guideGlobs, let it take precedence over the defaultallGuidesglob instead of being overwritten.home: { shipSampleGuides: false }) so scaffolding guides can be dropped downstream without touching stack files.Goal: a downstream can curate its docs set (drop devkit scaffolding, reorder) purely via config — no stack-file edits, no drift.
Related: #3921 (sample-guide slug collision — the symptom this mechanism causes).