Skip to content

Commit f716368

Browse files
docs(language-policy): mark V→Zig migration COMPLETE 2026-05-28 (#227)
## Summary Estate-wide V-lang→Zig remediation landed 2026-05-28 across 16 PRs. This PR syncs the canonical standards docs to reflect the completed state — previously they described an in-progress migration. ### Files updated - **`.claude/CLAUDE.md`** — Zig row broadened to "APIs/FFIs/gateways/client SDKs" with Idris2-owns-ABIs note; V-lang row cites the hypatia detection rule (`cicd_rules/vlang_detected` + `cicd_rules/vmod_detected` with `path_allow_prefixes`). - **`rhodium-standard-repositories/spec/LANGUAGE-POLICY.adoc`** — Zig + V-lang table entries marked completed; migration-strategy bullets show V-lang→Zig step as ✅ Done 2026-05-28. - **`cartridges/CARTRIDGE-FORMAT.adoc`** — adapter/ row: "V-lang or Deno adapter" → "Zig or Deno adapter". V-lang permitted only in interop-target subdirs (`v-cartridge`, `v-adapter`, `v-bindings`, `v-client`). ### Carve-outs spelled out The new rule's `path_allow_prefixes` covers five legitimate-presence classes: 1. **R&D**: `developer-ecosystem/v-ecosystem/` 2. **Toolchain installers**: `asdf-augmenters/.../plugins/vlang/`, `hyperpolymath-archive/asdf-vlang-plugin/`, `hyperpolymath-archive/v-deno/` 3. **Interop targets**: `/v-cartridge`, `/v-adapter`, `/v-bindings`, `/v-client` — *we don't write V; we expose our Zig/Rust/Idris2 work to V consumers* 4. **Archived repos**: `polystack/` 5. **Coq + Verilog disambiguator**: `/formal/`, `/theories/`, `/proofs/coq`, `/linguist/samples/`, `/HOL/examples/PSL/`, etc. ## Test plan - [ ] Cross-reference against hypatia rule's actual allowlist (`hypatia/lib/rules/cicd_rules.ex`) — they match - [ ] No remaining "migration is a direction" / "begin V-lang → Zig" language in any standards doc - [ ] CARTRIDGE-FORMAT diagram still readable after the multi-line adapter/ note 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4285741 commit f716368

3 files changed

Lines changed: 32 additions & 16 deletions

File tree

.claude/CLAUDE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ for the canonical statement.
3535
| **AffineScript** | Primary application code | Compiles to typed-wasm; affine/linear types. Replaces ReScript across the estate (RS/TS/JS → AffineScript → typed-wasm). |
3636
| **Deno** | Runtime & package management | Replaces Node/npm/bun |
3737
| **Rust/SPARK** | Performance-critical, systems, WASM, CLI tools, safety-critical | "Rust" always means "Rust/SPARK" per terminology note above. Preferred over Ada where reachable. |
38-
| **Zig** | FFI layer (hyperpolymath ABI/FFI standard), memory-safe systems where Rust/SPARK is overkill | Also the migration target for V-lang |
38+
| **Zig** | **APIs, FFIs, gateways, client SDKs (estate default 2026-05-28)**, memory-safe systems where Rust/SPARK is overkill | Zig is the estate-wide default for all API/FFI/gateway/client-SDK work unless explicitly special-cased; Idris2 owns ABIs. Completed V-lang→Zig migration 2026-05-28. |
3939
| **Idris2** | Formal verification (primary, ABI-style proofs) | ATS2 rejected. Proven-library status in `proven` repo. |
4040
| **Agda** | Formal verification (foundational / type-theoretic constructions) | Used by `hyperpolymath/echo-types` (loss-with-residue / proof-relevant fibers) and other foundational formalisations. Constructive only — no postulates in load-bearing tracks. |
4141
| **echo-types library** | Loss-with-residue formalism (Agda) | `hyperpolymath/echo-types` — canonical formalisation of `Echo f y := Σ (x : A) , (f x ≡ y)`. Cite from this lib rather than reinventing in downstream code. |
@@ -68,7 +68,7 @@ for the canonical statement.
6868
| Swift | Tauri/Dioxus | |
6969
| React Native | Tauri/Dioxus | |
7070
| Flutter/Dart | Tauri/Dioxus | Google lock-in |
71-
| **V-lang** | Zig | Banned 2026-04-10. "Too many things, and V does not live up to it." Detected via `v.mod` / `vpkg.json` (not `.v` files, because that collides with Verilog). Migration is a direction, not a rip-out. |
71+
| **V-lang** | Zig | Banned 2026-04-10; migration **COMPLETED 2026-05-28** across 16 PRs. Detected via hypatia `cicd_rules/vlang_detected` (`*.v` files) + `cicd_rules/vmod_detected` (`v.mod` manifest) with `path_allow_prefixes` mechanism for: v-ecosystem R&D carve-out, asdf-vlang toolchain installers, Coq proof scripts (`.v` shared with Coq + Verilog), interop targets (`/v-cartridge`, `/v-adapter`, `/v-bindings`, `/v-client` — where we expose work to V consumers without writing V), archived repos (`polystack/`). |
7272
| **ATS2** | Idris2 (formal), Rust/SPARK (safety-critical operational) | Rejected in favour of Idris2 and Rust/SPARK. |
7373
| **Makefiles** | Mustfile/justfile | |
7474

cartridges/CARTRIDGE-FORMAT.adoc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,13 @@ A cartridge directory at rest looks like:
3333
├── mod.js ← host entry point (calls loopback backend)
3434
├── abi/ ← Idris2 ABI definitions (REQUIRED for Teranga/Shield tier)
3535
├── ffi/ ← Zig FFI implementation
36-
├── adapter/ ← V-lang or Deno adapter (the running server)
36+
├── adapter/ ← Zig or Deno adapter (the running server). V-lang
37+
│ is permitted ONLY in interop-target subdirs
38+
│ named `v-cartridge`, `v-adapter`, `v-bindings`,
39+
│ or `v-client` (where we expose work to V
40+
│ consumers without authoring V). See the
41+
│ hypatia `cicd_rules/vlang_detected` rule's
42+
│ `path_allow_prefixes` allowlist.
3743
├── panels/ ← optional UI panels
3844
├── schemas/ ← cartridge-internal JSON schemas
3945
└── README.adoc

rhodium-standard-repositories/spec/LANGUAGE-POLICY.adoc

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,10 @@ NOTE: For full rationale and migration guides, see the link:{source-repo}[CCCP r
5555

5656
| *Zig*
5757
| FFI layer for the hyperpolymath ABI/FFI standard, memory-safe systems code where Rust/SPARK is overkill, and any work where Zig's C-ABI compatibility is load-bearing.
58-
| Replaces V-lang (see §Banned Languages). Zig is the target for migrating
59-
existing V-lang code over time.
58+
| Replaces V-lang. V-lang→Zig migration **completed 2026-05-28** across 16
59+
admin-merged PRs. Zig is the estate-wide default for APIs, FFIs, gateways,
60+
and client SDKs; Idris2 owns ABIs. See §Banned Languages for the V-lang
61+
policy and the hypatia detection rule.
6062

6163
| *Idris2*
6264
| Formal verification (sole option)
@@ -165,13 +167,19 @@ NOTE: For full rationale and migration guides, see the link:{source-repo}[CCCP r
165167

166168
| *V-lang*
167169
| Zig
168-
| Added 2026-04-10. "Too many things, and V does not live up to it." V-lang
169-
has not delivered on reliability, ecosystem depth, or performance relative
170-
to Zig. Migration target: Zig. The migration is a direction; existing V
171-
code is not being ripped out, but no new V code should be written. The
172-
prior `feedback_vlang_location.md` guidance ("stop remaking V-lang API
173-
triples") now reads as "stop remaking them, and migrate to Zig when
174-
touched." See §Amendments.
170+
| Added 2026-04-10. Migration **COMPLETED 2026-05-28** across 16
171+
admin-merged PRs (verisimdb#66 unified Zig port + 13 deletion PRs +
172+
hypatia#372/#373 detection rules + robodog-ecm#73 ABI relocation;
173+
also nextgen-databases#27 vendored-copy cleanup). Detection is via
174+
the hypatia rule `cicd_rules/vlang_detected` (matches `*.v`) and
175+
`cicd_rules/vmod_detected` (matches `v.mod`), each with a
176+
`path_allow_prefixes` field covering five carve-out classes:
177+
(1) v-ecosystem R&D, (2) asdf-vlang toolchain installers,
178+
(3) interop targets where we expose work to V consumers without
179+
authoring V (`/v-cartridge`, `/v-adapter`, `/v-bindings`,
180+
`/v-client`), (4) archived repos (`polystack/`), and
181+
(5) Coq + Verilog + linguist + echidna-fixtures disambiguator
182+
(`.v` is also Coq's and Verilog's source extension). See §Amendments.
175183

176184
| *ATS2*
177185
| Idris2 (for formal verification), Rust/SPARK (for safety-critical non-proof work)
@@ -227,10 +235,12 @@ everywhere" rule.
227235
When encountering banned languages:
228236

229237
1. *Immediate*: Block new code in banned languages
230-
2. *Short-term*: Convert TypeScript to ReScript; block new V-lang
231-
3. *Medium-term*: Replace Node/npm with Deno; begin V-lang → Zig migration on-touch
232-
4. *Long-term*: Rewrite Go/Python in Rust/SPARK; complete V-lang → Zig migration;
233-
absorb most Ada work into Rust/SPARK where Rust/SPARK is reachable
238+
2. *Short-term*: Convert TypeScript to ReScript (now AffineScript) → typed-wasm
239+
3. *Medium-term*: Replace Node/npm with Deno
240+
4. ✅ *Done 2026-05-28*: V-lang → Zig migration complete across the estate
241+
(16 admin-merged PRs; hypatia detection rule armed)
242+
5. *Long-term*: Rewrite Go/Python in Rust/SPARK; absorb most Ada work into
243+
Rust/SPARK where Rust/SPARK is reachable
234244

235245
== JavaScript / Node Ecosystem Policy
236246

0 commit comments

Comments
 (0)