B1.1 · dive — ownership on the BEAM
The VM holds the boundary.
Ownership is a process property: the table is :private, created in
init, its identifier never returned from any call. The BEAM refuses outside reads at the VM
layer — the same mechanism that enforces memory safety.
Source: content/bcs1.1.md · How (Elixir, as built) and Decisions. Surfaces verified in lib/echo_data/bcs/property_store.ex; the table is created as :ets.new(:bcs_props, [:ordered_set, :private]).
ArgumentError; outside info returns full metadata —
protection: :private included.The private table
content/bcs1.1.md · How + DecisionsThe table is created in init as :ordered_set, :private; its
identifier never leaves the process. There is no API surface to bypass — outside reads are refused by the
virtual machine itself, which is the same mechanism that enforces memory safety on the BEAM.
G1 reach-through ok -- outside lookup -> ArgumentError, insert -> ArgumentError; info reports protection: :private (metadata visible, data refused)
The recorded correction: the draft expected :ets.info on a private table to
refuse outsiders alongside lookup; the platform returned full metadata —
protection: :private included — to a process that cannot read one row. The spec was amended
first, the gate rewritten as a positive assertion, and the clause came out sharper: a system's state is
unreachable from outside; a system's existence is nobody's secret. The BEAM guards data, not
existence, and hiding metadata would cost supervisors and telemetry their visibility for nothing.
Order without a clock
content/bcs1.1.md · HowOrdering costs nothing: :ordered_set sorts by Erlang term order, binaries
compare bytewise, and byte order on branded ids is mint order. page_desc is a
prev walk from :ets.last — no clock anywhere in the process. The G4 line,
verbatim: page_desc(2000) == byte-sort desc over 2000 minted ids; store holds no clock.
BRL0NtMkPRv5VY · BRL0NtMkUBQK0G ·
BRL0NtMkYw3x1E · BRL0NtMkdnnYHo · BRL0NtMkiWjaWO
· BRL0NtMknH5cPI. Run an operation to compare byte order with mint order.The store performs no timestamp comparison and stores no timestamp column — the chronology is carried inside the key, and the table's own comparison order reads it back out.
The init gate, and no second parser
content/bcs1.1.md · How + Decisionsinit runs the canon's self_check! and aborts on mismatch — a
store that cannot prove its codec refuses to start:
G6 canon ok -- self_check! -> {:ok, :native} (init gates on the same check)
And the gate adds no second parser: BrandedId.parse/1 returns
{:ok, ns, snow} or :error, so classification beyond the namespace collapses to
:invalid by design. The rung refused to reimplement parsing to refine the taxonomy. If the
taxonomy ever sharpens on the BEAM, it sharpens in BrandedId, once.
References
sources · relatedSources
- Erlang/OTP — the ets moduleprotection levels including private; ordered_set term order; prev/last traversal
- The Go Project — Share Memory By Communicatingthe same ownership law stated as doctrine — the next dive
- Chassaing — Functional Event Sourcing Deciderthe decide/evolve pattern the manuscript plans Part VIII to rethink on BCS
Related
- B1.1 — The System Substratethe module hub; the full transcript in context
- B1 — Ideas Behindthe chapter landing; the Part I arc
- Functional Programming in Elixirthe umbrella where echo_data — the production identity library — lives