Archive — history, not state. Kept for its reasoning and its evidence; its plan is closed.

What to do next

One list, ordered roughly by leverage. Each item says how to start, so picking one up costs a read, not an archaeology dig. Finished items get deleted, not checked off — this file stays short or it stops being read.

Closing the finalization arc

  • L6 lands (in flight): the cross-press proof + make cross-check + the CI workflow. When its battery greens: replay on the main branch, reseed commit. Then the user pushes, activates the cross-check CI jobs, and rules on a windows runner (the workflow carries the windows job commented out).
  • L2b drain tail: the PGO_SITES emitter is parked in git stash@{0} (labelled; also saved as a patch in the scratchpad) and must land WITH its C counters. Start: read the stash, the PGO section of plans/archive/overnight-decisions.md, and pit-shop/pgo_store.cm. Do not start this expecting one sitting. Measured 2026-08-01 (see the L2b block in plans/archive/finalization-arc.md): D5 deleted the only production path that builds a PGO collector, so runtime collection is dead on BOTH lanes and step 3 is a rebuild, not a port — and the session-identity road still waits on L3 phase 2. The emitter applies and reseeds cleanly against post-L3 code; it was held back on purpose, not for lack of trying. The missing gate to write alongside the counters: an end-to-end drain test that RUNS a program and asserts a non-zero count (tests/pgo_executable.ce synthesises its observations and would not have noticed any of this).
  • Close-out: total the deletion bill across L3/L4; demonstrate the compiler-less runtime (a pressed cart boots and runs on the vm_only shape); the guard-comment sweep (re-anchor every “do not relax” to the ruling it protects — plans/method.md carries the rule); delete the L4 dead-code inventory (13 dead statics, Pit_MachPoolInstruction, PitMachLoadStatus, the duplicate Pit_CallRegisterVMFunction declaration, five stale comments — the full list is in the L4 agent report, summarized in the L4 reseed commit message). The arc file is archived (2026-08-02); these close-out items are carried as P-0 of plans/one-binary.md.

Performance (mach bytecode only — no AOT/native, standing ruling)

  • The image-arm closure-upvalue cost, 4.6× — the first named item, ruled. closure_calls runs an identical instruction stream at 8.76 ns/i on the pool lane vs ~1.9 on the deleted register lane; isolated to bind_getup. Start: make bench shows the row — kernels.closure_calls.* in perf/trend/latest.json, from benchmarks/bench_suite.ce (the kernel moved there 2026-08-06 when tools/compiler_budget.ce was retired; make budget no longer carries it). The lane is mach_pool.c’s pool-adopted functions — compare how a pool function reaches its upvalues vs how the register tree did. Read the right number. The win this item is about is ns/instruction, and that is a WALL row here, reported and never gated: closure_calls has been seen at 16.4 ms and 4.0 ms on the same 1.8 M-instruction stream. The gated kernels.closure_calls.instructions ceiling proves the instruction stream did not change while you were fixing how it executes — which is exactly the guarantee this item needs, since the whole finding is “identical instruction stream, 4.6× the time”.
  • Cart shrinking / bytecode dedup — after L6’s first green, so the standing cross-check proves every change. Start: pit cart info on boot/root.cart for the section inventory; dedup candidates are identical pools across executables (the content-hash directory rows make them visible).
  • Compiler-generated mcode quality — the next arc. The opportunity map is plans/compiler-vision.md; the pipeline narrative is in the docs. Start there, then docs/spec/streamline.md for the optimizer’s pass structure.

