Files
rose-ash/lib/scheme/scoreboard.md
giles 680cdf62aa
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 33s
scheme: Phase 11 — test.sh + scoreboard
lib/scheme/test.sh — single-process test runner. Loads parser/eval/
runtime + lib/guest/reflective/env.sx once, then for each test
suite loads its file and calls its (*-tests-run!) function. Parses
the {:passed N :failed N ...} dict output and aggregates.

Usage:
  bash lib/scheme/test.sh        # summary
  bash lib/scheme/test.sh -v     # per-suite breakdown

Output: "ok 296/296 scheme-on-sx tests passed (9 suites)"

lib/scheme/scoreboard.md — per-suite passing counts, phase status,
deferred items, reflective-kit consumption ledger.

The scoreboard documents the chisel value of the Scheme port:
three reflective kits unlocked (env.sx — already extracted with
Scheme as third consumer; evaluator.sx + quoting.sx — second-
consumer-ready for extraction whenever a follow-up commit is run).

Loop status: 11 phases done (1, 2, 3, 3.5, 4, 5abc, 6ab, 7, 8, 9,
10, 11). Two deferred (6c hygiene, full call/cc-wind interaction).

296 tests, 1830 LoC of Scheme implementation. Zero substrate fixes
required across the loop.
2026-05-14 06:52:58 +00:00

4.1 KiB

Scheme-on-SX Scoreboard

All tests pass: 296 / 296 across 9 suites.

Per-suite breakdown

Suite Passing Covers
parse 62 R7RS lexer: numbers, strings, chars, vectors, lists, quote/quasi/unquote, line/block/datum comments
eval 23 Self-evaluating literals, symbol lookup, quote, primitive application
syntax 49 if/define/set!/begin/lambda/closures + let/let*/cond/when/unless/and/or
runtime 78 Standard env: variadic arithmetic, type predicates, list/string/char/vector ops, higher-order combinators
control 25 call/cc (escape), raise/guard/with-exception-handler, dynamic-wind
macros 20 define-syntax / syntax-rules incl. tail-rest ellipsis
reflection 23 eval / interaction-environment / null-environment / scheme-report-environment + quasiquote runtime
records 9 define-record-type with constructor / predicate / accessor / mutator
modules 7 define-library + import (minimal — no cond-expand / include / rename)

Phases implemented

  • Phase 1 — Parser
  • Phase 2 — Evaluator + env.sx third consumer
  • Phase 3 — Syntactic operators (if/lambda/define/set!/begin)
  • Phase 3.5 — let/let*/cond/when/unless/and/or
  • Phase 4 — Standard environment + set! cond-bugfix
  • Phase 5a — call/cc
  • Phase 5b — exceptions (raise/guard/with-exception-handler/error)
  • Phase 5c — dynamic-wind (basic, no call/cc-escape tracking)
  • Phase 6a — define-syntax + syntax-rules (no ellipsis)
  • Phase 6b — syntax-rules ellipsis (tail-rest, single variable)
  • Phase 7 — eval / interaction-environment second consumer for evaluator.sx
  • Phase 8 — define-library + import (minimal)
  • Phase 9 — define-record-type
  • Phase 10 — quasiquote runtime second consumer for quoting.sx
  • Phase 11 — test.sh + scoreboard

Deferred

  • Phase 6c — hygiene (scope-set / lifted-symbol Dybvig-style algorithm). Would be the second consumer for the deferred lib/guest/reflective/hygiene.sx research-grade kit. Current macros work for common patterns but can capture caller bindings if a macro introduces same-named identifiers.

  • Nested quasiquote depth tracking`\`x\` is not properly depth-aware; matches Kernel's deferred state.

  • R7RS module rich features: cond-expand, include, include-library-declarations, (only ...) / (except ...) / (prefix ...) / (rename ...) import sets.

  • Dotted-pair (a b . rest) syntax at the parser level. Lambda rest-args currently use the (lambda args ...) form (bare symbol) instead.

  • Full call/cc + dynamic-wind interaction: re-entry/re-exit of dynamic extents via continuations is not tracked. Pure-eval programs work; call/cc- heavy code with dynamic-wind interleaving doesn't.

Reflective-kit consumption (chisel ledger)

This Scheme port unlocks three reflective-kit extractions from the kernel-on-sx loop's original six-candidate list:

Kit Status
env.sx Extracted (third consumer; no adapter)
class-chain.sx n/a (no OO in Scheme)
evaluator.sx Unblocked (second consumer ready)
quoting.sx Unblocked (second consumer ready)
hygiene.sx Awaiting Phase 6c (research-grade)
combiner.sx n/a (no fexprs in Scheme)
short-circuit.sx n/a (Scheme and/or are syntactic, not operative)

The kit-extraction commits themselves are follow-on work — kit code is staged in the proposed sections of plans/kernel-on-sx.md; Scheme's consumer code satisfies the two-consumer rule for evaluator.sx and quoting.sx.

Substrate stats

  • parser.sx — 281 LoC
  • eval.sx — ~970 LoC
  • runtime.sx — ~580 LoC
  • Tests — ~1500 LoC across 9 files

Total Scheme implementation ≈ 1830 LoC.