Skip to content

loader, root, sdk: the HOT plane load path is deleted; abi/cold 43 -> 0 (row 84, S2; stacked on #932) - #961

Merged
MattJackson merged 20 commits into
predevfrom
lane-abi-hot-plane
Oct 15, 2026
Merged

MattJackson merged 20 commits into
predevfrom
lane-abi-hot-plane

Conversation

@MattJackson

Copy link
Copy Markdown
Collaborator

Row 84, S2. This is stacked on #932 (S1), #928 (S0) and #904. It stays a DRAFT until they land (rule 19).

What goes. The HOT plane load path:

  • plugin-loader plane.rs and carrier.rs;
  • the handshake and its guards;
  • open_plane, PlaneSet.hot and kind_of_door;
  • the SDK's shared dropped-in door (busbar_abi, busbar_plugin_kind, busbar_plane_decl, busbar_plane_arm) and export_plane!;
  • the root's hot_planes axis and its whole HOT plane apparatus in linked.rs.

abi/cold is deleted (43 → 0) and its abi-freeze row is struck.

Why it is safe. No crate is linked on the hot-plane axis, and every plane serves its door.

RED arms.

  • a_plane_with_no_door_is_refused: a dropped-in plane with no Statement is refused, naming the door it lacks.
  • sdk_door_cdylib: an image that links the contract exports no busbar_ symbol.
  • The linked generator refuses a hot-plane axis.

Hunks shared with other open PRs.

Ledgers. one-memory-abi strikes 10 rows; abi-freeze, abi-location and c1-literals strike one each; construction's hold-escapes drops 2 entries. Per-crate law0 and population counts will be settled against ModernCI's measure when this is undrafted.

Not here. The abi/hot types go after #787 lands, together with layout_golden.rs. The rest of abi/hot goes after D2.

…ut of the condemned HOT lane into abi/shared.rs (row 84)

Status row 84 (old plugin interface gone; THE DESIGN §11: the plugin ABI is the memory ABI
alone). DeclStr, WireConnFacts, WireField and the closed-vocabulary byte codes (code) are the
shapes abi/host/conn (the memory ABI's connection table) carries; they were defined in
abi/hot/decl.rs and abi/hot/transport.rs. They move whole, unchanged, to their one home under
abi/ (abi/shared.rs); the HOT lane names them through re-exports until it is deleted, so every
user (the connection table, the HOT transport load path, the layout golden) resolves the same
types at the same paths and no layout moves.

abi/hot: 6224 -> 5965 lines (qa/abi-freeze.toml lowered in this commit, the freeze is exact);
non-test 5177 -> 4918. abi/shared.rs is outside the C header's sources, so the header is
unchanged.
…ventory, PluginInfo) is deleted; it had no caller (row 84)

Status row 84 (old plugin interface gone). validate_plugin and inventory dlopen'd a library
and checked the COLD/JSON lane's symbols (busbar_open, busbar_call, busbar_free, busbar_close);
nothing calls either outside their own tests: the admin surface lists tarballs through
registry::inventory (inventory_tarballs) and vets uploads by filename, and every plugin loads
through its door (dispatch::load). They go, with PluginInfo, validate_mapped and their tests;
plugin-loader no longer names the cold lane's open/call/free/close types or symbols.

The behaviour the deleted vet asserted stays tested where it lives: a door-less library that
states a JSON-contract kind is refused by the kind read (read_plugin_kind), naming the missing
door, the kind and the rebuild (lib_tests: a_door_less_json_contract_library_is_refused_naming_
the_rebuild, RED against a read that takes the kind symbol on its word); the routed unload stays
pinned by ffi_guard_tests (dlclose_on_worker_routes_the_unload_and_counts_it).
…e handshake the loader still reads (row 84)

No plugin of any kind rides the COLD/JSON lane. Its SDK half had no live user:

- sdk/mod.rs: export_plugin!, the ColdEntry re-export, Door::Cold / cold(), the hostlog bridge, the
  busbar_set_log_sink / busbar_open / busbar_call / busbar_free / busbar_close exports and their
  Symbols fields, the BoundaryOutcome re-export and the in-file test module are gone. The door
  handshake (busbar_abi, busbar_plugin_kind, the plane and transport decls, busbar_plane_arm) stays.
- sdk/boundary.rs keeps only `caught`, the one catch_unwind the connection table and the transport
  slots cross. The cold open/call/free/close bodies are gone.
- abi/cold/mod.rs: 272 -> 43 lines. It keeps TRANSPORT_VERSION, symbol::{ABI, PLUGIN_KIND}, AbiFn
  and PluginKindFn, which plugin-loader's handshake (abi_symbol, abi_handshake, read_plugin_kind)
  still reads until the HOT lane goes.
- Tests: sdk/tests/lib_tests.rs, cold/tests/lib_tests.rs, tests/one_door.rs and
  tests/boundary_class.rs exercised only the deleted cold symbols. one_link_many_plugins.rs now
  links two export_transport! doors and proves each linked door is its own plugin. The busbar_open
  assertions in it and in one_transport_door.rs are gone with the symbol.
- choke row B-plugin-export is re-pointed at sdk_door_cdylib.rs's panic->FAULT test (the
  single-export test sits beside it), and docs/testing.md follows.
