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
- 0068 — GocciaSandboxRunner with explicit seed baselines
- 0069 — Nested sandbox virtual filesystems
- 0070 — Shared string-to-number conversion
- 0071 — Reject symlinks in sandbox seed imports
- 0072 — Import Bytes with immutable backing
- 0073 — Opt-in ShadowRealm
- 0074 — Deferred bytecode call-stack frames
- 0075 — ShadowRealm full test262 conformance
- 0076 — Same-runner benchmark comparison
- 0077 — SameValueZero-keyed ordered store for Map and Set
- 0078 — Thread-local cleanup registry for managed threadvars
- 0079 — Keep speculatively-scanned tokens across parenthesized-group probes
- 0080 — FormatDouble first-hit precision scan
- 0081 — Reject shared value caches as a runtime optimization
- 0082 — Unify embedded-data caches onto a lock-free publication primitive
- 0083 — Migrate explicit per-thread cache clears into the thread-cleanup registry
- 0084 — Realm-owned prototype method hosts and object-reference threadvar audit
- 0085 — Defer broad Annex B support before 1.0
- 0086 — Parser errors for unsupported default syntax
- 0087 — AWFY cross-engine benchmark methodology
- 0088 — Reject broader property inline caches without AWFY transfer
- 0089 — Defer fixed-arity call specialization without end-to-end transfer
- 0090 — Web Tooling Goccia benchmark lane