trunk
Branches trunk
1 Branches 0 Tags
Go to file T
Code
.cargo ls00: workspace, transcript matcher engine with normalization split, harness skeleton with five-state doctor, loud-SKIP acquisition (serves_lsp=false until the s52 pin bump), 3-OS CI; upstream pinned at ecea37c matching the vendored snapshot
.github license follow-through: the vscode LICENSE.md reproduces GPL verbatim and its manifest test follows; the nvim queries note follows; the acquire step downloads a pin-matched release asset when one exists and stays dark honestly when none does (the maybe branch fired on the first release's existence with no download logic behind it)
assets assets: the wolf mark; the vscode extension gains its icon (256px render, manifest regenerated and reviewed — the icon is the 33rd entry)
clients license follow-through: the vscode LICENSE.md reproduces GPL verbatim and its manifest test follows; the nvim queries note follows; the acquire step downloads a pin-matched release asset when one exists and stays dark honestly when none does (the maybe branch fired on the first release's existence with no download logic behind it)
crates harness: $REPO elision — helix and eglot resolve roots above the workspace and leaked the recording machine's home into transcripts; emacs --batch jsonrpc timer pumping (1-in-7 flake to 20/20)
docs org migration: tenseleyFlow -> wolffe-lang (repos transferred, URLs follow)
fixtures transcripts: 26 sessions across lifecycle/diagnostics/requests/cancel/encoding; astral fixture under the gap policy
profiles org migration: tenseleyFlow -> wolffe-lang (repos transferred, URLs follow)
src ci: helix-config + emacs-mode lanes (3 OS), zed-extension wasm build, config checks in the server-free job — all loud-skip
tests ci: vscode-extension lane (14 headless cases, loud skip without toolchain); vsix 316KB installs clean
transcripts org migration: tenseleyFlow -> wolffe-lang (repos transferred, URLs follow)
vendor upstream: pin 70bdd35 (per-file publish + exit codes + files table live); DIV-LSP-001 closed — ledger empty, onetruth proves the cross-file publish arrives
xtask org migration: tenseleyFlow -> wolffe-lang (repos transferred, URLs follow)
.editorconfig ls00: workspace, transcript matcher engine with normalization split, harness skeleton with five-state doctor, loud-SKIP acquisition (serves_lsp=false until the s52 pin bump), 3-OS CI; upstream pinned at ecea37c matching the vendored snapshot
.gitattributes seed: licenses, LF enforcement, readme — the editor layer; the engine is wolf lsp itself
.gitignore ci: helix-config + emacs-mode lanes (3 OS), zed-extension wasm build, config checks in the server-free job — all loud-skip
.gitmodules org migration: tenseleyFlow -> wolffe-lang (repos transferred, URLs follow)
CONTRIBUTING.md contributing: drop the trailer clause, matching wolf-lang
Cargo.lock ci: server lane runs replay+onetruth+fuzz when a binary resolves; nightly latency + 15-min fuzz sweep; divergences.toml ledger with DIV-LSP-001 filed
Cargo.toml license: GPL-3.0-or-later across the server and every client (D41 as amended)
LICENSE license: GPL-3.0-or-later across the server and every client (D41 as amended)
README.md docs: the prose pass — plainer sentences and true numbers (stale counts and stale claims about the upstream's releases and visibility, corrected against the source)
clippy.toml ls00: workspace, transcript matcher engine with normalization split, harness skeleton with five-state doctor, loud-SKIP acquisition (serves_lsp=false until the s52 pin bump), 3-OS CI; upstream pinned at ecea37c matching the vendored snapshot
deny.toml ls00: workspace, transcript matcher engine with normalization split, harness skeleton with five-state doctor, loud-SKIP acquisition (serves_lsp=false until the s52 pin bump), 3-OS CI; upstream pinned at ecea37c matching the vendored snapshot
divergences.toml harness: exit-code test inverted to its fixed form, raw-utf8 wire test, 28 transcripts re-recorded at the new pin
rust-toolchain.toml ls00: workspace, transcript matcher engine with normalization split, harness skeleton with five-state doctor, loud-SKIP acquisition (serves_lsp=false until the s52 pin bump), 3-OS CI; upstream pinned at ecea37c matching the vendored snapshot
rustfmt.toml ls00: workspace, transcript matcher engine with normalization split, harness skeleton with five-state doctor, loud-SKIP acquisition (serves_lsp=false until the s52 pin bump), 3-OS CI; upstream pinned at ecea37c matching the vendored snapshot
upstream @ 70bdd35 upstream: pin 70bdd35 (per-file publish + exit codes + files table live); DIV-LSP-001 closed — ledger empty, onetruth proves the cross-file publish arrives

wolf-lsp

the wolf mark

The wolf editor layer: clients, configs, conformance testing, and packaging for the wolf language server.

The engine is not here. The language server is wolf lsp, which is the wolf compiler itself serving the Language Server Protocol from the same code that compiles (one process, one truth; see wolf-lang's wolf_query contract). This repo makes editors speak to it:

  • the protocol conformance harness: recorded JSON-RPC session replay against wolf lsp, capability snapshots, latency budgets
  • maintained clients: fackr, facsimile, Neovim, VS Code
  • config tier: Helix, Zed, Emacs (eglot) · documented tier: JetBrains (LSP4IJ)
  • marketplace and packaging for all of the above

Which editors are supported, at what verification level, and when each was last checked: docs/MATRIX.md. Every row there names its CI job or says plainly that it has never been run.

Nothing here has been published anywhere. No marketplace listing, no Open VSX namespace, no wolf.nvim mirror, no registry entry, no tag. wolf-lang has since published v0.1.0 with an x86-64 linux tarball, and the other tier-1 platforms have no artifact yet. The pipelines exist and are exercised offline. They stop at gates that need a person:

docs/COMPAT.md which wolf each client works with, and the gate that keeps the claim earned
docs/DISTRIBUTION.md every channel, per ecosystem, and the human act each one waits on
docs/RELEASE.md the checklist, steps 0 through 9. Run it with cargo xtask release-check
docs/UPSTREAM.md every patch's status upstream, in five words, none of them "soon"

Sprint plan: the lsp track (lsNN) in the wolf metarepo. Licensed under GPL-3.0-or-later.

The harness

lspconf drives a real wolf lsp child process over stdio. Half of it needs no server and runs everywhere. The other half needs a binary at the pin, and skips loudly when there is none: exit 77, with the reason.

lspconf verify              transcripts and scripts: parseable, valid, canonical
lspconf profiles            capability profiles, and which clients are unread
lspconf doctor              the pin, the binary that won, the verdict
lspconf record <s.lsps>     drive a scripted session, write <s>.jsonl
lspconf rerecord [dir]      re-record every script beside its transcript
lspconf replay [path…]      drive recorded sessions, match per record
lspconf onetruth [sample…]  publishDiagnostics == conform-run, per sample (D34)
lspconf bench [--out F]     latency budgets, D5 JSONL (report-only)
lspconf fuzz [--seed N]     seeded partial-edit session, three oracles

A transcript (transcripts/**/*.jsonl) is a recorded JSON-RPC session, normalized so it fails when behavior changes and not when incidental output does. Beside each one is the script (.lsps) that produced it, so a re-record is one command and its diff is reviewable. Never hand-edit a transcript: lspconf verify refuses one that is not in canonical form, and one with no script beside it.

Running the server lane locally

CI cannot do this and is not supposed to. This repo never builds the compiler in CI: wolf-lang is a binary dependency here, so building the whole compiler in every job would be a multi-minute tax to produce something the acquisition step is meant to download (vendor/README.md has the long version). Locally it is three commands, once:

git submodule update --init upstream
cargo build --release -p wolf_driver --manifest-path upstream/Cargo.toml
export WOLF_BIN="$PWD/upstream/target/release/wolf"

Then cargo run --bin lspconf -- doctor should say READY, and everything above works:

cargo run --bin lspconf -- --require-server replay     # the transcript library
cargo run --bin lspconf -- --require-server onetruth   # D34, falsifiable
cargo run --bin lspconf -- --require-server fuzz regions.lu --seed 1
cargo test                                             # the gated suites go live

Without WOLF_BIN, resolution falls back to .wolf-bin/, the artifact cache CI uses, and then to wolf on PATH. doctor reports which one won, because "works on my machine" is usually a second wolf earlier in PATH.

When the build and the editor disagree

lspconf onetruth is D34 made falsifiable. For every sample it runs wolf conform-run --error-format=json and an LSP session over the same bytes, then asserts the diagnostics agree: same codes, same spans (through the negotiated position encoding), same messages, and reachable from some open document of the module.

A mismatch is a wolf-lang bug, filed upstream with both records attached. It is never normalized away here and never patched around. The editor layer detects divergence; hiding it would defeat the harness. divergences.toml is the ledger of the filed ones. An unfiled divergence fails the gate, and so does a ledger entry whose bug has been fixed.