Architecture Decision Records
Durable architecture and implementation decisions for GocciaScript. New ADRs use the lightweight format from .agents/skills/grill-with-docs/ADR-FORMAT.md: a short title and enough context to explain what changed and why.
Executive Summary#
- One decision per file — Each ADR captures the original decision context, date, area, and supporting links.
- Append-only history — Do not rewrite existing ADRs to match later implementation; add a new ADR that supersedes or refines the old one.
- Historical migration — The former single-file decision entries were moved here without changing their decision text.
Records#
- 0001 — Number dual representation
- 0002 — Singleton special values
- 0003 — Opcode layout by hotness
- 0004 — Compiler-side desugaring
- 0005 — Register-based bytecode
- 0006 — Delphi mode performance parity
- 0007 — Constant-time virtual dispatch
- 0008 — Zero-cost FPC generics
- 0009 — Reject TFPDataHashTable
- 0010 — TOrderedStringMap for scope bindings
- 0011 — Scope creation via CreateChild
- 0012 — Eliminate global mutable state
- 0013 — Reject string interning
- 0014 — Bytecode and interpreter feature parity
- 0015 — Control flow records for break and return
- 0016 — IEEE 754 number representation
- 0017 — VMT dispatch for AST evaluation
- 0018 — TStringBuffer over TStringBuilder
- 0019 — Custom hash maps over TDictionary
- 0020 — Unified heap object hierarchy
- 0021 — GocciaScript bytecode VM unification
- 0022 — Opt-in automatic semicolon insertion
- 0023 — Bytecode VM profiling
- 0024 — Platform metadata via Goccia.build
- 0025 — Source map generation
- 0026 — BigInt primitive support
- 0027 — Heap trampoline call stack limit
- 0028 — BigInt typed arrays
- 0029 — Opt-in var declarations
- 0030 — Opt-in function declarations
- 0031 — Fetch-only async I/O
- 0032 — Per-engine realm isolation
- 0033 — Generator and async generator support
- 0034 — Layered Temporal time zone providers
- 0035 — Lexer hot path simplification
- 0036 — Direct binary precedence parsing
- 0037 — Parser hot path simplification
- 0038 — Opt-in strict-types enforcement
- 0039 — Split engine and runtime entry points
- 0040 — Compiler constant optimization
- 0041 — Silent-by-default script loaders
- 0042 — test262 LoaderBare harness
- 0043 — Opt-in traditional for loops
- 0044 — Purpose-built RegExp VM
- 0045 — ECMA-402 Intl implementation
- 0046 — Remove compat-all flag
- 0047 — Opt-in loose equality
- 0048 — Opt-in non-strict compatibility
- 0049 — Non-strict this coercion
- 0050 — Script-scoped non-strict assignment and delete
- 0051 — Strict-only test262 handling
- 0052 — Opt-in while loops
- 0053 — Default imports and exports
- 0054 — Reject UPX packing
- 0055 — Class-based runtime extensions
- 0056 — Explicit function declaration nodes
- 0057 — Canonical compat-asi flag
- 0058 — Centralized parser policy
- 0059 — Opt-in labels
- 0060 — Opt-in for-in loops
- 0061 — Annex B labelled functions
- 0062 — Explicit arguments object compatibility
- 0063 — Real source-phase imports
- 0064 — Gate ModuleSource provider
- 0065 — Shape-lite inline cache design
- 0066 — Lazy shape computation
- 0067 — Cross-realm shape dictionary mode