Skip to content

Commit f42d9b8

Browse files
feat(spec): add ARG + TRG + FRG + CRG profiles for typed-wasm (#87)
## Summary Adds the four-axis maturation grading for typed-wasm, scored against the framework introduced in hyperpolymath/standards#232 (ARG + FRG) and the templates introduced in hyperpolymath/standards#229 (TRG + CRG profile templates). typed-wasm is treated as a **language-shaped compilation target**: it has a defined grammar (binary + textual per `spec/grammar.ebnf`), instruction AST, operational semantics (per `spec/type-safety-levels-for-wasm.adoc`), a layered type system (L1-L17 per `LEVEL-STATUS.md`), and a runtime contract. "Adoption" means *downstream languages targeting it as a compilation backend* (ephapax, AffineScript). ## Grades | Axis | Grade | Headline reason | |------|-------|-----------------| | ARG | **D** | README/EXPLAINME/QUICKSTART + 6 example `.twasm` + 3 consumer-feature surfaces. No public playground / error-code index / educator curriculum. | | TRG | **C** | Front-end + middle-end + back-end strong; T1-T5 N/A (target, not compiler). 88/88 parser tests pass at v1.5. | | FRG | **C** | 22 Idris2 files at `src/abi/` with QTT linearity + dependent types, zero `believe_me`/`assert_total` in ABI files, A10 closure landed PR #79. Gated below B by absence of explicit L1-L10 preservation lemmas per `PROOF-NEEDS.md`. | | CRG | **D** | `typed-wasm-verify` v0.1.0 (workspace-internal, not yet on crates.io). Idris2 ABI surface at C (consumed as source). | Cross-axis rule: ARG ≤ TRG holds (TRG = C ≥ ARG = D). typed-wasm becomes the **strongest of the audit cohort on FRG** (versus ephapax-D, AffineScript-E, my-lang-X) and ties ephapax at TRG-C. ## Honest gaps for grade promotion - **B** for TRG/FRG requires per-level preservation lemmas for L1-L10 (currently structural only); L11/L12 still draft. - **C** for ARG requires a published error-code index + web playground + VeriSimDB attestation. - **C** for CRG requires `audits/audit-typed-wasm-verify.md` + VeriSimDB attestation. ## Test plan - [ ] CI passes - [ ] `.adoc` renders cleanly - [ ] Grade-line regex from `nextgen-languages/language-status-tracker.jl` matches each `*<GRADE>*` correctly - [ ] No SPDX-header lint complaints 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent e353751 commit f42d9b8

4 files changed

Lines changed: 862 additions & 0 deletions

File tree

spec/ARG-PROFILE.adoc

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
4+
= ARG-PROFILE — typed-wasm
5+
:toc: left
6+
:toclevels: 2
7+
8+
[cols="1,3"]
9+
|===
10+
| Field | Value
11+
12+
| Artefact | typed-wasm (compilation target, language-shaped)
13+
| Repository | https://github.com/hyperpolymath/typed-wasm
14+
| Current ARG Grade | *D* (X \| F \| E \| D \| C \| B \| A)
15+
| Assessed | 2026-05-28
16+
| Assessor | Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
17+
| ARG Spec Version | 1.0
18+
| TRG Profile | spec/TRG-PROFILE.adoc
19+
| FRG Profile | spec/FRG-PROFILE.adoc
20+
| CRG Profile | spec/CRG-PROFILE.adoc
21+
|===
22+
23+
== About this profile
24+
25+
typed-wasm is not a user-facing language but a *language-shaped
26+
compilation target*: it has a defined grammar (binary + textual
27+
form per `spec/grammar.ebnf`), instruction AST, operational
28+
semantics (per `spec/type-safety-levels-for-wasm.adoc`), a layered
29+
type system (L1-L10 checked, L11-L12 draft, L13-L16 live in v1.4
30+
and v1.5 per `LEVEL-STATUS.md`, L17 reserved), and a runtime
31+
contract (WebAssembly executor + verifier crate). ARG applies to
32+
it the same way it applies to a language, with the understanding
33+
that *"adoption"* means *"downstream languages targeting it as a
34+
compilation backend"* rather than end-users writing it.
35+
36+
ARG = *D*. The full chain of axes:
37+
38+
* ARG: *D* (this profile)
39+
* TRG: *C* (per `spec/TRG-PROFILE.adoc`)
40+
* FRG: *C* (per `spec/FRG-PROFILE.adoc` — 22 Idris2 verifier files
41+
with QTT linearity + dependent types; A10 closure landed PR #79
42+
inhabiting `VerifierSpecAgreement` + `SourceVerifierAgreement`)
43+
* CRG: *D* (per `spec/CRG-PROFILE.adoc`; `typed-wasm-verify` v0.1.0
44+
not yet on crates.io)
45+
* RSR: Compliant at TRG-C level
46+
47+
Cross-axis rule: ARG ≤ TRG holds (TRG = C ≥ ARG = D). ARG can
48+
climb to C without TRG promotion because TRG is already C.
49+
50+
== Grade rationale (evidence for D)
51+
52+
[cols="2,1,4", options="header"]
53+
|===
54+
| Criterion | Met? | Evidence
55+
56+
| *D1 — Landing page / README*
57+
| YES
58+
| `README.adoc` (sectioned: Specification and surface syntax / Proofs and implementation / Examples / Status and strategy) + `EXPLAINME.adoc` + `QUICKSTART.adoc`.
59+
60+
| *D2 — Elevator pitch*
61+
| YES
62+
| README header pitches typed-wasm as a layered safety-bearing compilation target for hyperpolymath languages.
63+
64+
| *D3 — Provenance*
65+
| YES
66+
| `LICENSE` (MPL-2.0), `CHANGELOG.md`, `LEVEL-STATUS.md` tracks active version (v1.5), `Cargo.toml` workspace shape.
67+
68+
| *Required TRG grade (ARG-D ⇒ TRG ≥ D)*
69+
| YES
70+
| TRG-C — see spec/TRG-PROFILE.adoc.
71+
72+
| *Onboarding O1 — 5-minute hello-world*
73+
| PARTIAL
74+
| `examples/01-single-module.twasm` + 5 more example modules; consumer-side QUICKSTART exists but not measured against a 5-minute floor.
75+
76+
| *Onboarding O2 — Tutorial covering distinctive features*
77+
| YES
78+
| The 6 example `.twasm` files cover module structure, multi-module, ownership/linearity, ECS, tropical cost, epistemic sync — the load-bearing safety dimensions.
79+
80+
| *Onboarding O3 — Playground*
81+
| PARTIAL
82+
| `examples/web-project-deno.json` ships a runnable Deno-based playground harness; no public web playground yet.
83+
84+
| *Onboarding O4 — Cookbook in ≥ 2 substantive domains*
85+
| YES
86+
| `features/{boj-server,panic-attacker,ssg}/` — three substantive consumer surfaces; examples span 6 domains.
87+
88+
| *Reference R1 — Reference manual*
89+
| YES
90+
| `spec/type-safety-levels-for-wasm.adoc` (load-bearing) + `spec/L13-L16-reserved-syntax.adoc` + `spec/async-convergence-abi.adoc` + `docs/proposals/`.
91+
92+
| *Reference R2 — Stdlib reference*
93+
| YES
94+
| `src/abi/Layout/Stdlib.idr` — typed stdlib surface declared at Idris2 level.
95+
96+
| *Reference R3 — Formal grammar*
97+
| YES
98+
| `spec/grammar.ebnf` (load-bearing) + parsing handled by `Parser.affine` in the AffineScript surface.
99+
100+
| *Reference R4 — Operational/denotational semantics*
101+
| YES
102+
| `spec/type-safety-levels-for-wasm.adoc` covers the per-level operational semantics. Mechanised semantics in 22 Idris2 files at `src/abi/`.
103+
104+
| *Reference R5 — Stable error-code index*
105+
| NO
106+
| Verifier errors are typed (`thiserror`-based) but no public error-code index.
107+
108+
| *Community C1-C5*
109+
| PARTIAL
110+
| CONTRIBUTING + CoC + SECURITY present. Discussion venues + RFC list partial: `docs/proposals/0001-*.md`, `docs/proposals/0002-*.md` are the current RFC process.
111+
112+
| *Distribution Δ1-Δ5*
113+
| PARTIAL
114+
| `Cargo.toml` ships `typed-wasm-verify` v0.1.0 (unpublished). SemVer policy implicit. No deprecation log. `SECURITY.md` present.
115+
116+
| *Education E1-E4 (grade-dependent)*
117+
| NO
118+
| No curriculum / external educators.
119+
120+
| *Ecosystem X1-X4 (grade B+)*
121+
| PARTIAL
122+
| 2 known consumer languages (ephapax via `ephapax-syntax` git-dep; AffineScript via Parser.affine integration). Below the B threshold.
123+
124+
| *Diversity metrics (grade C+)*
125+
| NO
126+
| Single-maintainer; no diversity surface.
127+
128+
| *VeriSimDB attestation (grade C+)*
129+
| NO
130+
| typed-wasm not yet `DECLARE`'d.
131+
132+
| *Founder bus-factor test (grade A only)*
133+
| N/A
134+
| Not at grade A.
135+
|===
136+
137+
== Language-specific tightening (this profile only)
138+
139+
ARG §1.1 permits per-language tightening. For typed-wasm:
140+
141+
* *Grade C tightening:* Every level L1-L17 MUST be either checked
142+
(with a status entry in `LEVEL-STATUS.md`) or explicitly
143+
reserved (not silently absent). Currently met: v1.5 ships
144+
L1-L10 + L13-L16 checked, L11-L12 draft-only, L17 reserved.
145+
* *Grade B tightening:* At least one consumer language MUST run
146+
its own CI as a typed-wasm consumer (i.e. typed-wasm release
147+
changes are surfaced as CI failures in the consumer).
148+
* *Grade A tightening:* Registered VeriSimDB instance + third-
149+
party language adopter not maintained by hyperpolymath.
150+
151+
== What is NOT yet met (honest gaps)
152+
153+
* No public error-code index (R5).
154+
* No public playground beyond the Deno harness.
155+
* No educator-facing curriculum.
156+
* Below the B-threshold for downstream consumer count (2 known).
157+
* No VeriSimDB attestation.
158+
159+
== Path to next grade (*C*)
160+
161+
* Publish error-code index. (~1 week)
162+
* Publish a web playground. (~3-4 weeks)
163+
* Land VeriSimDB attestation. (~1 week)
164+
* Document the implicit RFC process at `docs/proposals/` as a
165+
discoverable contributor surface. (~1 week)
166+
167+
*Realistic timeline estimate:* 6-8 weeks.
168+
169+
== Path to grade beyond that (*B*)
170+
171+
* Land ≥6 downstream language consumers (or document with rationale
172+
why typed-wasm is a hyperpolymath-internal target and the
173+
≥6-target metric is interpreted as ≥6 downstream surfaces such
174+
as `features/{boj-server,panic-attacker,ssg}/`).
175+
* Consumer-language CI integration.
176+
177+
== Demotion risk
178+
179+
* *Lowest:* `typed-wasm-verify` CI flips to red.
180+
* *Medium:* A verifier-level regression invalidates a closed proof
181+
obligation (e.g. A10's `VerifierSpecAgreement` regresses).
182+
* *Catastrophic:* A consumer (ephapax or AffineScript) is broken
183+
by a typed-wasm release and the breakage is not rolled back.
184+
185+
== Iteration history
186+
187+
[cols="1,1,4", options="header"]
188+
|===
189+
| Date | Grade | Notes
190+
191+
| 2026-05-28 | D | Initial ARG assessment per ARG v1.0. Compilation target treated as language-shaped artefact.
192+
|===
193+
194+
== Review cycle
195+
196+
* *Routine:* Reassess on every release cycle (per ARG §6).
197+
* *Immediate:* Reassess within 7 days of any demotion trigger.
198+
* *VeriSimDB drift alert:* Reassess within 24 hours.
199+
200+
== Footer
201+
202+
Run `just arg-badge` in this repo to generate the shields.io badge.

0 commit comments

Comments
 (0)