Repository navigation
OpenCode 1.18: native jev-lsp path empty diagnostics (client path; not YAML) #21
Description
Activity
Fixed by the official bridge path: #22 (
editors/opencode/).Root cause, confirmed on 1.18. Three client-side behaviours, none of them a rules/YAML
regression:- It advertises
workspace.diagnostics.refreshSupport: falseand answers the
workspace/diagnostic/refreshjev-lspsends anyway with an empty OK, so the re-pull the
server asks for never happens. - It pulls
textDocument/diagnosticonce when a document opens, before the ambient pass has
cached anything, and keeps that empty report for the session. - The
Diagnostic.report()it hands the agent after a write keepsseverity === 1only, and
every rule finding is a Warning.
jev-lsp's finding path is pull (PROTOCOL §3.4/§9), which is what VS Code and Neovim implement.
Pushing ambient findings from the server would break §9, so the translation is on the client side
andPROTOCOL.mdis unchanged.What shipped.
editors/opencode/jev-lsp-opencode-bridge.pyproxies stdio JSON-RPC to a
jev-lsp --stdiochild and: answersinitializewithdiagnosticProviderremoved (puts OpenCode
on its push path), advertisesrefreshSupport: trueto the server, answers each refresh and pushes
the pull astextDocument/publishDiagnostics, remaps Warning → Error with a[jev warning]prefix
(Error is the only severity OpenCode's transcript shows), and synthesizes thedidSaveOpenCode
never sends, without which the save-triggered rules pass never runs.editors/opencode/README.md
has the config, and the top-level README's OpenCode section no longer recommends bare
jev-lsp --stdio.Evidence —
bash editors/opencode/verify-bridge.sh, 0 failures, four stages, no key and no
network (stub decide tier with its decision call stalled so the native pull lands before the
finding exists):native jev-lsp --stdiobridge opencode debug lsp diagnostics handler.rs[]for a file the rule flagsthe finding, severity: 1,[jev warning]OpenCode-shaped probe client pulls: 1, first_pull_items: 0, refresh_requests_acked: 2, pushes: 0provider_advertised: false, pulls: 0, pushes: 2Falsified deliberately: with the bridge replaced by a plain
execof the server, the bridge
stages report3 failure(s)and exit 1 while the native reproduction stays green. The row is now
opencode_bridgeinverify/run-suite.sh(okin a full-table run here), and
docs/VERIFICATION.md§1.2 records it.Native without the bridge remains broken by OpenCode 1.18's design and stays unsupported until
OpenCode implementsworkspace/diagnostic/refreshor shows warnings to its agent; at that point
lsp.jev.commandcan point straight atjev-lsp --stdioand the bridge can be deleted.- It advertises
- added a commit that references this issue
on Sep 21, 2026 Follow-up from QA (OpenCode ambient TUI bar)
After #22 @
0e03685, QA re-checked ambient coding-session UX on OpenCode 1.18.31 with the officialeditors/opencode/bridge:- Coding-only edit/save → green
LSP · jev - No readable
[jev warning]/ diagnostic chrome in the TUI (no review prompt, no debug dump) - Earlier “PASS” shots were on-demand /
debug lsp diagnosticsJSON, not ambient file-view UX
Evidence:
/workspace/jev-lsp-pr22-qa/opencode-ambient-before.png,opencode-ambient-violation.pngScope split
- editors/opencode: the bridge is the supported OpenCode client path (#21) #22 remains: supported workaround for refreshSupport / Warning filter (push/probe path)
- This issue stays open for native problems and for ambient TUI visibility in a normal coding session (even behind the bridge)
Not a YAML / rules regression.
- Coding-only edit/save → green
- added 7 commits that reference this issue
on Sep 21, 2026 Upstream evidence (OpenCode client, not jev-lsp):
- [FEATURE]: Configure minimum LSP diagnostic severity level (show Warnings, not just Errors) anomalyco/opencode#17869 — Error-only filter; Warnings never reach agent/TUI
- ESLint LSP fails to load anomalyco/opencode#23911 / Kotlin LSP not working (timeouts, no pull-diagnostics, etc.) anomalyco/opencode#23873 — green LSP, empty diagnostics (no pull/refresh)
Matches QA ambient FAIL + nvim/VS Code proving the server. Also cited on docs PR #23.
Status after #24 merge (
b619e9b):- Ambient for good clients (nvim / VS Code / omp after decide) is fixed via background
publishDiagnostics+jev.checkingpending. - This issue stays open: OpenCode 1.18 still does not surface Warning ambient (upstream Error-only filter, e.g. [FEATURE]: Configure minimum LSP diagnostic severity level (show Warnings, not just Errors) anomalyco/opencode#17869). PR editors/opencode: the bridge is the supported OpenCode client path (#21) #22 bridge closed as costume.
- Docs will keep OpenCode marked unsupported with links here + upstream until real ambient Warning works.
- Ambient for good clients (nvim / VS Code / omp after decide) is fixed via background
Scope
OpenCode-native client path — not a
jev-lspYAML authoring / server regression.QA verified PR #18 (
f4fc792): YAML rules load and surface correctly in Neovim and VS Code. OpenCode is fine via the push-bridge (jevserver). The flake is only the native OpenCode 1.18 ↔jev-lspdiagnostics path.Bug
OpenCode 1.18 with the native
jev-lspserver often returns emptydebug lsp diagnosticsfor a YAML rule that Neovim and VS Code both surface on the same tree / same rule.Not this
jev.rules/1compile / goldensRepro hints
/home/box/Code/jev-lsp@f4fc792(or current main after merge)/workspace/jev-lsp-pr18-qa/Ask
Reproduce, decide fix vs document bridge-only for OpenCode, link upstream if editor-side.