Skip to main content

AILANG 1.x Stability Promise

RATIFICATION: pending (Mark, at release). The tier semantics below are frozen by the M-V1-STABILITY-PROMISE design doc. The per-module / per-command tier assignments are drafted from usage evidence and require human ratification before the v1.0.0 tag. Rows marked ⚠ proposed are the ones most likely to move at ratification. This is a release-gate line-item, not a merge blocker.

This page defines what a consumer — a human developer or an AI coding agent — may rely on across AILANG's 1.x releases. A 1.0.0 without a written compatibility contract is a version number, not a promise; this is the promise.

Tiers

AILANG classifies every public surface into exactly one of three tiers.

TierPromiseMarked in docs
StableCovered by the 1.x promise. A breaking change requires a major version bump.(default; listed below)
ExperimentalShipped and usable, but may change in a 1.x minor with a CHANGELOG entry.Explicitly listed as Experimental.
InternalNo promise. May change or be removed at any time. Listed here only so absence is unambiguous.Explicitly listed as Internal.

What "Stable" means in 1.x

  • No breaking changes to the Stable surface within 1.x minor releases. Behavior, signatures, and semantics of Stable syntax, stdlib functions, and CLI commands are held constant across 1.0 → 1.1 → …. Breaking any of them requires 2.0.
  • Experimental surface may change in a minor — but only with an explicit CHANGELOG entry describing the change and migration.
  • Deprecations live ≥1 minor before removal. A Stable item slated for removal is first marked deprecated (in docs and, where tooling supports it, at compile time) and remains functional for at least one full minor release before it can be removed in a subsequent major.
  • Additive changes are always allowed. New stdlib modules, new CLI commands, new optional flags, and new syntax sugar may land in any minor — they do not break existing programs.

Criteria used to draft the assignments

An item is drafted Stable when all hold: documented in the canonical reference / teaching prompt, exercised by examples/ and/or the eval suite, and carrying no open P0 defect. Items that are newer, niche, or still evolving are drafted Experimental (the cheap direction to be wrong in — an Experimental item can be promoted later without breaking anyone). Development/diagnostic surface with no consumer contract is Internal.

Syntax surface

The Stable syntax set is defined by reference to the canonical teaching prompt / language reference rather than re-enumerated here (single source of truth):

  • Canonical reference: ailang prompt --source=embedded (embedded prompt version v0.16.2 at the time of writing).
  • The Stable syntax constructs are those documented as current in that reference: modules and imports, func / pure func declarations, let … in and block-body { … ; … } forms, lambdas (\x. …), if/then/else, brace-form match with pattern guards, algebraic data types, records and row-polymorphic record access, effect rows (! {IO, FS, …}), the ::/++ list operators, string interpolation ("${expr}"), and requires/ensures contracts.
  • Retired syntax is not Stable and is rejected by the parser — e.g. the ML/Haskell match … with | … form now produces PAR019 ("match ... with is not valid AILANG syntax"). Use brace-form match x { pat => expr, … }.
  • Experimental syntax: the effect-refinement surface (parameterised effects / capability refinement) is Experimental-pending its own decomposition; typed quasiquotes and the ? error-propagation operator are not yet implemented (see Known Limitations).

Stdlib surface

Enumerated from ls std/*.ail (42 top-level modules) plus the subdir module std/ai/streaming.ail. Every module appears in exactly one tier.

Stable stdlib

ModulePurposeEvidence
std/ioConsole input/output142 example files; core effect surface
std/listLinked-list operations43 example files
std/resultError handling (Ok/Err)41 example files
std/optionOptional values (Some/None)29 example files
std/stringString manipulation36 example files
std/jsonJSON encoding/decoding16 example files; ships decode/encode
std/mathMathematical functionsdocumented; core numerics
std/fsSandboxed file system8 example files; capability-gated
std/envEnvironment variables (secure snapshot)8 example files
std/clockTime operations (virtual-time deterministic)4 example files
std/randRandom number generation4 example files
std/arrayFixed-size arrays, O(1) access3 example files
std/mapHash maps, O(1) lookup2 example files
std/bytesByte-slice operations5 example files
std/iterIteration control primitivesdocumented; general-purpose
std/datetimePure date/time operationsdocumented; pure

Experimental stdlib

May change in a 1.x minor with a CHANGELOG entry.

ModulePurposeWhy Experimental
std/aiAI as a typed effect (call, callJson, step)surface still evolving with the agent loop
std/ai/streamingStreaming AI responsesnew; narrow usage
std/netNetwork operations⚠ proposed — widely used (13 examples) but security/format-sensitive; held Experimental pending a network-surface review
std/netparseUrl / parseQueryPure RFC-3986 URL parsing (URL → Url record; query string → {name,value} pairs)new (v0.30.0); pure, no Net capability; Url record shape may evolve; parseQuery is order-preserving (deliberately not Go's sorted url.ParseQuery)
std/streamAsync stream sources / selectEventsconcurrency-adjacent; evolving
std/secretGated secret resolution (M-SECRET-EFFECT, v0.26.0)new effect (v0.26.0)
std/cognitionCognitive-OS message fabric (M-COG-RUNTIME)named Experimental in design doc
std/domCognitive-OS DOM substrate (M-COG-RUNTIME)named Experimental in design doc
std/gameGame-development utilitiesnamed Experimental in design doc
std/extensionHelpers for AILANG extension packagesnamed Experimental in design doc
std/semSemantic-caching types (M-DX15)named Experimental in design doc
std/sharedmemShared memorynamed Experimental in design doc
std/sharedindexSimilarity-based semantic indexnamed Experimental in design doc
std/embeddingVector-embedding utilitiesniche; 0 examples
std/simhashLocality-sensitive hashingniche; 0 examples
std/cryptoCryptographic operations⚠ proposed — security-sensitive; conservative tiering
std/jwtJWT parsing/verification⚠ proposed — security-sensitive
std/xmlXML parsing/querying⚠ proposed — format surface may evolve
std/regexLinear-time (RE2) regex: compile / isMatch / findFirst / findAll / replaceAll / splitnew (v0.30.0); RE2 subset (no backref/lookaround); RegexMatch record shape may evolve
std/htmlHTML5 parsingformat surface may evolve
std/zipZIP archive read/write/stream⚠ proposed — format surface may evolve
std/tartar archive read/extractformat surface may evolve
std/gzipgzip compressionformat surface may evolve
std/deflateraw deflate (RFC 1951) / zlib (RFC 1950)low-level; niche
std/processExternal command execution⚠ proposed — host-boundary surface, conservative tiering
std/packageResolve files bundled in an installed packagepackaging surface still evolving

Internal stdlib

No promise. Development / diagnostic utilities.

ModulePurpose
std/debugDebug helpers
std/traceCustom trace span/event emission (telemetry-facing)
std/smokeHelpers for package _smoke.ail boot probes

CLI surface

Tiered by top-level command / family (not by raw --help line count). Every top-level command appears in exactly one tier.

Stable CLI

CommandPurpose
versionShow version / commit / build time
runRun an AILANG program (--caps, --entry)
checkType-check without running
replInteractive REPL
testRun tests
promptEmit the canonical teaching prompt
docsStdlib module documentation
install / search / publish / add / lock / treePackage + registry workflow

Experimental CLI

May change in a 1.x minor with a CHANGELOG entry.

Command / familyPurposeWhy Experimental
ai-checkUnified check+verify JSON for AIJSON shape still stabilising
watchWatch-and-reload⚠ proposed
serve-api / server / serve / lspWeb / API / LSP serversevolving interfaces
replay / export-trainingTrace replay / training exporttrace-format-dependent
sandbox-checkFS sandbox path diagnosticsdiagnostic-adjacent
editorEditor syntax-highlighting installtooling convenience
axiomsAxiom compliance scorecardevolving
examplesSearch/explore examplestooling convenience
trace / observatoryTelemetry management / analyticstelemetry surface evolving
pkg (+ notify-upgrade, affected-by) / init / unpublish / pkg-docsPackage coordinationpackaging surface still evolving
messagesAgent messagingevolving agent surface

Internal CLI

No promise. Diagnostic / harness / agent-infra surface.

Command / familyPurpose
debugAST / type debugging
doctorRegistry / ADC diagnostics
builtinsBuiltin-registry inspection
ifaceNormalized module-interface JSON (shape is Internal)
eval / eval-suite / eval-analyze / eval-report / eval-compare / eval-matrix / eval-sweet-spot / eval-summaryEval harness
coordinator / chains / dashboard / workspacesAutonomous-agent coordination infra
generate-extension-registryStatic extension-dispatch codegen

Known limitations & version promises

  • Live-verified Known Limitations — every entry carries a repro, transcript, and verified-at date.
  • Future-version language is confined to the Roadmap — that is the one allowlisted place for "planned for vX.Y" statements.

Follow-ups (post-ratification)

  • A make check-doc-promises CI guard to prevent stale past-version promises from re-accumulating (tracked as a Deferred Decision in the design doc).
  • Compile-time deprecation warnings for Experimental → removed surface (post-v1).
  • The v1.1 promise review re-examines effect handlers and CSP/session-type surface.

Ratification status: pending (Mark, at release). Drafted headless, mission iteration 5.