Testing, templates and release boundary
Backend parity
Use UniversalToolchain.Testing.LanguageContractSuite when two backends implement the same observable contract:
var result = LanguageContractSuite.RequireParity(
runtime,
"12.5 * 3 - 2.5",
new BackendId("interpreter"),
new BackendId("compiled"));The default comparer compares string representations. Supply a domain-specific comparer for floating-point tolerance, structured values or effects.
Minimum test matrix
A language package should test:
- successful package and definition compilation;
- missing feature/contribution diagnostics;
- dependency and ordering cycles;
- single-owner slot conflicts and explicit replacement;
- ambiguous and preferred capability providers;
- typed artifact mismatch rejection;
- one route per enabled backend;
- exact executor selection;
- runtime policy rejection;
PerSessionisolation and disposal;- interpreter/compiled parity where both backends claim the same semantics;
- clean package restore from only the produced NuGet artifacts.
The repository tests these contracts in UniversalToolchain.LanguageSdk.Tests, including external authoring, typed contracts, architecture regressions, lifecycle and canonicalization.
Template
The template project in this source revision declares 0.3.0-alpha.5 (see UniversalToolchain/UniversalToolchain.Templates/UniversalToolchain.Templates.csproj). The generic SDK family is currently documented as produced release artifacts rather than as a guaranteed NuGet.org publication.
The packable UniversalToolchain.Templates project provides ut-language. The command below requires a reviewed locally produced candidate package at the shown path; ordinary source checkout or ./build.sh --skip-pack does not create it. For a checkout-only walkthrough, run the Acme sample instead.
dotnet new install ./artifacts/packages/UniversalToolchain.Templates.0.3.0-alpha.5.nupkg
dotnet new ut-language -n Example.LanguageTemplate token replacement covers package, language, feature, contribution, runtime and artifact identifiers. The release smoke verifies that generated projects do not retain Acme.Pricing or Wist identifiers.
Package family
The language-authoring release matrix includes separate packages for abstractions, feature metadata, planning, authoring, runtime, testing, templates and the Wist language pack. Use the smallest set that owns your contract; do not reference Wist packages from an independent language unless you intentionally adapt Wist.
Alpha boundary
Implemented now:
- typed low-level authoring;
- deterministic planning and schema-v6 lock snapshot (feature-package manifests use schema v5);
- cross-package runtime assembly;
- route execution and exact backend selection;
- runtime policy validation and component lifecycle;
- independent non-Wist sample and template.
Not implemented as a high-level product surface:
- grammar generation;
- parser/binder DSL;
- automatic operation/type-system authoring;
- IDE/editor integration;
- compatibility guarantees for the generic API across all future alphas;
- hardened execution of hostile third-party packages.