Frame RFCs
Index of Frame RFCs. The RFC process is documented in
STYLE.md. New RFCs should follow that style guide.
RFC numbering is monotonically increasing. Skipped numbers correspond to drafts that were never written, RFC slots reserved for an idea that was then absorbed into another RFC, or pre-public exploratory work that wasn’t promoted to a numbered RFC. Skipped numbers are not re-used.
| # | Title | Status | Cross-refs |
|---|---|---|---|
| 0001–0005 | — | (unassigned) | numbering reserved; no documents |
| 0006 | Self Interface Call — @@:self.iface() |
Implemented (with revisions) | foundational |
| 0007 | — | (unassigned) | numbering reserved; no document |
| 0008 | Extended pop$ Transition Syntax |
Implemented | foundational |
| 0009 | Static States — Compile-Time-Known Identity | Draft (parking lot) | |
| 0010 | Interpolation-Aware String Scanning via Frame Automata | Draft | |
| 0011 | System Base Classes | Implemented | |
| 0012 | Persist Stress Testing | Amendment shipped (Phases A–B + D); Phase C deferred | superseded in part by 0016.1 for the @@[save]/@@[load] form |
| 0013 | Annotation Syntax — @@[...] |
Wave 1 + Wave 2 shipped; Wave 3 open | foundational for 0014, 0015, 0016 |
| 0014 | @@[main] — Module-Level Primary System |
Wave 1 shipped | |
| 0015 | Factory-Only System Construction | Shipped in 4.1.0 | partially superseded by 0017 (init mechanism); see 0016.1 for save/load form |
| 0016 | Selective Domain Persist | Draft — deferred; not shipped | partially superseded by 0016.1 (the @@[no_persist] form shipped; @@[persist_fields] still deferred) |
| 0016.1 | Amendment — @@[no_persist] codegen |
Shipped (2026-05-15) | amends 0012; companion to deferred 0016 |
| 0017 | Init Decouple — bare ctor + factory split | Accepted; shipped | companion to 0015, 0018 |
| 0018 | Re-entrant interface dispatch from lifecycle handlers | Resolved (crash); superseded in part by 0019 | construction-context push fix survives; lifecycle-semantics passages quote pre-0019 |
| 0019 | Uniform $> / <$ dispatch (cascade removed) |
Accepted (2026-05-12); shipped | supersedes in part 0018; breaking change in 4.2.0 |
| 0020 | Runtime Reference Architecture | Authoritative (normative); aligned with 0019 | companion to 0015, 0017, 0018, 0019, 0021 |
| 0021 | Runtime Performance Optimizations | Draft (parking lot) | companion to 0020 |
| 0022 | Cross-file @@import directive |
Superseded by 0024 | historical |
| 0022.1 | @@import semantics on Java/C#/Go |
Superseded by 0024 | historical |
| 0023 | — | (unassigned) | numbering reserved; no document |
| 0024 | Remove @@import — host-language imports via Oceans Model |
Accepted; shipped in 4.2.0 | supersedes 0022, 0022.1; breaking change; analysis half amended by 0040 (emission removal stands) |
| 0025 | Quality remediation — structured errors + typed compartment payload | Accepted; shipped (Rust target) in 4.2.0 | companion to 0026, 0027 |
| 0025.1 | Typed lifecycle args — close the stringify gap in the typed-payload contract | Accepted (2026-05-21); shipped in 4.2.1 | amends 0025; resolves FRAMEC_BUGS #34 |
| 0026 | Oceans Model as calculus — pre-backend normalization, preservation theorem, formal grammar | Draft (Exploration) | companion to 0025, 0027; no execution commitment |
| 0027 | In-tree snapshot tests per backend (insta) | Accepted; shipped in 4.2.0 | companion to 0025, 0026 |
| 0028 | In-process framec API | Draft (Forward-looking) | replaces roadmap #171 |
| 0029 | Fuzz infrastructure status + deferred-work catalog | Draft (Status report + forward-looking) | replaces roadmap #172; resolved by 0031 for CI integration |
| 0030 | Fuzz infra catch-up plan — multi-RFC corpus migration | Accepted (execution committed 2026-05-18) | execution companion to 0029 |
| 0031 | Post-release process — RC validation, CI gates, drift detection | Accepted (Process) | resolves CI questions in 0029; supersedes ad-hoc release process |
| 0032 | Remove @@codegen { ... } — auto-inference is the path |
Accepted; shipped in 4.2.0 | extends 0013; same trajectory as 0024; breaking change |
| 0033 | Idiomatic Rust output — borrowed parameters, lint-clean preamble, expression-form state-var initializers | Draft | builds on 0019, 0025 |
| 0034 | In-process compile checks for every backend’s snapshot fixtures | Draft | builds on 0027, 0033 |
| 0035 | Dogfooding inventory — existing FSMs, migration candidates, and single-state test corpus | Draft | builds on 0027, 0033, 0034 |
| 0036 | No-allocation dispatch for no_std / interrupt / hot-path use |
Draft | builds on 0020, 0021, 0025; lifts + prioritizes 0021 item 1 |
| 0037 | Reserved identifier namespace — the __ prefix (validator E115) |
Accepted | builds on 0025 / 0025.1; resolves the #40 residual edge |
| 0038 | Deferred dispatch — @@[cast] interface methods, addressing, bring-your-own executor |
Draft | builds on 0020, 0025; companion to 0036, 0026 |
| 0039 | Parser as composed Frame state machines | Accepted | builds on 0035 |
| 0040 | Re-introduce @@import as analysis-only cross-file resolution |
Draft | amends 0024 (analysis half only); builds on 0012, 0015 |
| 0041 | Web persistence — storage-bound save/load for browser targets (@@[web_persist]) |
Draft | builds on 0012, 0015, 0016 |
Other documents in this directory
STYLE.md— RFC style guide. New RFCs should follow this format.frc-future.md— informal scratch of ideas that haven’t been numbered yet.
Status taxonomy
- Draft — proposed; not implemented; design open for revision.
- Accepted — design approved; implementation may or may not be in progress.
- Shipped — implementation landed in a released framec version. CHANGELOG entry exists.
- Implemented — older RFCs that predate the Accepted/Shipped distinction; treat as shipped.
- Authoritative — the RFC is the normative reference for some aspect of the system (e.g., RFC-0020 for the runtime kernel).
- Resolved — bug-class RFC where the immediate fix shipped.
- Superseded by N — the RFC is preserved for history; N contains the current contract.
- Draft (Exploration) — research-grade; no execution commitment.
- Draft (Forward-looking) — design captured; pending a prioritization decision.
- Status report — captures current state of a subsystem without committing to changes.
Cross-reference invariants
When one RFC supersedes another, the relationship is recorded bidirectionally:
- The superseded RFC’s status line names the superseding RFC.
- The superseding RFC’s header lists what it supersedes.
When checking the index, both directions should agree. The [0022] / [0022.1] / [0024] cluster and the [0018] / [0019] cluster are the current cases of this pattern.