Test-loop health

  • zz_shop_tool_smoke’s deadline — ruled: remeasure cold on a QUIET machine post-L3 (the in-flight numbers were load-polluted: 181–188s against 180s). Start: invalidate the toolchain stamp (touch + revert a pit-compiler/ file), ./pit down, run it solo, time it; then rule a class or slim the test (it starts nine tool actors).
  • The parked concurrency experimentPIT_TEST_CONCURRENCY=N is committed and daemon-read; the sweep never produced clean data (machine contention, then the observer deadlock it helped find). Resume on a quiet machine: widths 1/4/8 ×2, fresh daemon each, an orphan check between runs, and treat any suspiciously short wall time as a wedge, not a result.
  • The client-teardown/orphan class — LARGELY CLOSED 2026-08-07 (arc/fix-hangs), and the mechanism recorded here was WRONG. The survivor was never “a completed client parked in teardown on a pthread_join in exit_handler”. lldb on a live survivor found thread #1 in main_backend_run → CFRunLoopRun — it had never entered teardown at all — with scheduler_is_shutting_down() == 0 and scheduler_actor_count() == 0. It was not a client either: it was the DAEMON (a daemonized fork inherits the launching client’s argv, which is why ps showed it as pit … debug sites …), holding no socket because the listener is an actor and had died with the rest. The engine asked “am I done?” only in actor_free, which a mid-turn halt can skip entirely; the count actually drops in actor_halt. Fixed by scheduler_note_actor_gone() asking it at both sites — see the full entry in plans/carried.md. cli/debug_tool now leaves zero survivors, and tests/cli/daemon_exit.ce pins it. What is left of the class: a listener that dies while OTHER actors are still alive still leaves a live unreachable node — that is the deferred ruling below, not this defect. Any future 0%-CPU survivor should be checked with scheduler_actor_count() FIRST; that one number separates “the engine never noticed it was done” from a genuine teardown park.

Deferred rulings (each needs John, none urgent)

  • A reap should carry its own reason — today a reaped actor and a voluntary $stop() reach the overling identically; tests/reap_is_not_a_pass.ce pins the current sameness. Lifetime-model honesty says distinguish them.
  • A daemon whose listener halts should exit — services now state their lifetimes so the reap-zombie is fixed, but a listener death still leaves a live unreachable process by other paths. The honest end is exit.
  • - true error rendering — a failing test with a long reason renders as bare - true in the human errors list (real reason only under --machine). One small fix in the test harness’s error formatting.

Platforms, systematically (after the arc)

The rollout model L6 proved: a platform = a recipe file + a platform/<os>/ folder + a pressed boot pair + a CI runner. Windows first needs the runner ruling. Consoles (playdate/n64/ps1/dc/psp) have recipes and cross-press works for them; each needs its platform folder completed and a way to run the suite. Start any platform from docs/architecture/ target pages and the L6 commit messages.

Residue the transition-diary audit surfaced (2026-08-01, all small)

  • pit-shop/mach_lower.cm:42-55 — a stale “pool lane BUILT AND NOT ON, PIT_POOL_PAYLOAD=1” state block; the lever is read by nothing. Delete it.
  • DONE in the delete direction (2026-08-01): the derivation-input arm, the transition paragraph, and the cart-v1 asset-reader paragraph are out of the spec on grep evidence. REMAINING RULING: pit.bootstrap.target@1’s other ~140 spec lines describe a record with no producer and no reader anywhere — dead design (delete) or pending target-truth (keep)? Docs are target-final, so absence of code alone doesn’t decide it.
  • A second codename pass would cover the adjacent series the first sweep’s pattern missed: CAKE1, FRESH1/2, SHOP1, AUDIT1, CART3/4, WOTA1, NANO1, BUILD1, L2b, singular “edict N” — same translate-don’t-delete method, same glossary style. ~an hour of agent work.
  • Stale “pit.cart@1 trailer” comments where the code memcmps pcr2: source/cart_boot.c:344, and cake/manifest.cm:376 (the generator — fixing it fixes Makefile:545 + bootstrap.sh:569 at the next make manifest).
  • T020’s gate was skipped: the meson parity oracle was deleted without the console-lane comparison ever running, so cake is unverified against any oracle for the console lanes. Recorded, not urgent — the console lanes get real verification when the platform rollout reaches them.
  • allow_compile contradiction: pit-shop/policy.ce:63,239 carries a knob the diary’s completed table records as deleted (2026-07-22). Either the deletion was reverted or the record was wrong — needs one look and a ruling.
  • Do-not-delete note: runtime_code_count/code_cache_* counters survive their cache ON PURPOSE (tests/runtime_arena_counters.cm pins them at zero as L3’s observable).
  • docs/shop/c-modules.md names recipes that do not exist (macos_arm64/macos_x86_64/linux_arm64 at ~366-368, 375, 418-420, 930); the real names are darwin/linux/etc. Mechanical fix.
  • The word “lane” does double duty: the rulings’ “one execution lane” vs mcode.md:104-108’s compilation lanes (pool vs static-linked default — both real). Worth one glossary sentence disambiguating.

Later, deliberately

  • The storage revisit: boot/content grew to ~86MB with the mcode snapshot (priced and accepted when REGEN1 landed; scheduled for a late look).
  • Game engine work — unblocked since L3; not tracked here.

Source: plans/archive/todo.md