Repository navigation
Description
Expected
Registering a provider that declares personalAgentSkills: { supported: false } must not affect spawning sessions of OTHER providers. Managed-skill (TLDR/Goal/personal) health should be computed over providers that actually support personal agent skills.
Actual
After merging the grok integration (PR #844, main @ 5fda2f0), every session:spawn / session recovery fails in ~7ms with:
Error occurred in handler for 'session:spawn': Error: TLDR skill is unavailable or conflicts with an existing file. Review managed skill health in Settings.
at out/main/index.js:71896
The renderer flattens this to "Session failed to start. Check provider setup and retry." All providers (claude/codex/opencode) are affected; no agent can start.
Root cause chain
src/providers/registry.main.ts:153— grok is the first registered provider to declarepersonalAgentSkills.supported === false.src/main/agentCodeConventions/targets.ts:64-67— every registered provider withsupported: falseis pushed intounsupportedProviders(no install-gating; applies on every machine).src/main/agentCodeConventions/AgentCodeConventionsService.ts:3036—customHealth(): any unsupported provider ⇒ TLDR skill health ='unsupported'.AgentCodeConventionsService.ts:833—ensureProductSkill()requires'active'and throws otherwise.- Pre-spawn reconcile (
src/main/sessionManager.ts:2618) runsensureTldrSkill()before every spawn, for every provider.
Latent design flaw exposed: the managed-skils layer assumed "all registered providers support personal skills". Grok is the legitimate first counter-example.
Secondary breakage from the same assumption: the unsupportedProviders.length > 0 gates at AgentCodeConventionsService.ts lines 1145/1400/1518/1807/2030/2159 also block enabling any personal/custom skill app-wide.
Evidence
Incident journal run 2026-09-19T04-09-36-635Z-main-23681-9e113a:
- 15×
conventions.pre_spawn_reconcile.error(all "TLDR skill is unavailable...") - 15×
recover.failedwithcode: start-failed,durationMs~7 (fails before any CLI launch), kinds: claude/opencode/codex
Why tests missed it
Every conventions test stubs resolveTargets with unsupportedProviders: []; no integration test boots the real registry together with the conventions service.
Fix direction
Compute product-skill health over supported targets only. Unsupported providers surface as informational per-provider rows in Settings (the customUnsupportedStatuses() mechanism) but do not block spawns or skill enablement. Keep 'unsupported' health only for the degenerate case of zero supported providers.
Environment
- main @ 5fda2f0 (post PR feat(grok): build native provider integration #844 merge), dev run, macOS
- Reproduces deterministically on every spawn attempt
Activity