Skip to content

2026-05-13 — Path A vs Path E vs Gap H

User direction confirmed both contracts matter:

  • Path A (deftest): prelude at OUTER top-level under do; parent shares prelude content
  • Path E (deftest-hermetic): prelude INSIDE the closure; strict isolation; parent untouched

User: “users must make a choice where their programs run.” The substrate enforces the contract via shape; both shapes ship.

Gap G attempted Path E shape; substrate rejected define-at-expression-position. Sonnet refined Path A→two flavors:

  • A-narrow: runtime local-env-frame registration (splits define semantics by position; rejected)
  • A-wide: closure-extraction lifts prelude defines into prologue (preserves “define = top-level registration” as single mental model; selected)

User decided: “A-wide is the path - let’s get it documented and in motion.”

The conceptual win in A-wide: define keeps its single meaning (top-level registration). The LIFT moves the form to where top-level processing happens. The substrate’s DefineInExpressionPosition rejection STAYS — never gets reached because the lift removes the form from expression position before eval sees it.