You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: remove residual dead V-lang wiring (Justfile/CI/scripts/docs) (#68)
## Summary
PR #66 (merged) removed only the V-lang **CI jobs**. The repo still had
live dangling V-lang references with no backing source — `adapter/v/`
was deleted in the prior 2026-04-12 V-lang sweep, and the real
REST/gRPC/GraphQL surface is the **Elixir backend** (`elixir/`,
Plug/Cowboy). No V port was ever needed. This PR finishes the
dead-leaf cleanup.
## What was removed / fixed
**Justfile**
- Deleted the `build-adapter` recipe entirely.
- `run` / `serve` / `install` now use only the existing Elixir path; the
dead V `else` fallback branches were dropped (no new behavior — the
Elixir branch was already the preferred path). `install` no longer
copies a non-existent V binary.
- `heal`: removed the `git clone https://github.com/vlang/v` + `make` +
symlink block.
- `doctor`: dropped `check_optional "V (vlang)"` and the
`adapter/v/boj-server` artefact check (now checks `elixir/`).
- `matrix` / `tour` / `help-me`: cosmetic V status echoes repointed to
the Elixir reality. All recipes remain syntactically valid.
**CI**
- `.github/workflows/lsp-dap-bsp.yml`: deleted the `adapter-check` job
(it ran `v check`; missed by PR #66) and removed it from the
`completeness` job's `needs:` so the workflow stays valid.
- `.github/workflows/e2e.yml`: deleted the dead `Build V adapter` step
(`cd adapter/v && v -o boj-server .`).
**scripts / tests / docs**
- `tests/e2e_full.sh`, `tests/federation_multinode.sh`: launch the
Elixir backend (`cd elixir && mix run --no-halt`) instead of the
non-existent `adapter/v/boj-server`.
- `tests/aspect_tests.sh`: removed the dead V-lang ABI-contract aspect
and the V-file SPDX loop; cartridge-completeness check is now ABI+FFI;
aspects renumbered consistently.
- `scripts/boj-selinux-contexts.sh`: removed the dead V binary fcontext
rule; renumbered the remaining two steps.
- `docs/RSR_OUTLINE.adoc`, `docs/QUICKSTART.md`,
`docs/GETTING-STARTED.md`, `docs/outreach/blog-post-draft.md`,
`docs/wiki/Developer-Guide.md`, `docs/wiki/User-Guide.md`,
`.github/DISCUSSION_TEMPLATE/cartridge-proposal.yml`, `.gitignore`,
`0-AI-MANIFEST.a2ml`: dead `adapter/v/` path references and stale
three-layer-stack wording corrected to the Elixir+Zig reality.
## Why no port was needed
The Elixir backend already exists as the canonical Class-3 REST/gRPC/
GraphQL surface; the V-lang adapter layer was retired estate-wide on
2026-04-10 and its `.v` files removed 2026-04-12. These were dangling
references only.
## Intentionally left untouched
- `CHANGELOG.md`, `ROADMAP.adoc`, `.machine_readable/6a2/*`,
`.machine_readable/servers/order-ticket.a2ml` — these **document the
V-lang retirement as history**; not drift.
- `Intentfile` / `Mustfile` Unbreakable-Stack ban-enforcement assets —
protected estate-rule surface, out of scope.
- Per-cartridge `*_adapter.zig` provenance comments and cartridge
`README.adoc` adapter-language tables — accurate Zig-replacement
provenance / a much larger doc surface outside this bounded
dead-leaf cleanup.
## Validation
```
=== YAML safe_load ===
OK .github/workflows/lsp-dap-bsp.yml
OK .github/workflows/e2e.yml
OK .github/DISCUSSION_TEMPLATE/cartridge-proposal.yml
=== just --list ===
just --list OK (107 lines) # build-adapter absent, all recipes intact
=== bash -n on edited shell scripts ===
OK tests/e2e_full.sh
OK tests/federation_multinode.sh
OK tests/aspect_tests.sh
OK scripts/boj-selinux-contexts.sh
=== a2ml sanity ===
0-AI-MANIFEST.a2ml — parens balanced
```
16 files changed, +98 / -248.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: hyperpolymath <hyperpolymath@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/outreach/blog-post-draft.md
+3-4Lines changed: 3 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -62,7 +62,7 @@ The typical developer server is Python or TypeScript. BoJ uses none of those. In
62
62
|-------|----------|-----|
63
63
| ABI | Idris2 | Prove the interface is correct |
64
64
| FFI | Zig | Execute it natively |
65
-
| Adapter |V-lang| Serve it over the network |
65
+
| Adapter |Elixir| Serve it over the network |
66
66
67
67
**Why Idris2?** Because it has dependent types. Not "type-safe" in the TypeScript sense. Actually provably correct at compile time. The core safety gate is a type called `IsUnbreakable` -- it's a mathematical proof that only cartridges in the `Ready` state can be activated. The type checker enforces this, not a runtime check, not a unit test. If the proof doesn't hold, the code doesn't compile.
68
68
@@ -78,7 +78,7 @@ You literally cannot call `mount` on a cartridge that isn't `Ready`. The type sy
78
78
79
79
**Why Zig?** Because it produces C-ABI-compatible shared libraries with zero runtime dependencies. Each cartridge compiles to a `.so` file. The Zig layer bridges Idris2's proofs with actual system calls -- file I/O, networking, database connections. Cross-compilation is built in, which matters when community members run nodes on ARM, x86, or whatever they have.
80
80
81
-
**Why V-lang?** Because one V codebase exposes all three API styles (REST + gRPC + GraphQL) on dedicated ports. One language, three protocols, no code generation step.
81
+
**Why Elixir?** Because one Elixir codebase on the BEAM (Plug/Cowboy) exposes all three API styles (REST + gRPC + GraphQL) on dedicated ports, with the fault-tolerance and concurrency the BEAM is known for. One runtime, three protocols, no code generation step.
82
82
83
83
The result: a compact binary. 219 Zig tests + 8 integration tests + 32 seam checks. Thread-safe (every FFI entry point serialises on a per-module mutex). No virtualenvs, no node_modules, no pip install.
0 commit comments