If SignalR is connected AND user picked local execution, the guard is false && ... which short-circuits. The button stays enabled while WASM/Pyodide/QuickJS is still loading. Clicking Run before runtime ready can fail or hang.
Run button disabled while local runtime is loading regardless of SignalR status
Run button disabled when SignalR disconnected and path is server
No regression to working local-only or server-only flows
**Severity:** High (UX/correctness)
**File:** `spikersoft-angular/libraries/tools/src/components/language-runner/language-runner.ts` (~264-275)
**Problem:** Current logic:
```typescript
const connected = this.isConnected();
const localReady = this.activePath() === 'local' && this.runtimeStatus() === 'ready';
if (!connected && !localReady) return false;
```
If SignalR is connected AND user picked local execution, the guard is `false && ...` which short-circuits. The button stays enabled while WASM/Pyodide/QuickJS is still loading. Clicking Run before runtime ready can fail or hang.
**Fix:** Branch on activePath explicitly:
```typescript
if (this.activePath() === 'local') return this.runtimeStatus() === 'ready';
return this.isConnected();
```
**Acceptance criteria:**
- [ ] Run button disabled while local runtime is loading regardless of SignalR status
- [ ] Run button disabled when SignalR disconnected and path is server
- [ ] No regression to working local-only or server-only flows
**Resolved.**
`canRun` now branches on `activePath` first:
- `local` -> returns false unless `runtimeStatus() === 'ready'`
- otherwise -> returns false unless `isConnected()`
This fixes the short-circuit case where SignalR being connected hid a not-yet-ready local runtime.
File: `spikersoft-angular/libraries/tools/src/components/language-runner/language-runner.ts`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Severity: High (UX/correctness)
File:
spikersoft-angular/libraries/tools/src/components/language-runner/language-runner.ts(~264-275)Problem: Current logic:
If SignalR is connected AND user picked local execution, the guard is
false && ...which short-circuits. The button stays enabled while WASM/Pyodide/QuickJS is still loading. Clicking Run before runtime ready can fail or hang.Fix: Branch on activePath explicitly:
Acceptance criteria:
Resolved.
canRunnow branches onactivePathfirst:local-> returns false unlessruntimeStatus() === 'ready'isConnected()This fixes the short-circuit case where SignalR being connected hid a not-yet-ready local runtime.
File:
spikersoft-angular/libraries/tools/src/components/language-runner/language-runner.ts.