Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Argon RFDs

Design decision records for the Argon language, runtime, and toolchain.

An RFD records why a choice was made. It is not the specification. The Lean 4 mechanization at spec/lean/ is canonical for the substrate; the reference manual (Part I of this book) describes the surface in prose. RFDs explain how those landed where they did.

Format

  • Filename: NNNN-kebab-case-name.md. Four-digit, no reuse. Numbers are not recycled even when an allocation is abandoned, so the sequence may carry gaps: 0012 was never authored — the number was skipped during a period of concurrent branch allocation (the same churn that renumbered the refinement RFD 0016 → 0017 once numeric-tower took 0016 on main) and the slot was left empty rather than reused.
  • Structure: Question · Context · Decision · Rationale · Alternatives · Consequences · Open questions.
  • States:
    • discussion — open; not committed.
    • committed — decided and binding. Implementation may or may not have landed; the decision is fixed.
    • accepted — partially implemented — decided and binding, with implementation landed in part; the State: line annotates what has shipped and what remains.
    • superseded — replaced by a later RFD. Cite the successor.

Authoring an RFD

RFDs live at spec/rfd/ in the repository. The published book reflects whatever is on main. To open a new RFD, allocate the next number, write the file, and submit it via PR — discussion happens on the PR or in linked threads, not by gating merge on consensus.

The format mirrors Oxide Computer Company’s RFD process (Yegge / Dijkstra-via-Bryan-Cantrill lineage) but lighter: no separate authoring tool, no review-state tracker, no required pre-commit lint. A repository PR is the discussion vehicle; the RFD’s State: field carries the decision status.

Index

#TitleState
0001ID architecturediscussion
0002#[comptime] attributediscussion
0003Reasoner backend dispatchdiscussion
0004pub fact declarationsdiscussion
0005Relation subsumptioncommitted
0006Field mutability via mutdiscussion
0007Missing-value semantics under OWAdiscussion
0008Standpoint-sheaf equivalence proof roadmapcommitted (Path A landed)
0009std::mlt library scopediscussion
0010Negative facts / strong negationdiscussion
0011Aggregate semantics under OWAdiscussion
0013Toolchain distributionaccepted — partially implemented
0014Runtime serving surfacediscussion
0015mutate body surface: EdgeQL-shaped, set-semanticcommitted
0016Numeric tower: exact by defaultcommitted
0017Refinement classification: where (primitive) vs iff (defined)committed
0018Production reasoner: the incremental DBSP engineaccepted — partially implemented
0019Mutation write-path correctness: construction, identity, read-your-writes, exact valuesaccepted — partially implemented
0020The runtime data engine: a composable query + reasoning pipelineaccepted — partially implemented
0021The reasoner execution engine (as built): joins, optimizer, factorization, BYODS, incrementality disciplinecommitted
0022Package-path addressing (pkg, not crate) and the build evaluability gatecommitted
0023Reflective TypeRef: type-as-value in the meta-calculus (RP-003 GAP-1)committed
0024Allen interval algebra as a library (std::allen), not substrate operatorscommitted
0025check discharge: vocabulary-staged compile-time and runtime constraint checkingaccepted
0026Trait rule members: clause-union dispatch, conformance, and the implements intrinsicaccepted — implementation planned
0027The meta-property plane: axis bindings, catalog tiers, value-position resolution, and substrate-neutral modifiersaccepted — implementation planned
0028Defeasibility redesign: honest heads, the defeat-directive plane, and strategy as a compilation schemeaccepted — implementation planned
0029Derived values and aggregate terms: body-level binding, aggregate sources, roundingcommitted
0030Package dependencies ([dependencies], path deps v1)committed
0031The relation-constraint plane + meta-property completioncommitted
0032oxup manages editor-extension installationcommitted
0033The ad-hoc query and mutation surfaceaccepted — implemented
0034Source text encoding and the Unicode lexical policy (UAX #31 identifiers, NFC, module reachability)committed
0035The composable operator-tree execution pipeline: shared LogicalPlan lowering, tree optimizer, physical mapper, generalized executor, table operatorsdiscussion
0036Heterogeneous and specialized data stores: foreign federation, external-valued attributes, persistence swap; the connector SPI, placement, world-assumption tieringdiscussion
0037The macro atom: a phase-separated, hygienic, declarative-first expander over surface syntaxdiscussion
0038The prelude, ambient scope, and symbol-precise stdlib loadingdiscussion
0039Composable mutations: nested invocation and derived readsaccepted — implemented
0040The procedural macro layer: a total, structurally-recursive meta-language over reflected syntaxdiscussion
0042The re-checkable emission boundary: a self-validating .oxbin and sound direct artifact emissiondiscussion
0043Theory packages and the neutrality boundary: where ontologies and higher-order theories livediscussion
0044Package registry, workspaces, and distribution: a static content-addressed registry over the CDNdiscussion
0045The world-assumption write-side: refuse-on-K3-not and the #[world] per-concept opt-indiscussion
0046Derivation serving surfaces: query, delta, explain, trace (kill the per-rule derive loop)discussion
0047The temporal value library (TC39-Temporal-modeled std) and the value/ontology boundarydiscussion
0048The test atom: in-language unit tests, and why a test is substrateaccepted — partially implemented
0049Error-tolerant diagnostics: recovery, source-faithful expansion, What/Where/Why/Fixdiscussion
0050Documentation architecture: three books, correctness by construction, and a verified authoring pipelinediscussion
0051oxfmt: a canonical, idempotent source formatter over the shared CSTdiscussion