Context
All 3 live repo configs declare a real, functional experimental:\n gittensor: true block (opted in via #5030), fully parsed by packages/gittensory-engine/src/focus-manifest.ts:3085 (EXPERIMENTAL_PLUGIN_KEYS = ["gittensor"], line 252). But src/selfhost/config-lint.ts's TOP_LEVEL_FIELDS allowlist (lines 4-21) was never updated — #5030 touched focus-manifest.ts, index.ts, env.d.ts, gittensor-wire.ts, focus-manifest-loader.ts, and example YAML, but not config-lint.ts. Reproduced empirically: running npx tsx scripts/gittensory-config-lint.ts against a live gittensory config snapshot produces "Manifest contains unknown top-level field: experimental." — a false positive. Not CI-gated (no workflow invokes this script), so it only affects the documented operator-facing CLI validator. This is the same class of bug already fixed once before in this exact file (commit 7d600e05f, #3364, for repoDocGeneration) — a recurring maintenance gap.
Requirements
- Real code fix — PR against
JSONbored/gittensory.
Deliverables
Expected Outcome
npm run selfhost:config-lint no longer false-flags a real, live, correctly-configured experimental: block. The regression test prevents this recurring for the next new top-level field.
Links & Resources
Part of #5270 (roadmap epic).
Context
All 3 live repo configs declare a real, functional
experimental:\n gittensor: trueblock (opted in via #5030), fully parsed bypackages/gittensory-engine/src/focus-manifest.ts:3085(EXPERIMENTAL_PLUGIN_KEYS = ["gittensor"], line 252). Butsrc/selfhost/config-lint.ts'sTOP_LEVEL_FIELDSallowlist (lines 4-21) was never updated — #5030 touchedfocus-manifest.ts,index.ts,env.d.ts,gittensor-wire.ts,focus-manifest-loader.ts, and example YAML, but notconfig-lint.ts. Reproduced empirically: runningnpx tsx scripts/gittensory-config-lint.tsagainst a live gittensory config snapshot produces"Manifest contains unknown top-level field: experimental."— a false positive. Not CI-gated (no workflow invokes this script), so it only affects the documented operator-facing CLI validator. This is the same class of bug already fixed once before in this exact file (commit7d600e05f, #3364, forrepoDocGeneration) — a recurring maintenance gap.Requirements
JSONbored/gittensory.Deliverables
"experimental"toTOP_LEVEL_FIELDSinsrc/selfhost/config-lint.ts(e.g. after"maintainerRecap", or grouped near"features"perfocus-manifest.ts:246-251's comment).test/unit/selfhost-config-lint.test.tsmirroring the fix(selfhost): recognize repoDocGeneration in the config-lint allowlist #3364repoDocGenerationprecedent.experimental.Expected Outcome
npm run selfhost:config-lintno longer false-flags a real, live, correctly-configuredexperimental:block. The regression test prevents this recurring for the next new top-level field.Links & Resources
src/selfhost/config-lint.ts:4-21;packages/gittensory-engine/src/focus-manifest.ts:3085,252-259; documented atapps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx:1427d600e05f/ fix(selfhost): recognize repoDocGeneration in the config-lint allowlist #3364 (same fix, forrepoDocGeneration)Part of #5270 (roadmap epic).