Fix quasar-web startup and add a real stack smoke test #6

Closed
opened 2026-07-30 04:04:54 +00:00 by lost-rob0t · 0 comments
lost-rob0t commented 2026-07-30 04:04:54 +00:00 (Migrated from github.com)

Problem

The actual Lisp web startup path in PR #3 is not covered by CI and contains an undefined function call.

quasar.app:start calls attach-subscriber, but ATTACH-SUBSCRIBER is defined in quasar.ws, is not exported, and is not imported into quasar.app.

CI loads the control, StarLang, and test systems, but does not load quasar-web, start CLOG, or start the WebSocket server. This allows a green run while the product startup path is broken.

Found during review of PR #3.

Required changes

  • Export attach-subscriber from quasar.ws or replace it with a properly exported public startup API.
  • Import/use the public symbol from quasar.app.
  • Ensure subscriber IDs are retained and unsubscribed during shutdown.
  • Make start/stop idempotent and verify ports/resources are released.
  • Load systems/quasar-web.asd in CI.
  • Add a smoke test that starts the complete stack on ephemeral or configurable ports.
  • Connect a WebSocket client, send system.capabilities, validate the response, and shut down cleanly.
  • Return a stable protocol error for malformed WebSocket messages instead of allowing decode errors to escape the message callback.

Acceptance criteria

  • ./scripts/run-control-plane starts without undefined-function errors.
  • The WebSocket endpoint accepts a valid v1 command and returns a correlated response.
  • Malformed input returns protocol.invalid-envelope without killing the connection or server.
  • CI starts and stops quasar-web successfully.

Related PR: #3

## Problem The actual Lisp web startup path in PR #3 is not covered by CI and contains an undefined function call. `quasar.app:start` calls `attach-subscriber`, but `ATTACH-SUBSCRIBER` is defined in `quasar.ws`, is not exported, and is not imported into `quasar.app`. CI loads the control, StarLang, and test systems, but does not load `quasar-web`, start CLOG, or start the WebSocket server. This allows a green run while the product startup path is broken. Found during review of PR #3. ## Required changes - Export `attach-subscriber` from `quasar.ws` or replace it with a properly exported public startup API. - Import/use the public symbol from `quasar.app`. - Ensure subscriber IDs are retained and unsubscribed during shutdown. - Make start/stop idempotent and verify ports/resources are released. - Load `systems/quasar-web.asd` in CI. - Add a smoke test that starts the complete stack on ephemeral or configurable ports. - Connect a WebSocket client, send `system.capabilities`, validate the response, and shut down cleanly. - Return a stable protocol error for malformed WebSocket messages instead of allowing decode errors to escape the message callback. ## Acceptance criteria - `./scripts/run-control-plane` starts without undefined-function errors. - The WebSocket endpoint accepts a valid v1 command and returns a correlated response. - Malformed input returns `protocol.invalid-envelope` without killing the connection or server. - CI starts and stops `quasar-web` successfully. Related PR: #3
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
nsaspy/quasar#6
No description provided.