- The ffi_thread.rs and observe.rs docs no longer name the deleted symbols.

Ledgers: qa/abi-freeze.toml cold 272 -> 43 (exact). In qa/one-memory-abi.toml the eight findings
whose code is gone are struck: boundary.rs abi::cold; sdk/mod.rs ColdEntry and busbar_call
(cold-lane); and the busbar_call, busbar_close, busbar_free, busbar_open and busbar_set_log_sink
exported-symbol rows.
…s deleted and there is no fleet rename (ARCHITECT, row 84)
…t loads only through its door (row 84, S1)

Every transport, in this tree and in the fleet (http, grpc, ws, tcp at their pinned revs, stdio,
webrtc), serves its memory-ABI door through export_door!. No image exported a HOT transport decl
except this tree's own tests.

- plugin-loader: transport.rs (DynTransport, the decl admission, DeclCarrier/DeclFramer, the
  WireWaker table) and transport_adapter.rs (WireTransport, CarrierIo) are deleted, with their
  suites (mem_carrier, transport_conformance_tests, transport_adapter_tests,
  transport_clock_tests). The registry loses open_transport. open_transport_entries refuses a
  library with no door, naming it, where it used to read a HOT decl. TransportEntries loses `hot`.
  transport_door_tests keeps its two door cases and is mounted from lib.rs.
- RED: a_transport_library_with_no_door_is_refused. A dropped-in transport library exporting the
  frozen handshake and no busbar_plugin_door is refused with "exports no memory-ABI door". Before
  this change the same library went to the HOT decl read.
