land: luals-install-layout

Merged
AF
7h ago
+3293-3560

Accepted agent delivery; branch-keyed search descriptor included.


Summary by cubic

Fixes issue #547 by having the shared GitHub LSP installer in aft-bridge preserve full distribution runtimes for LuaLS and clangd, and by smoke-testing cached and newly installed servers before exposing their paths.

Bug Fixes

  • Cached servers that fail runtime startup are automatically repaired and revalidated with a bounded smoke command; required runtime resources are verified before a cached smoke verdict is trusted.
  • Cached paths blocked by an in-flight install lock are retried in the background, so a second session picks up servers installed by the first. These waits abort on shutdown instead of blocking for the lock's full timeout, and skipped servers are tracked the same way.
  • OpenCode publishes each ready server's path to the live transport pool as it settles, so one held install lock no longer delays unrelated servers until every install completes.
  • Upgrade candidates are validated and smoke-tested in staging before the swap, so a failed download or extraction leaves the working distribution intact.
  • Arbitrary files no longer count as healthy cache entries; only runnable executables passing the smoke check qualify. Passed and timeout verdicts are cached by executable digest so healthy caches stay zero-hash.

Refactors

  • The GitHub installer, release probe, and server spec table move from pi-plugin and opencode-plugin into aft-bridge with host adapters; both plugins now share the same implementation.
  • Server specs gain layout (distribution | standalone), smokeArgs, and required runtime paths so distribution-style servers keep resources next to the executable.

RetriggerView in GreptileConfidence Score: 5/5

The latest changes appear safe to merge; no new blocking issue was found.

Summary

Both plugins now share a GitHub language-server installer that preserves LuaLS and clangd runtime files.

  • LuaLS and clangd keep their runtime files beside their executables.
  • Pi and OpenCode use the same GitHub LSP installer.
  • Pi and OpenCode add each ready server path to live bridges.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Check cached server] --> B{Install lock busy?}
  B -->|Yes| C[Wait for lock or cancellation]
  C -->|Cancelled| D[Stop waiting]
  C -->|Released| E[Check server]
  B -->|No| E
  E -->|Ready| F[Publish server path]
  F --> G{OpenCode pool attached?}
  G -->|No| H[Save paths and replay at attach]
  G -->|Yes| I[Update future and live bridges]

Reviews (4) · Last reviewed commit: "mason: cancel busy-lock cache waits on s..." · Reviewed by Greptile