Skip to content

ci: run the whole test suite against the real server on every PR (#1) - #18

Merged
Asmod4n merged 1 commit into
mainfrom
claude/issue-1-ci
Jul 20, 2026
Merged

ci: run the whole test suite against the real server on every PR (#1)#18
Asmod4n merged 1 commit into
mainfrom
claude/issue-1-ci

Conversation

@Asmod4n

@Asmod4n Asmod4n commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • One workflow (.github/workflows/ci.yml), running the whole suite against the real server on every pull request and every push to main (plus manual dispatch) — no reduced/fast variant.
  • server job: rake install from the checkout, mruby HEAD + the reflection VM via mruby-lsp-setup, then all of test/overlay (including the live-VM pin mruby_semantics_test.rb), the conformance replays over real LSP stdio, and test/consistency under a real LSP client (headless Neovim + clangd).
  • editor job: the extension suite in a real VS Code extension host (xvfb-run -a npm test) and the debug-adapter protocol tests.
  • Three fixes this workflow needed to be honest, folded in as part of the same change: the extension tests now run in a real VS Code extension host instead of a hand-mocked vscode module that had drifted from the product; the conformance replay clients answer the server's unsandboxed-consent dialog instead of dying at the first request; mruby HEAD's changed module_function semantics are re-pinned in the overlay.
  • Conformance replays are structured to never need a workflow edit again: each replay script computes its own real exit code, and test/conformance/replays/ holds one small runner script per feature — ci.yml just loops over that directory.

Test plan

  • Full local rehearsal: mruby HEAD build → real reflection VM → all replays → both consistency suites, before every push
  • Green on GitHub Actions (workflow_dispatch on this branch)

One workflow (.github/workflows/ci.yml), and it runs the WHOLE suite
against the real server on every pull request and every push to main
(plus manual dispatch) — no reduced/fast variant:

- server job: rake install from the checkout (a --user-install, so
  both Gem.user_dir/bin and Gem.bindir go on PATH — the two only
  coincide on root/rbenv setups), mruby HEAD + the reflection VM via
  mruby-lsp-setup against a fixture workspace, then ALL of
  test/overlay (including the live-VM pin mruby_semantics_test.rb),
  the conformance replays over real LSP stdio, and test/consistency
  driven by a real LSP client (headless Neovim + clangd) against the
  real server.
- editor job: the extension suite in a real VS Code extension host
  (xvfb-run -a npm test) and the debug-adapter protocol tests.

Three fixes this workflow needed to be honest, folded in:

- The extension tests now run in a real VS Code extension host
  (official @vscode/test-cli, fixture workspaces under test/fixtures/,
  nothing about the vscode API mocked). The prior hand-mocked vscode
  harness had drifted from the product on three axes — a missing
  context.extension.packageJSON, a 7th declared command it never
  asserted, and a set-up-detection protocol it no longer matched —
  every drift shipping silently because nothing real loaded the
  extension.
- The conformance replay clients (test/conformance/replay*.py) answer
  the server's unsandboxed-consent dialog over
  window/showMessageRequest (ours_launch.rb runs the server without
  the launcher, so on Linux it is always unconfined and the fail-closed
  consent gate always fires), and correctly route server-initiated
  requests instead of misreading them as responses.
- mruby HEAD changed bare module_function to match CRuby (public
  singleton copy + private instance method, ending at a bare
  visibility verb) — caught by the live-VM pin
  test/overlay/mruby_semantics_test.rb exactly as designed, now
  modeled by the overlay and re-pinned.

Conformance replays are structured to never need a workflow edit again:
each replay script computes its own real exit code
(sys.exit(0 if fail==0 and passed>0 else 1) — the passed>0 guard so a
wrong RLSRC or empty fixture glob reads as red, not an accidental
green), and test/conformance/replays/ holds one small runner script per
feature (mirroring test/overlay's own for-loop pattern). ci.yml just
loops over that directory; adding a conformance feature means dropping
a script there, never touching this workflow.

Verified end-to-end, repeatedly: a full local rehearsal (mruby HEAD
build through the real reflection VM, all replays, both consistency
suites) before every push, and green runs on the GitHub Actions
runners themselves.
@Asmod4n
Asmod4n merged commit 3ce404b into main Jul 20, 2026
4 checks passed
@Asmod4n
Asmod4n deleted the claude/issue-1-ci branch July 20, 2026 11:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant