Skip to main content
v0.14.0

Architecture Health

How well the Architecture Spec is currently backed: which requirements are implemented, partial or planned, whether each names verifying evidence, and which limitations are still open. Every figure on this page is computed from the requirement tables and the LIMIT-* records when the site is built; nothing here is written by hand, so it cannot drift from them.

Every limitation and gap, with its status, is listed on Limitations and Gaps.

Implementation and evidence
54
implemented
1
partial
0
planned
0
missing evidence
23
open limitations
Needs attention
arch.evaluation.requirement-2RuntimeRegistry dispatches struct/enum entries and function values by stable SymbolId, not by n…partialrequirement ↗LIMIT-COHERENCE-001`extend<record T: {...}> T: Aspect` is accepted, then never appliesknownrecord ↗LIMIT-ELABORATION-001ElaboratedModuleGraph's field is fully public, unlike NormalizedModuleGraph'sknownrecord ↗LIMIT-EVALUATION-003RuntimeRegistry is not fully covered by the resolution-freeze checkerknownrecord ↗LIMIT-EVALUATION-004The evaluator is a deliberate PoC, not the target implementation shapeknownrecord ↗LIMIT-NAME-RESOLUTION-002Overload SymbolIds come from a process-global counter that is never resetknownrecord ↗LIMIT-NAME-RESOLUTION-003The SymbolId space is split between three allocators by convention, with no cross-checkknownrecord ↗LIMIT-NAME-RESOLUTION-004Builtin SymbolIds are a hard-coded list of 21 names; other std declarations are numbered per programknownrecord ↗LIMIT-NAME-RESOLUTION-005Symbol identity is a (module, name-string) key, so distinct declarations can share one SymbolIdknownrecord ↗LIMIT-PATH-NORMALIZATION-001`root::`/`super::` are rejected in expression position when the target is declared directly in that moduleknownrecord ↗LIMIT-RESOLUTION-002Inference-time type lookup falls back to a name-approximate, cross-module searchknownrecord ↗LIMIT-TYPE-CONSTRUCTION-001Call::callee_id falls back to name dispatch for first-class functionsknownrecord ↗LIMIT-TYPE-CONSTRUCTION-003`==` and `!=` reject non-primitive operands instead of dispatching through `Eq`knownrecord ↗LIMIT-TYPE-INFERENCE-002Field access needs a concrete receiver type at the access siteknownrecord ↗LIMIT-TYPE-INFERENCE-003`..` is not supported in an anonymous record patternknownrecord ↗LIMIT-TYPE-INFERENCE-005TypeVar identity is a global number, and generator ranges are kept apart by hard-coded offsetsknownrecord ↗LIMIT-TYPE-INFERENCE-006Type checking is sequential by construction: one shared generator, one export generator, Rc stateknownrecord ↗LIMIT-TYPE-INFERENCE-007Type checking time grows super-linearly with the number of functions in a moduleknownrecord ↗LIMIT-EVALUATION-001Generic function dispatch re-constructs on every callacceptedrecord ↗LIMIT-EVALUATION-005Destructor invocation is not implemented; only empty `drop` bodies are acceptedplannedrecord ↗LIMIT-MOVE-CHECK-001Closure move-check is always-on while general move-check stays opt-inacceptedrecord ↗LIMIT-RESOLUTION-001Resolved-identity model is in-memory onlyacceptedrecord ↗LIMIT-TYPE-CONSTRUCTION-002Overload sets are not exportable across modulesplannedrecord ↗LIMIT-TYPES-003Record `Display` is a runtime built-in, not Metel codeplannedrecord ↗