parseFocusManifestContent (src/signals/focus-manifest.ts:1043) silently degrades a broken config to an empty manifest with a warnings[] array — an operator whose private per-repo config (src/selfhost/private-config.ts) has a YAML typo gets deterministic-only reviews and never knows why. Add a pure lintManifestText(text): {ok, warnings[], summary} helper that runs the existing parser and formats its warnings into an operator-facing report (valid-YAML-but-no-fields, oversize, malformed, unknown top-level keys). No new parser — reuse the existing one.
Deliverables
References
src/signals/focus-manifest.ts:1043
src/signals/focus-manifest.ts:1015
src/selfhost/private-config.ts:69
size: M · gittensor:feature
parseFocusManifestContent (src/signals/focus-manifest.ts:1043) silently degrades a broken config to an empty manifest with a warnings[] array — an operator whose private per-repo config (src/selfhost/private-config.ts) has a YAML typo gets deterministic-only reviews and never knows why. Add a pure lintManifestText(text): {ok, warnings[], summary} helper that runs the existing parser and formats its warnings into an operator-facing report (valid-YAML-but-no-fields, oversize, malformed, unknown top-level keys). No new parser — reuse the existing one.
Deliverables
References
src/signals/focus-manifest.ts:1043src/signals/focus-manifest.ts:1015src/selfhost/private-config.ts:69size: M · gittensor:feature