Skip to content

Commit aac4261

Browse files
hyperpolymathclaude
andcommitted
docs(faces): mark CafeScripto + LucidScript established; add brand-repo + same-cube grounding
faces.adoc was stale: the Active Faces table listed only Canonical/Python/JS/ Pseudocode, and CoffeeScript sat under Roadmap — but CafeScripto (CoffeeScript) and LucidScript (PureScript/Haskell) now ship as established faces (see examples/faces/README.adoc and the brand repos). Add both to Active Faces; retitle the CoffeeScript roadmap section as shipped (only ActionScript remains roadmap); add a brand-surface-repo table and a Same-cube grounding section recording the invariant-path verifier + the grounded transformer-consistency finding (trailing-statement lowering splits the faces into two wasm classes). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KPG9mEQXFyA3k7NWAzMNMr
1 parent 58dc2a0 commit aac4261

1 file changed

Lines changed: 53 additions & 4 deletions

File tree

docs/specs/faces.adoc

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,64 @@ The compiler is face-agnostic throughout. The two face-aware layers are:
7171
| `--face pseudocode` or `--face pseudo`
7272
| `.pseudoaff`
7373
| Beta (2026-04-11)
74+
75+
| Lucid (PureScript / Haskell)
76+
| `--face lucid`
77+
| `.lucidaff`
78+
| Beta (2026-06)
79+
80+
| Cafe (CoffeeScript)
81+
| `--face cafe` or `--face coffee`
82+
| `.cafeaff`
83+
| Beta (2026-06)
84+
|===
85+
86+
=== Brand-surface repos
87+
88+
Each non-canonical face has a brand-surface repo — examples, community docs,
89+
migration guides, and a `bin/<face>` shim that injects `--face`. The compiler,
90+
type checker, borrow checker, and codegen live only here in affinescript; the
91+
brand repos carry no compiler.
92+
93+
[cols="1,2,2", options="header"]
7494
|===
95+
| Face | Brand repo | Transformer
96+
97+
| RattleScript (Python) | `hyperpolymath/rattlescript` | `lib/python_face.ml`
98+
| JaffaScript (JS / TS) | `hyperpolymath/jaffascript` | `lib/js_face.ml`
99+
| PseudoScript (pseudocode) | `hyperpolymath/pseudoscript` | `lib/pseudocode_face.ml`
100+
| LucidScript (PureScript) | `hyperpolymath/lucidscript` | `lib/lucid_face.ml`
101+
| CafeScripto (CoffeeScript) | `hyperpolymath/cafescripto` | `lib/cafe_face.ml`
102+
|===
103+
104+
=== Same-cube grounding
105+
106+
The "different faces, same cube" claim is grounded by
107+
`hyperpolymath/invariant-path` (the `faces` profile + `scripts/verify-same-cube.sh`),
108+
which compiles one program written in every face to typed-wasm and compares the
109+
modules. Per-face snapshot stability is covered separately by
110+
`tools/run_face_transformer_tests.sh` (currently 6/6 green).
111+
112+
*Known transformer-consistency item (grounded 2026-06-18):* on the `greet`
113+
corpus the six faces compile to *two* wasm modules — `{canonical, jaffa, cafe}`
114+
vs `{rattle, pseudo, lucid}` — because the transformers disagree on
115+
trailing-statement lowering (statement `{ println(x); }` vs tail-expression
116+
`{ println(x) }`). The programs are observationally identical (same output,
117+
same unit return) but the wasm is not byte-identical. Making the transformers
118+
agree on trailing-statement lowering would yield byte-level same-cube.
75119

76120
== Roadmap Faces
77121

78-
These faces are on the roadmap but have not been designed in detail. The
79-
face architecture makes implementation cheap once the surface mapping is
80-
settled; the bottleneck is design, not code.
122+
ActionScript-face remains on the roadmap (CoffeeScript has since shipped as
123+
CafeScripto — see Active Faces above). The face architecture makes
124+
implementation cheap once the surface mapping is settled; the bottleneck is
125+
design, not code.
126+
127+
=== CoffeeScript-face — SHIPPED as CafeScripto
81128

82-
=== CoffeeScript-face (strategic priority)
129+
NOTE: This face is now *established* (`lib/cafe_face.ml`, `--face cafe`; see the
130+
Active Faces table and `hyperpolymath/cafescripto`). The design notes below are
131+
retained as historical reference; only ActionScript-face remains on the roadmap.
83132

84133
*Rationale:* CoffeeScript has a loyal displaced community that never loved
85134
JavaScript and were forced away when the ecosystem moved on. Their syntax

0 commit comments

Comments
 (0)