From Discord (brillout, 8/3): now that the extension updates without manual steps —
Maybe quick win: show a warning if extension version mismatches what the backend expects. Actually, I'd say throw error and block.
Agreed there that it should be error + block — a warning would just get ignored, and a silently stale extension produces exactly the confusing half-working behavior the dogfood loop keeps tripping on.
Seam that already exists
The extension already reports its own version to the bridge: bridge-endpoints.ts carries a version: string field, sanitized on ingest (raw.version, capped at 32 chars, 'unknown' fallback). What's missing is the backend's half:
- the daemon declares the extension version (or minimum version) it expects
- on hello/heartbeat with a mismatched (or
'unknown') version, the bridge rejects the connection with an error naming both versions and how to update — no degraded mode
- the dashboard surfaces the blocked state (the relay/bridge indicator should say "extension vX, backend expects vY" instead of looking merely disconnected)
Why block rather than warn
A version-skewed extension doesn't fail loudly — it half-works (missed messages, silently ignored new fields), which reads as a TF bug and burns a debugging session. Refusing to pair makes the fix (update the extension) the only path forward, which is cheap now that the update is automated.
From Discord (brillout, 8/3): now that the extension updates without manual steps —
Agreed there that it should be error + block — a warning would just get ignored, and a silently stale extension produces exactly the confusing half-working behavior the dogfood loop keeps tripping on.
Seam that already exists
The extension already reports its own version to the bridge:
bridge-endpoints.tscarries aversion: stringfield, sanitized on ingest (raw.version, capped at 32 chars,'unknown'fallback). What's missing is the backend's half:'unknown') version, the bridge rejects the connection with an error naming both versions and how to update — no degraded modeWhy block rather than warn
A version-skewed extension doesn't fail loudly — it half-works (missed messages, silently ignored new fields), which reads as a TF bug and burns a debugging session. Refusing to pair makes the fix (update the extension) the only path forward, which is cheap now that the update is automated.