Implement the first replay-backed Common Lisp client core #15

Merged
lost-rob0t merged 6 commits from codex/issue-4-client-core-a1 into main 2026-08-03 09:36:12 +00:00
lost-rob0t commented 2026-08-03 09:29:44 +00:00 (Migrated from github.com)

Implements the first executable slice of #4.

Implemented

  • adds an actor-style Common Lisp client with an owned mailbox and event queue
  • adds the public start-client, client-step, run-client, poll-event, and stop-client lifecycle
  • defines a transport protocol that later native HTTP/WebSocket work can implement
  • adds a deterministic replay transport using the same client surface
  • emits immutable dispatch-event values with retained raw payloads
  • tracks Gateway sequence and READY session identifiers
  • generates stable event identifiers without implementation-dependent sxhash
  • adds typed client, transport, and frame conditions
  • adds ordered delivery, deterministic identifier, idle, and shutdown regression tests
  • documents an executable client example

Architecture boundaries touched

  • Common Lisp client/core only
  • no native transport implementation yet
  • no live Discord account, token, cookie, or network request
  • no StarIntel policy or persistence dependency
  • no Python production dependency

Validation

  • GitHub Actions CI run #7 on 550c0d9581ea4bad2645d038bdf251c5528e5f2b — PASS
  • nix flake check -L --no-update-lock-file — PASS in CI
  • ASDF compile/load and replay-backed client tests — PASS in CI

Remaining #4 work

  • decode raw JSON while preserving absent/null/value state
  • add virtual-clock and transcript readers
  • preserve unknown fields from raw protocol input
  • extend cancellation, fragmentation, stale-timer, and terminal-event fixtures

Next executable work

  • native fixture transport in #3
  • full Gateway session state machine in #5
Implements the first executable slice of #4. ## Implemented - adds an actor-style Common Lisp client with an owned mailbox and event queue - adds the public `start-client`, `client-step`, `run-client`, `poll-event`, and `stop-client` lifecycle - defines a transport protocol that later native HTTP/WebSocket work can implement - adds a deterministic replay transport using the same client surface - emits immutable dispatch-event values with retained raw payloads - tracks Gateway sequence and READY session identifiers - generates stable event identifiers without implementation-dependent `sxhash` - adds typed client, transport, and frame conditions - adds ordered delivery, deterministic identifier, idle, and shutdown regression tests - documents an executable client example ## Architecture boundaries touched - Common Lisp client/core only - no native transport implementation yet - no live Discord account, token, cookie, or network request - no StarIntel policy or persistence dependency - no Python production dependency ## Validation - GitHub Actions CI run #7 on `550c0d9581ea4bad2645d038bdf251c5528e5f2b` — PASS - `nix flake check -L --no-update-lock-file` — PASS in CI - ASDF compile/load and replay-backed client tests — PASS in CI ## Remaining #4 work - decode raw JSON while preserving absent/null/value state - add virtual-clock and transcript readers - preserve unknown fields from raw protocol input - extend cancellation, fragmentation, stale-timer, and terminal-event fixtures ## Next executable work - native fixture transport in #3 - full Gateway session state machine in #5
Sign in to join this conversation.
No description provided.