- contract SDK: sdk/transport.rs keeps only form_codes (the fleet's doors import it at this path).
  The HOT lowering is deleted: export_carrier!, export_framer!, __transport_decl!,
  __transport_slots!, the slot bridges and Lowered. The shared door drops Door::Transport,
  busbar_transport_decl and its Symbols field, and export_transport! goes. one_transport_door.rs is
  deleted. one_link_many_plugins.rs links two export_plane! doors instead of two transports.
- root: the transport fold has no HOT row. Dropped carries doors only; Row::Dropped, the
  WireTransport arm of compose and BootRefusal::DroppedBuild are gone, and dropped_transports opens
  doors only. Boundary agreed with the kernel-delete lane: they stack on this and own
  root/registry.rs and boot.rs from here.
- Not here: the abi/hot/transport.rs types (TransportDecl, slots, TRANSPORT_DECL_MAJOR). They go
  with layout_golden.rs once #787 lands.

Ledgers: one-memory-abi strikes the three findings whose code is gone (sdk/transport.rs and loader
transport.rs c-unwind; sdk/mod.rs busbar_transport_decl). contract-stateless strikes sdk/transport.rs's
ten statics. kind-isolation strikes the loader x Transport face (WireTransport was its one
implementation).
… drained (BUSBAR_COLD_ENTRY, CTX, MAX_LEVEL, SINK) (row 84, #904)

The cold lane's export_plugin! static and the hostlog bridge's three statics left sdk/mod.rs with
#904; their drain-only rows stayed, which the gate reads as STALE.
…ith it (row 84, S2)

Every plane serves its memory-ABI door. No crate is linked on the `hot-plane` axis, and no plane
plugin ships a HOT `PlaneDecl` cdylib. With S1 (transports) this was the last reader of the
two-symbol handshake the HOT and COLD lanes shared, so abi/cold goes to zero.

- plugin-loader: plane.rs (DynPlane, ServedPlane, HotClaim, HotDeclaration, link_plane, load_plane,
  load_plane_from_bytes) and carrier.rs (HotReply, ReplyStream, RequestHead) are deleted, with
  plane_decl_tests and carrier_tests. Also gone from lib.rs: the handshake (abi_symbol,
  abi_handshake, read_plugin_kind, kind_from_fn, kind_from_ptr, MAX_PLUGIN_KIND_LEN) and the two
  guards only it used (ffi_guard, ffi_guard_confined), with loader_seam_tests;
  dispatch::load::kind_of_door, its last caller gone; and the registry's open_plane and PlaneSet.hot.
- open_planes refuses a dropped-in plane whose manifest states no Statement, naming it and the
  door it lacks. plane_conformance_tests keeps the door both-ways proof and the plane kind's one
  version, is mounted from lib.rs, and gains the RED a_plane_with_no_door_is_refused. Before this
  change that plugin was opened over the HOT ABI.
- contract: abi/cold is deleted (43 -> 0 lines; its abi-freeze row is struck, as the ledger says).
  From sdk/mod.rs: the shared dropped-in door (__door: busbar_abi, busbar_plugin_kind,
  busbar_plane_decl, busbar_plane_arm), __register_door!, export_plane!, the `sdk::plane`
  re-exports and `__plane_abi`. one_link_many_plugins.rs is deleted; its source-half check is now
  sdk_door_cdylib's RED (an image that links the contract exports no busbar_ symbol). Docs naming
  abi::cold in abi/hot are de-linked in place (abi/hot stays 5965 lines).
- root: Linked.hot_planes, the `hot-plane` linked axis (linked_gen.rs), register_planes' dropped
  HOT planes, and plane_rows' HOT rows are gone, along with the whole HOT plane apparatus in
  linked.rs (hot_plane_row, HOT_PLANES, HOT_HOST, HotSlot, hot_build and the HOT request handlers,
  HOT_PLANE_HOOKS). boot.rs's dropped_planes is deleted and dropped_planes_of becomes
  discover_planes; main.rs discovers, then registers. The generator test now refuses a `hot-plane`
  axis (RED) and checks the plane-door axis.

Ledgers:
- one-memory-abi strikes the ten findings whose code is gone: cold/mod.rs, carrier.rs and plane.rs
  c-unwind; sdk/mod.rs c-unwind, cold-lane and its four exported symbols; loader lib.rs cold-lane.
- abi-freeze strikes the cold row.
- abi-location strikes loader plane.rs's fn-ptr offender.
- c1-literals strikes plane.rs's `openapi`.
- construction's hold-escapes list drops linked.rs::plane_rows and ::hot_plane_row (no escape left
  in either).
…he stubs moved to (#898, row 84)

#898 moved DeclStr out of hot/decl.rs into abi/shared.rs, so every marker below it moved up 36
lines. The gate's own lists name the move: 8 unwaived (427, 439, 446, 450, 454, 472, 481, 497) and
8 stale (475, 482, 486, 499, 508, 517, 526, 533). The other two markers (admin_routes, admission)
landed on 463 and 490, lines that two older rows already named, so those rows matched by accident.
Each row moves by the same 36 lines and keeps its own reason: 463->427 (the STUB doc label),
475->439, 482->446, 486->450, 490->454, 499->463, 508->472, 517->481, 526->490, 533->497. Every new
line was read against the file: it holds the marker its row names.
… the drain #904's cold SDK deletion made (row 84)

The gate measured 131 against the row's 133 on #904: stale slack, which Law 9 lowers in the commit
that drained it (the cold lane's SDK side and its suites). Never raised.
…ber (#898, row 84)

feature_invariance::the_doc_comments_cite_the_design_in_words refused shared.rs:7, which
pointed at the plugin-ABI section of THE DESIGN by its number. It now names it in words: "THE
DESIGN, the plugin ABI", the spelling abi/mod.rs and mechanism/observe.rs use.
…rides with it

This head carries #904's fixes for its own reds:
- the #898 no-deferral waiver re-key and its in-words design citation;
- kind-isolation busbar-contract x instance:secret lowered 133 -> 131 (the drain the gate measured);
- the contract-stateless strike of the four drained SDK statics.

qa/abi-freeze.toml conflicted on the abi/hot row. Base 6224; predev 6100 (its own hot drains in
services.rs and host.rs); this branch 5965 (#898's move to abi/shared.rs). The two drains touch
different files, so both apply: 6100 + 5965 - 6224 = 5841, the same settle #898 took. The merged
tree measures that exactly, every line of every file under abi/hot counted by hand (no xtask on the
laptop). The cold row stays at this branch's 43, also counted on the merged tree; predev did not
touch abi/cold.
…ev) into lane-abi-hot-plane

qa/abi-freeze.toml: abi/hot takes the merged tree's 5841 (predev's and #898's drains, counted by
hand); the cold row stays struck, abi/cold is deleted here.
MattJackson added a commit that referenced this pull request Oct 15, 2026
…eversing an unbounded zip; PB-29 cites its four tests by path; the deleted cold lane's paths are declared to qa-names

- plugin-loader dispatch worker: zip(0u32..) is not double-ended, so the free list is collected and
  reversed (lowest index popped first, as before). Compile red on every check (#1018).
- qa/design-bindings.json, qa/DESIGN-BINDINGS.md: PB-29's four 503-literal tests are declared in both
  busbar-llm and busbar-plane-llm's on_driver seam (#912's rehome), so each is cited as path::name.
- xtask abi_freeze CONDEMNED and one_memory_abi COLD_HOME keep naming abi/cold after #961 deleted it;
  each carries its qa-names declaration.
MattJackson added a commit that referenced this pull request Oct 15, 2026
…to hand it to

Staging::NotADoor carried the library and its backing back for another lane; #932/#961 deleted the
HOT lanes, so nothing read them (dead_code under -D warnings, every cargo check red). The variant is a
unit; load_staged releases the image first, then its backing.
@MattJackson
MattJackson merged commit e5d0c28 into predev Oct 15, 2026
1 check was pending
@MattJackson
MattJackson deleted the lane-abi-hot-plane branch October 15, 2026 13:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant