Ownership Matrix¶
Type: Reference The single source for "where does X live?" — every contract surface in re-frame2 has exactly one canonical home spec; other specs may reference the surface, but those references are informational and must not redefine the contract. Use this matrix to navigate, and to detect drift if a definition ever appears in a non-owning doc.
Every contract surface in re-frame2 has exactly one canonical home spec. Other specs may reference the surface, but those references are non-normative — they cite the canonical home rather than redefining the contract. The "Referenced in" column lists those informational mentions.
The Artefact column names the Maven artefact that ships the surface in the CLJS reference. Surfaces marked core (split pending: rf2-NNNN) are currently in day8/re-frame2 and will move to day8/re-frame2-<feature-id> under the named bead. The packaging architecture (artefact tiers, naming, independence rule) is normative in Conventions §Packaging conventions.
| Contract surface | Canonical home spec | Artefact | Referenced in (informational) |
|---|---|---|---|
| Goals, hard constraints, host-profile matrix, identity primitive, minimal-core contract | 000-Vision | spec-only (no runtime artefact) | Principles, Implementor-Checklist, API |
Registration grammar (reg-* shape, metadata map, two-form middle slot) |
001-Registration | day8/re-frame2 (core) |
API, Spec-Schemas §:rf/registration-metadata, Construction-Prompts |
Registry kind taxonomy (the canonical kind keyword set) |
001-Registration | day8/re-frame2 (core) |
API, Spec-Schemas |
| Source-coordinate capture (macro-driven, CLJS reference) | 001-Registration | day8/re-frame2 (core) |
Tool-Pair, 009-Instrumentation (trace events carry coords) |
| Hot-reload semantics for registrations | 001-Registration | day8/re-frame2 (core) |
002-Frames (sub-cache invalidation) |
Registry query API (handlers, handler-meta, frame-ids, frame-meta — registrar contract) |
001-Registration | day8/re-frame2 (core) |
002-Frames §The public registrar query API (re-tabulates alongside frame-runtime queries), Tool-Pair, 007-Stories |
Frame-runtime queries (get-frame-db, snapshot-of, sub-topology, sub-cache) |
002-Frames | day8/re-frame2 (core) |
Tool-Pair, 008-Testing |
Frame model, identity, lifecycle, :rf/default fallback |
002-Frames | day8/re-frame2 (core) |
API, Spec-Schemas |
Event handlers (reg-event-fx, reg-event-db, the (state, event) → effects-map contract) |
002-Frames | day8/re-frame2 (core) |
API, Construction-Prompts CP-1, Pattern-AsyncEffect |
Dispatch envelope (dispatch, dispatch-sync, explicit-frame addressing, two-arg form) |
002-Frames | day8/re-frame2 (core) |
API, Tool-Pair |
subscribe (frame-bound and global forms; reg-sub registration surface) |
002-Frames | day8/re-frame2 (core) |
006-ReactiveSubstrate (the runtime cache & derivation graph the surface consumes), API, Construction-Prompts CP-2 |
| Subscription runtime — derivation graph, sub-cache, invalidation, change tracking, layer-1/2/3 semantics | 006-ReactiveSubstrate | day8/re-frame2 (core) |
002-Frames (registration & call-site surface), 008-Testing (compute-sub) |
subscribe-value (one-shot, non-reactive read; subscribe + deref + immediate unsubscribe) |
006-ReactiveSubstrate | day8/re-frame2 (core) |
API, 002-Frames (call-site surface), 008-Testing (compute-sub for the cache-bypassing pure equivalent) |
unsubscribe (explicit teardown; ref-count decrement; pairs with imperative subscribe) |
006-ReactiveSubstrate | day8/re-frame2 (core) |
API, 002-Frames (call-site surface) |
frame-provider (CLJS reference; React-context plumbing of frame keyword to subtree) |
002-Frames | day8/re-frame2 (core) |
004-Views, 007-Stories |
Effect-map shape (closed :db + :fx at top level) |
002-Frames | day8/re-frame2 (core) |
Spec-Schemas §:rf/effect-map, API |
Effects (reg-fx) and coeffects (reg-cofx) |
002-Frames | day8/re-frame2 (core) |
API, Pattern-AsyncEffect, 011-SSR (:platforms) |
| Run-to-completion drain semantics | 002-Frames | day8/re-frame2 (core) |
005-StateMachines (drain interaction), 008-Testing (synchronous triggers) |
Per-frame and per-call overrides (:fx-overrides, :interceptor-overrides, :interceptors) |
002-Frames | day8/re-frame2 (core) |
008-Testing, 007-Stories |
| Machines-as-event-handlers foundation hooks | 002-Frames | day8/re-frame2 (core) |
005-StateMachines (full grammar) |
View contract and reg-view (pure (state, props) → render-tree, Form-1/2/3) |
004-Views | day8/re-frame2 (core) |
API, 011-SSR, Construction-Prompts CP-4 |
State machine grammar and reg-machine (transition table, :always, :after, :invoke, :invoke-all, hierarchical states, :tags, :type :parallel + :regions, snapshot shape) |
005-StateMachines | day8/re-frame2-machines (rf2-xbtj) |
CP-5-MachineGuide, Pattern-NineStates, Pattern-WebSocket, Pattern-Boot, Pattern-LongRunningWork |
| Reactive substrate contract + reference adapters (Reagent default, plain-atom for JVM) | 006-ReactiveSubstrate | day8/re-frame2 (core) — substrate contract + plain-atom adapter; the Reagent adapter ships in day8/re-frame2-reagent |
008-Testing, 011-SSR |
UIx adapter (use-subscribe hook, flush-views! test flush, source-coord wrapping component, UIx-side frame-provider) |
006-ReactiveSubstrate | day8/re-frame2-uix (rf2-3yij) |
API, Conventions (adapter shipping convention) |
Helix adapter (use-subscribe hook, flush-views! test flush, source-coord wrapping component, Helix-side frame-provider) |
006-ReactiveSubstrate | day8/re-frame2-helix (rf2-2qit) |
API, Conventions (adapter shipping convention) |
Shared React frame Context (factored out so every React-shaped adapter consumes the same createContext object) |
002-Frames, 006-ReactiveSubstrate | day8/re-frame2 (core) — re-frame.adapter.context, CLJS-only; consumed by day8/re-frame2-reagent, day8/re-frame2-uix, and day8/re-frame2-helix |
API |
| Stories / Variants / Workspaces | 007-Stories | post-v1 | 008-Testing (portable-stories-as-tests) |
| Testing infrastructure (fixtures, synchronous triggers, per-test stubs, headless evaluation, framework adapters, JVM-runnable suites) | 008-Testing | day8/re-frame2 (core) |
API, 007-Stories, conformance/ |
| Trace event model (envelope, ids, listener API) | 009-Instrumentation | day8/re-frame2 (core) |
Tool-Pair, API |
Error contract (structured trace events, per-frame :on-error policy); the §Error event catalogue is the single source of truth for every :rf.error/*, :rf.warning/*, :rf.fx/*, :rf.cofx/*, :rf.ssr/*, :rf.epoch/*, :rf.http/*, :rf.frame/*, :rf.route.nav-token/* category — id · :op-type · trigger · default :recovery · :tags (per rf2-wfbn3) |
009-Instrumentation | day8/re-frame2 (core) |
API, all Specs that emit errors cite this section |
Schema attachment (:spec, reg-app-schema), validation timing, dev-vs-prod elision, validator-fn extension point |
010-Schemas | core (split pending: rf2-p7va → day8/re-frame2-schemas) |
001-Registration §Schema integration, Spec-Schemas |
SSR flow (server frame lifecycle, hydration payload, :rf/hydrate, hydration-mismatch detection) |
011-SSR | day8/re-frame2-ssr (rf2-uo7v) |
004-Views, 008-Testing, 012-Routing |
:platforms metadata on reg-fx/reg-cofx; pure hiccup → HTML emitter |
011-SSR | day8/re-frame2 (core) — :platforms metadata; the hiccup→HTML emitter ships in day8/re-frame2-ssr (rf2-uo7v) |
002-Frames, API |
Route grammar, :route sub, navigation events, route-not-found, navigation-blocking, fragments, scroll restoration |
012-Routing | day8/re-frame2-routing (rf2-k682) |
011-SSR, API |
Flows (reg-flow / :rf.fx/reg-flow / :rf.fx/clear-flow, computed-state declarations materialised into app-db) |
013-Flows | day8/re-frame2-flows (rf2-tfw3) |
API, Conventions (:rf.fx/* reserved) |
Managed HTTP requests (:rf.http/managed fx, args-map shape, decode pipeline, :accept normalisation, retry-with-backoff, abort surface, frame-aware reply addressing, eight-category :rf.http/* failure taxonomy, schema-reflection metadata, canned stubs, with-managed-request-stubs) |
014-HTTPRequests | day8/re-frame2-http (rf2-5kpd) |
API, Spec-Schemas, Conventions (:rf.http/* reserved), Pattern-AsyncEffect, Pattern-RemoteData, Pattern-StaleDetection, 009-Instrumentation (:rf.http/retry-attempt trace) |
Runtime shapes (Malli, CLJS reference) — :rf/effect-map, :rf/registration-metadata, :rf/hydration-payload, :rf/trace-event, etc. |
the per-Spec owner of each shape; Spec-Schemas is the projection (collected EDN forms) — non-canonical | per-surface (matches the owning Spec's row) | every Spec that owns a shape |
| API signatures (consolidated) | the per-Spec owner of each surface; API is the projection — non-canonical | per-surface (matches the owning Spec's row) | per-Spec owners |
| Migration rules (re-frame v1.x → re-frame2, CLJS reference) | MIGRATION | spec-only (no runtime artefact) | per-Spec owners (contract content); Migration owns the rules |
| Pair-tool runtime contract (inspect, dispatch, hot-swap, time-travel, fx-stub, source-map) | Tool-Pair | core for the inspect / dispatch / hot-swap / fx-stub / source-map slices (which ride the registrar / dispatch / trace surfaces in day8/re-frame2); the time-travel slice — the re-frame.epoch namespace, :rf/epoch-record ring buffer, register-epoch-cb! / remove-epoch-cb! listener API, restore-epoch rewind, and the :rf.epoch/* trace ops — ships in day8/re-frame2-epoch (rf2-lt4e) |
001-Registration, 009-Instrumentation |
Reserved-namespace policy, reserved fx-ids and app-db keys |
Conventions | spec-only (no runtime artefact) | every Spec that uses a reserved id cites the Conventions list |
| Construction-prompt scaffolding templates | Construction-Prompts | spec-only (no runtime artefact) | per-Spec owners (contract content); Construction-Prompts owns the scaffolding shape |
| Conformance fixtures (canonical interactions and expected emissions, in EDN) | conformance/ | spec-only (no runtime artefact) | per-Spec owners (contract content); conformance owns the fixture corpus |
Drift rule: if a contract surface acquires a second normative definition (a redefinition rather than a citation), that is a corpus bug. File it as a spec-review bead and resolve by collapsing back to the listed owner.