Skip to content

Test the whole language capability matrix, not a runbook #10

Closed

Description

@Chiarandini

The approved level-c-behavioral-plan.md classifies the language capability rows as RUNBOOK (manual), on the grounds that "async subprocess + a project fixture make headless brittle". That call was made without attempting the automation, and it leaves a distribution shipping language support whose end-to-end paths nobody has exercised.

The 2026-08-31 rust work drove every assertion type those rows need, headlessly and deterministically, in an isolated NVIM_APPNAME against a real cargo crate: LSP attach (proved in both directions, by deleting lsp/gopls.lua and getting no client), server-initialized polling, neotest adapter registration and file claiming, DAP configuration count going 0 -> 5 once codelldb landed, merged conform formatter tables, Mason install state, and run commands executed with asserted stdout.

That is seven of the eight checkpoints demonstrated. Only debug genuinely needs more than a status read, because it wants a live session that stops on a breakpoint.

Proposal: promote the language rows from RUNBOOK to AUTO and build a 7-bundle x 8-checkpoint matrix (56 cells) where every cell is PASS, FAIL, a pre-declared N/A, or a pre-declared UNCOVERED, and none may be silently skipped. Reuses the existing isolated harness (tests/bundle_load.sh) rather than adding a parallel one; adds tests/capability.sh and fixtures under tests/fixtures/lang/.

Two method rules carried over from that session, both learned by getting them wrong: poll for the real signal rather than sleeping (rust-analyzer answers cargo check before the crate graph exists, which made a correct testables look broken), and suspect the harness before the code (two apparent bugs were a mis-called vim.notify stub and a probe hardcoding space as <leader> when it is \).

Full plan, phases, per-checkpoint break conditions and risks: dev-docs/language-matrix-test-plan.md. Contract being tested against: dev-docs/language-bundle-contract.md.

Gates the beta cut: zero FAIL, every N/A justified.

Activity

  1. Chiarandini commented on Sep 1, 2026

    @Chiarandini
    OwnerAuthor

    Done, and merged in #13.

    The language rows are promoted from RUNBOOK to AUTO. tests/capability.sh grades eight language rows against the eight checkpoints in dev-docs/language-bundle-contract.md, in an isolated NVIM_APPNAME with its own XDG root, and it asserts the feature rather than its registration: a formatter that changes the buffer to known text, a deliberately broken symbol producing a diagnostic on the line it was injected on, one passing and one failing test reported as one of each, a debug session that stops on a breakpoint and reads a local, and a run command executed with its stdout compared.

    Green on CI:

    rust    lsp ts fmt diag test debug run-file run-project   all PASS
    go      all PASS
    python  all PASS (run-project N/A)
    c       all PASS except test=GAP (issue #14); run-project N/A
    cpp     all PASS; test N/A (one CTest adapter serves both filetypes)
    java    all PASS
    web     all PASS
    latex   UNCOVERED (no TeX on the runner, by design)
    

    Only debug needed more than a status read, and it needed no escape hatch: every language starts a session, stops on the expected line and reads a local.

    The premise held. Grading against a written contract found four defects that read as correct in the source and that every existing gate passed over: Go and Java attached no language server, Python's debugger pointed at an interpreter without debugpy, and Rust reported passing tests as failed. It then found two more on its first Linux run, including an undeclared cargo-nextest dependency that was only satisfied locally by accident.

    It runs on pull requests touching a language bundle, and weekly as a drift canary. Not nightly: everything it depends on lives outside this repository and moves slower than a day, and a check that is usually noise is one nobody reads.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions