Skip to content

Compile scoped expressions with SymbolSource compatibility - #96

Draft
robertvansteen wants to merge 11 commits into
demanded-inputsfrom
STRAT-733-symbol-compat-subprogram
Draft

Compile scoped expressions with SymbolSource compatibility#96
robertvansteen wants to merge 11 commits into
demanded-inputsfrom
STRAT-733-symbol-compat-subprogram

Conversation

@robertvansteen

@robertvansteen robertvansteen commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add lexical ScopedExpression compilation and evaluation for separately bound source bodies
  • delegate nested type environments so scoped bodies share the same structural declaration model
  • preserve deprecated SymbolSource compatibility, including namespaced member chains, while normalizing dependency identity to ReferencePath

Why

Some Axiom hosts need to compile a source body once and evaluate it repeatedly against a separately bound local record. ScopedExpression provides that lexical boundary without inventing another path representation or weakening the outer program's dependency analysis.

This capability is independent of Product Catalogue's Axiom #93 migration. It is stacked on #93 only because it extends the structural declaration and reference model introduced there.

Validation

  • full PHPUnit suite: 1,278 tests, 4,888 assertions, 100% line coverage (3,268 / 3,268)
  • PHPStan
  • Infection: 2,615 mutations, 100% MSI and mutation coverage
  • Pint

Depends on #93.

robertvansteen and others added 6 commits August 16, 2026 10:33
A declaration answered two questions from one fact: whether a value may
be absent, and whether the caller must supply one at all. The second was
derived from the first, so an absence-admitting type could always be
omitted — and a host with a "no value" answer could not tell the chosen
answer from no answer yet.

Input splits them. Input::of(Type) is the reading a bare Type already
has; Input::demanded(Type) keeps what the type says about absence and
overrides what it says about supply. Declarations normalize to Inputs at
ingestion, so inference is handed the same Type map as before.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@robertvansteen
robertvansteen force-pushed the STRAT-733-symbol-compat-subprogram branch from ba2080e to 965e7fe Compare August 17, 2026 12:19
@robertvansteen
robertvansteen force-pushed the STRAT-733-symbol-compat-subprogram branch from 965e7fe to 3e2c160 Compare August 17, 2026 13:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant