spec: embedding-abi-m1 — linkable artifact + scalar C entrypoint

Brainstorm complete for Embedding ABI M1 (first of the M1–M5 arc).
User-approved 2026-05-18. Grounding-check PASS on 3rd dispatch
(dispatch 1 false-BLOCK on an in-source unit test it missed;
dispatch 2 PASS + located the pin; dispatch 3 PASS after honest
prose correction).

7 design decisions pinned, all derived from the M1–M5 arc except
the one genuine fork the user decided:
- additive FnDef.export: Option<String> (FnDef.doc precedent)
- (export "<sym>") author-chosen, mangling-decoupled C symbol
- lib<entry>.a (program only) + separate libailang_rt.a
- no runtime lifecycle API — documented no-call contract
- --emit=staticlib suppresses @main + MissingEntryMain; needs >=1 (export)
- export-signature gate: scalar-only + effect-free (clause-3 discriminator)
- Task 1 fixed: MissingEntryMain build-path baseline pin (RED-first)

Roadmap M1 flipped [ ] -> [~]. Next: planner in a fresh session
(user-chosen session shape).
This commit is contained in:
2026-05-18 13:37:40 +02:00
parent 064599e091
commit 51160e99a6
2 changed files with 439 additions and 3 deletions
+11 -3
View File
@@ -129,7 +129,7 @@ work progresses.
## P1 — Next
- [ ] **\[milestone\]** Embedding ABI — M1: linkable artifact +
- [~] **\[milestone\]** Embedding ABI — M1: linkable artifact +
scalar C entrypoint + `main`-free lifecycle. First of a
five-milestone arc (M1M5) that makes a compiled AILang kernel
callable in-process from a concurrent Rust host, so a swarm of
@@ -178,8 +178,16 @@ work progresses.
arithmetic callable from C/Rust, proven by a host harness that
links the `.a`, calls the symbol, asserts the return.
- context: 2026-05-18 chat (`data-server` analysis →
embedding-ABI decomposition). No spec yet; brainstorm
produces `docs/specs/<date>-embedding-abi-m1.md` at M1 start.
embedding-ABI decomposition). Spec landed + user-approved
2026-05-18: `docs/specs/2026-05-18-embedding-abi-m1.md`
(grounding-check PASS on 3rd dispatch; 7 design decisions
pinned — additive `FnDef.export: Option<String>` /
`(export "<sym>")` mangling-decoupled symbol / `lib<entry>.a`
+ separate `libailang_rt.a` / no runtime lifecycle API /
`--emit=staticlib` suppresses `@main`+`MissingEntryMain` /
scalar+effect-free export gate / Task 1 fixed =
`MissingEntryMain` build-path baseline pin). Next: `planner`
in a fresh session (user-chosen session shape).
- [ ] **\[milestone\]** Embedding ABI — M2: per-thread runtime
context + concurrency safety. `ailang_ctx_new()/_free` threaded