Skip to content

C to KEC Lisp migration map

This map assigns a disposition to each C source under runtime/src/ and runtime/tools/: what migrates to KEC Lisp, what stays as the FFI layer, what retires, and what has shipped. Each row names the target Lisp module and the raw FFI contract the C keeps.

Survey baseline and delta. The 2026-08-02 survey behind GWP-781 counted 65 C migration sources totaling 28,581 lines. The tree at that date held 95 sources under runtime/src/ (40,732 lines) and holds 95 today (40,913 lines); the survey’s 65-file subset is not reconstructible from either tree state. The disk wins: this map dispositions the full on-disk set, 95 sources under runtime/src/ plus 2 under runtime/tools/, 41,760 lines. Test sources under runtime/tests/ are out of scope; they are thin runners whose cases live in .lsp suites, sanctioned by the policy as-is.

Number-domain constraint carried by each row: KEC numbers are exact through ±2^24, so u32/u64 values, hashes, checksums, binary headers, and persisted timestamps stay behind blob or codec FFI contracts (the mission/pricing.lsp split-pair convention is the worked example). Contexts stay sandboxed; storage and device capability bind per context. Scheduling policy uses run-with-timer and now; no blocking sleeps.

Closed set. Each source gets one.

DispositionMeaning
MIGRATEThe file is policy; the behavior moves to KEC Lisp and the file shrinks to nothing or to a thin seam.
SPLITPart policy, part mechanism. The row names which part moves and which part stays.
RETAINThe file is the FFI layer: a binding seam, a device driver or realtime kernel, interpreter-context lifecycle, a binary codec, or a thin runner. The row justifies it in one line.
RETIREDead or superseded. The row cites the successor.
DONEThe migration already shipped; the row cites the Lisp module and the PR. What remains in the file is sanctioned FFI.

Tally over the 97 mapped sources:

DispositionFilesLines
MIGRATE92,729
SPLIT1010,169
RETAIN6824,044
RETIRE1604
DONE94,214
Total9741,760

Wave column: W0 through W4 order the MIGRATE/SPLIT work (see Migration waves). RETAIN/RETIRE/DONE rows carry no wave.

SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
mission_board.c395DONEmission/board-gen.lsp (GWP-777)World Engine seam, bus publishes, board memory, the 32-bit LFSR behind the gen-draw seam, the accept sink, marshalling-Migrated. Template pool, eligibility gate, tier and instance-count tables, threat clamp and payout formula moved to board-gen.lsp; the retained C is mechanism only. The tier and broke-bonus math the old board_screen.c row named reached the screen through this file and moved with it.
board_screen.c476SPLITboard/board.lsp (existing)board_screen_bind set (board/contract-at, board/detail, accept sink)W0The one remaining GWP-777 row, and the sole entry left in the language-policy.md standing-debt table. Countdown, verb policy, and row/detail formatting move; the bind set and the MissionBoard ownership seam stay.
mission_sweep.c231DONEsweep/sweep.lsp (GWP-775, PR #204)(sweep-arm ms), (sweep-disarm), bus forwarders, policy-context lifecycle-Post-GWP-775 residue is the FFI layer by design; the file header documents the split.
mission_world.c90RETAIN-MISSION_ACCEPTED subscriber calling world_generate-One bus forwarder into the World Engine (ADR-0051); pure seam.
nosh_baseline.c258DONEmission/baseline.lsp (GWP-808)Registry array, tier-slot state, schema lookup, CIPHER tier events, policy-context marshalling-The selection-weight policy (the 5% supersession drop, threat-cap inheritance, threat-range clip, single-phase rule) moved; Lisp suite tests/lisp/test-baseline.lsp.
nosh_baseline_loader.c574RETAIN-Per-baseline Fe VM open, defcontract-schema binding, plist normalization-Interpreter lifecycle plus marshalling; the baselines it loads are .lsp already.
nosh_runtime.c1,119SPLITdeck/dispatch.lsp (proposed)Cell pool, type registry, navigation stack, mission-context lifecycle, pricing/objectives policy-context plumbingW3Pricing and objective policy already left (GWP-747/750); dispatch_default, key-slot mapping, and numpad-digit routing are input policy and move next.
world_engine.c349SPLITworld/engine.lsp (proposed)Splitmix hash kernel, node-address arithmetic (u32 domain), determinism invariantW4Archetype tables and shaping decisions move; the hash math exceeds ±2^24 and stays a primitive. See open question 2.
world_heat.c111RETAIN-world_heat_arm/disarm pool bridging sched.c to the engine heat hook-Timer-to-engine mechanism; cadence policy already lives in sweep/sweep.lsp.
deck.c639DONEdeck/demo-seed.lsp (GWP-808)Binary deck codec (magic, version, CRC32), atomic save/load, evented wallet setters, seed marshalling-The headless demo-deck seed content moved as authored data; the codec and the evented setters stay.
nosh_stdlib.c454DONEcart/stdlib.lsp (GWP-808)LFSR (u32), deck-seam credit/rep/capability accessors, cell-pool list/navigation helpers-The draw helpers landed in a NEW cart-prelude module cart/stdlib.lsp over text-putc (not ui/draw.lsp: that module is the cell-tier drawing layer, and the legacy helpers draw the 80x25 text grid); the unused hline/vline retired outright. The list/navigation dispositions proved wrong on reading: they are pointer walks over the retained cell pool (the nosh_runtime.c row’s mechanism) with no authored policy, and moving them would trade one seam for a per-pointer-hop FFI. They stay as sanctioned FFI. Lisp suite tests/lisp/test-cart-stdlib.lsp.
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
screen_router.c1,020SPLITdeck.lsp registry (existing)System-tier KEC context lifecycle, arena ownership, render drive, deck/render-screen + deck/dispatch-key callsW3Route and transition policy (which screen, when) joins the *sys-screens* registry in Lisp; the context plumbing stays.
sys_screen.c288RETAIN-kec_eval_string drivers over the Lisp screen registry-Thin C driver; the registry itself is deck.lsp.
deck_screen.c782DONEdeck/deck.lsp display-state section (GWP-808)UDS seam: wallet reads, raw lambda-byte / capability-bit / cipher-seed-byte reads, evented award writers (deck/award-credits! / deck/award-rep! / deck/set-handle!), and the u32 uptime counter behind the tick / parts / mod / split-pair-seed seam (the 2^24 rule: a Lisp float counter freezes at 16,777,216 seconds)-The display state (heartbeat sampling and formatting, CIPHER-tab dashboard, SYS settings, LINK content, STATUS label tables and row formatting) moved; the counter arithmetic stayed C per the number-domain constraint.
deck_aux.c1,057DONEdeck/aux.lsp game-logic section (GWP-808)nokia.c machine (raw deck/nokia-*), u32 LFSR sequence draws, the u32 aux screen clock (advance / split-pair seed / mark / bounded since; the OOBE timeout and LINK-PROBE window run against it), action-hook forwarders (deck/hook-*), OOBE commit seam with the host-visible C mirror, factory wipe-The bounty and dialog logic (DIAGNOSTIC, LFSR EXERCISE, LINK-PROBE, INSPECT-CELL, NAME-A-LAMBDA, OOBE entry policy, KEY TEST / REBIND, FACTORY confirm gate) moved.
dev_overlay.c561MIGRATEsys/dev-overlay.lsp (proposed)Diagnostic read accessors stay in their owning modulesW2Read-only diagnostic painting is screen behavior; it reads state through accessors that already exist.
debug.c53MIGRATEsys/dev-overlay.lsp (proposed)-W2FPS counter and toggle; folds into the dev-overlay module.
keyboard_overlay.c604RETIRE---Superseded by deck/keyboard.lsp (GWP-517d), the ported widget on the ui/ kit. Still wired in hosts/emulator/src/main.c; unwire rides with W2.
tutorial.c365DONEsys/tutorial.lsp (GWP-808)Step-table parser and storage, completion flag write through the deck seam, policy-context marshalling-First-boot detection, the token match, and the advance/complete sequencing verdict moved; Lisp suite tests/lisp/test-tutorial-policy.lsp.
tutorial_wiring.c262DONEsys/tutorial.lsp (GWP-808)Commit-hook, CIPHER-push, and toast-prompt plumbing; u32 hold-timer arithmetic-The TERM-hold skip threshold moved with the tutorial policy (the tutorial_skip_due seam); the hook forwarders stay.
attract.c486SPLITattract/attract.lsp (proposed)Clip load, per-frame decode tick (no-allocation path)W2Rotation order, idle entry, and the 1-second blank pause are policy; the .kn86clip decode stays with the codec.
aesthetic_mode.c266RETAIN-Mode enum mapping, [aesthetic] TOML codec, rendering-delta accessors-Picker policy already lives in sys/aesthetic.lsp (GWP-513); what remains is mechanism plus config codec.
degradation.c220RETAIN-Degradation-mode state and helpers-Resilience path: it must keep working when the interpreter is the failing part. See open question 3.
panic_screen.c132RETAIN-Fallback fault screen over render.c/font.c/phosphor.c-Runs when the normal boot path has failed; depending on the Fe context would defeat it.
hot_swap.c256RETAIN-Eject/insert simulation driving the cartridge FSM-Emulator-side test harness for a physical event; mechanism.
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
cipher.c2,129SPLITcipher/cipher.lsp (proposed)Event-ring storage, OLED row writers, seed plumbingW4The voice is policy: decay schedules, coherence stack, mode selector weights, template grammar, beat windows. The largest single migration; the ring buffer and the OLED composition stay.
oled.c286RETAIN-256x64 1bpp framebuffer, pixel/text primitives-Device driver (ADR-0015); the coproc path presents it.
oled_row4.c226MIGRATEoled/row4.lsp (proposed)Claim-slot storageW2The claimant-arbitration rule (preemptive beats topmost regular) is routing policy; rides with the oled/ mode manager pattern (GWP-729).
sys_oled.c88RETAIN-oled-clear, oled-big-text, oled-fill-rect, oled-mode-claim bindings-Binding seam over the driver; oled/oled.lsp already builds on it.
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
input.c601SPLITdeck/input.lsp (proposed)Scancode-to-KN86KeyCode translation, event queue, backend-seam pollW3Hold-detection thresholds and press/hold classification are input policy; the translation table and queue are mechanism.
keymap.c240RETAIN-INI keymap-file parser, key-name mapping-Config codec, no SDL dependency.
nokia.c336MIGRATEdeck/multitap.lsp (proposed)-W3Deterministic multi-tap state machine with host-supplied timestamps; pure input policy, ports as-is.
t9_rank.c485MIGRATEnemacs/t9.lsp (proposed)Popularity baseline tables may ship as Lisp dataW3Deterministic pure-function ranker (ADR-0009); completion policy. The 50 ms event budget covers a tree-walked ranking at this candidate count.
nosh_input_lisp.c110RETAIN-(read-key), (poll-key) ring over the input pipeline-Binding seam (GWP-635).
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
nemacs.c2,389SPLITkec-lisp editor engine via nemacs_lib.c (GWP-705 route)Dual Fe context ownership (editor + REPL arenas), marshallingW4The structural editor, cursor walk, and completion glue are policy; the library-backed engine already exists in kec-lisp. See open question 4 on retiring the C editor wholesale.
nemacs_lib.c327RETAIN-Pending-text primitive, engine-drive bridge-Binding seam to the kec-lisp editor engine.
nemacs_screen.c574RETAIN-nemacs_screen_bind set (nemacs/tree, nemacs/completions, cross-context marshalling)-Marshalling seam behind nemacs/nemacs.lsp (GWP-515).
repl_screen.c166DONErepl/repl.lsp (GWP-514, evaluator to Lisp with GWP-573)Three repl_screen_bind history primitives-The evaluator left C once the System tier gained eval; the residue is the history-ring seam.
repl_lib.c232RETAIN-Pending-line primitive, engine-drive bridge-Binding seam (GWP-573/574).
repl_toast.c271MIGRATErepl/toast.lsp (proposed)Framebuffer save/restore under the bandW2Toast chrome, animation envelope, and lifecycle are screen behavior; pairs with the ADR-0053 drop-down work.
repl_history.c128RETAIN-Tagless-blob ring codec over DeckState-Persistence codec; converges on the scoped blob-store contract.
snippet.c338RETAIN-Fixed-slot pool codec with compaction over DeckState-Persistence codec; converges on the scoped blob-store contract.
snippet_screen.c203RETAIN-snippet_screen_bind set, hydrate/flush-Binding seam (GWP-761).
keystore.c195RETAIN-Tagless byte-blob codec over DeckState-Persistence codec (GWP-661); converges on the scoped blob-store contract.
keystore_screen.c281RETAIN-keystore_screen_bind set, hydrate/flush-Binding seam; the ADR-0040 sanctioned-write rationale holds.
dossier.c114RETAIN-Fixed-capacity intel-store codec-Persistence codec (GWP-609); converges on the scoped blob-store contract.
dossier_screen.c80RETAIN-Read-only enumeration bindings-Binding seam (GWP-668, ADR-0040 read-only).
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
psg.c295RETAIN-YM2149 register-level synthesis at 44.1 kHz-Realtime DSP kernel; the audio callback stays C at any migration depth.
sound.c185RETAIN-Audio callback plumbing, render-pull, coproc routing-Kernel glue behind the host seam (GWP-538).
sfx.c167MIGRATEsys/sfx.lsp (proposed)A raw PSG register-write primitive (proposed)W2Cue tables are audio content; they become Lisp data applied through one register-write primitive.
music.c357RETAIN-Deterministic pattern player, fade attenuation, register scheduling-Runs from the audio callback with caller-supplied elapsed time; realtime kernel. See open question 5 for the sequencing boundary.
station.c474RETAIN-PCM streaming engine, SPSC ring into the callback, manifest scan-Realtime streaming kernel (GWP-599/678); track-advance runs on the audio side of the ring.
station_bind.c121RETAIN-station-* Fe control surface-Binding seam.
coproc.c437RETAIN-v0.2 wire framing, CRC, command vtable, in-process/UART modes-Transport codec plus driver (ADR-0017); conformance target is the Pico 2 firmware.
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
render.c444RETAIN-1024x600 RGB565 surface, glyph blit at integer scales-The framebuffer blitter (ADR-0036); named by the policy as a retained kernel.
font.c523RETAIN-Generated 256-glyph 8x8 bitmap data-Generated data (tools/gen_font.py); not hand-authored logic.
phosphor.c223RETAIN-Scheme enum, RGB565 values, TOML persist-Render mechanism plus config codec; the picker policy is sys/aesthetic.lsp.
composite.c70RETAIN-Dither scrim, drop shadow over the surface-Pixel kernel (ADR-0036).
text_view.c332RETAIN-Legacy 80x25 text surface over render.c-Mechanism kept for the Legacy Terminal and overlay passengers; the re-flow task tracks its retirement path separate from this map.
cell_api.c368RETAIN-Cart backbuffer, chrome-row gate, half-block canvas, soft-glyph plane-The constrained cart draw tier (ADR-0027/0036); the sandbox boundary itself.
cell_api_bind.c181RETAIN-cell-* bindings into cart and System contexts-Binding seam.
sys_render.c465RETAIN-Privileged render/* primitive set-Binding seam (GWP-509).
sys_context.c217RETAIN-System-tier context assembly on a caller arena-Interpreter-context lifecycle; capability is the binding set.
reveal.c268RETAIN-Reveal registry, handle lifecycle, per-tick advance-Render animation kernel; ADR-0033 pins per-cell state outside the Fe arena.
reveal_char_flicker.c105RETAIN-Per-cell flicker settle kernel-Render kernel (ADR-0033).
reveal_radial.c71RETAIN-Wavefront reveal kernel-Render kernel (ADR-0033).
clip.c270RETAIN-KC86 binary decode, zero-copy playback-Binary codec.
nosh_clip.c169RETAIN-Cart-facing clip playback API-Binding seam over the codec.
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
cartridge.c1,079RETAIN-.kn86 header validation, per-cart arena open, NoshAPI registration, static-data walk-Loader: codec plus context lifecycle. The legacy dlopen path inside it is a retirement candidate once no .so cart remains.
cartridge_fsm.c696RETAIN-Lifecycle FSM, phase-chain little-endian serialization-Hardware-event lifecycle plus codec; illegal-transition handling is defensive mechanism.
capabilities.c293RETAIN-CART_CAPABILITIES binary parser, firmware-baked allowlist intersection-Sandbox-boundary enforcement; the allowlist is deliberate firmware policy changeable by re-flash alone (ADR-0015 3a).
provenance.c477RETAIN-32-byte block codec, FNV-1a chaining, append-on-record persistence-Codec plus integrity core.
provenance_wiring.c287RETAIN-Bus subscribers, lifecycle integration-Seam glue (GWP-255).
firmware_validate.c271RETAIN-.kn86fw header validation, inline SHA-256-Integrity codec (GWP-114); layout owned by tools/kn86fw/format/kn86fw.h.
nosh_save.c361RETAIN-Atomic write (tmp + rename + fsync), strict-size read-The blob-store mechanism itself; generalizes into the scoped atomic blob-store contract the persistence constraint names.
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
nosh_lisp_bridge.c4,237RETAIN-NoshAPI v1: the ~54 cart-facing primitives (ADR-0005), (mission-contract-raw)-The binding seam the policy exists to protect; largest file and correct at that size.
nosh_world_bind.c143RETAIN-Opaque live :world handle accessors-Binding seam (GWP-629/631/632).
nosh_scripted_mission.c733RETAIN-Sandbox runner: arena, tier bindings, deny-stubs, instruction budget-Interpreter-context lifecycle (ADR-0007); the missions it runs are Lisp.
nosh_host.c1,219SPLITsys/dispatch.lsp (proposed)Boot/shutdown orchestration, frame pump, arena ownership, host-config callbacksW3The key-dispatch policy (which surface consumes a key, modal precedence) moves; process-lifetime orchestration stays.
nosh.c250RETAIN-Subsystem init wiring-Lifecycle glue.
router_bringup.c85RETAIN-Single screen-router bring-up-Lifecycle glue shared by hosts.
nosh_event_bus.c152RETAIN-Fixed-table pub/sub-Mechanism named by the policy (event-bus glue).
sched.c178RETAIN-Fixed-entry timer table over a virtual clock-The mechanism under run-with-timer; scheduling policy stays Lisp-side.
panic.c471RETAIN-Signal handlers, sigjmp recovery, Fe error trap-Crash-recovery lifecycle; async-signal-safe by construction.
watchdog.c84RETAIN-sd_notify READY/WATCHDOG pings-Platform glue (GWP-378).
nosh_backend_stub.c36RETAIN-Headless host-seam stubs-The test backend.
platform_link_emu.c273RETAIN-In-process ring-buffer link HAL stub-Transport driver stub (GWP-254).
cli.c185RETAIN-kn86emu argument parsing-Host tooling.
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
legacy_terminal/launcher.c381SPLITundecided (see open question 1)PTY session start/stop via runner.cW3The SYS+INFO gesture detector and launcher menu are input plus screen policy; whether they may live in Lisp depends on the mode-swap isolation question.
legacy_terminal/runner.c380RETAIN-PTY child process, CSI parse into the text grid-OS mechanism plus terminal codec.
legacy_terminal/manifest.c228RETAIN-INI manifest parser-Config codec.
legacy_terminal/numpad_shim.c88RETAIN-Static digit-key remap table-Lookup-table mechanism.
legacy_terminal/fkey_overlay.c235MIGRATEoled/fkeys.lsp (proposed)OLED row save/restoreW2Row 4 F-key labels are OLED content policy; rides with the oled/ module and the row4 claim migration.
SourceLinesDispositionTarget Lisp moduleRetained C surfaceWaveNotes
recorder.c508RETAIN-Input-script parser, cell-to-RGB565 raster, PNG encoder-Demo/QA tooling: codec plus raster, KEC-free by design.
recorder_drive.c994RETAIN-System-tier context open, cart load, script replay-Thin runner; the carts and scripts it drives are .lsp/.rec.
tools/kn86rec/kn86rec.c229RETAIN-CLI main over recorder-Thin runner.
tools/kn86psg/kn86psg.c618RETAIN-.knm tune compiler/player-Offline audio codec tool; tunes are data files.

Each entry is verified against the module header on disk.

Lisp moduleWhat movedTask / PR
system-image/lib/sys/aesthetic.lspSYS aesthetic picker, the first C-to-KEC screen portGWP-513
system-image/lib/repl/repl.lspREPL screen; the evaluator followed once the System tier gained evalGWP-514, GWP-573/574
system-image/lib/nemacs/nemacs.lspnEmacs screen render path (replaced the C OLED composition and the termbox2 spike)GWP-515
system-image/lib/board/board.lspMission board VIEW (landing/list/peek states)GWP-516, GWP-648. Generator shipped under GWP-777 as mission/board-gen.lsp
system-image/lib/deck/deck.lsp + deck/aux.lsp + deck/keyboard.lspBare-deck home shell, aux surface, keyboard widgetGWP-517a/517d
system-image/lib/oled/oled.lspCIPHER-LINE full-screen mode manager and built-in modesGWP-729
system-image/lib/render.lspSystem-tier render/ wrapper libraryGWP-509
system-image/lib/mission/pricing.lspMission-end pricing policy (completion clamp, abandon rep cost), split-pair number conventionGWP-747, PR #202
system-image/lib/mission/contract.lspCart-facing contract readers over one raw primitiveGWP-773, merged in the PR #204 stack
system-image/lib/sweep/sweep.lspSweep arming policy, cadence, teardownGWP-775, PR #204
system-image/lib/mission/objectives.lspObjective-graph policy (goal declaration, close, resolve)GWP-750, PR #208
system-image/lib/mission/baseline.lspBaseline selection-weight policy (supersession drop, threat inheritance and clip, single-phase rule)GWP-808
system-image/lib/sys/tutorial.lspFirst-boot tutorial policy (detection, token match, sequencing, TERM-hold skip threshold)GWP-808
system-image/lib/deck/demo-seed.lspHeadless demo-deck seed contentGWP-808
system-image/lib/cart/stdlib.lspLegacy text-grid draw helpers of NoshAPI v1 over text-putcGWP-808
system-image/lib/deck/deck.lsp (display-state section)Bare-deck shell display state and row formattingGWP-808
system-image/lib/deck/aux.lsp (game-logic section)Bounty and dialog logic, OOBE entry policy, KEY TEST / REBIND, FACTORY gateGWP-808

Ordered buckets for the MIGRATE/SPLIT rows. Dependency- and risk-driven; no dates.

WaveRowsRationale
W0 (partly shipped)board_screen.c (remaining); mission_board.c (shipped)Owned by GWP-777; this map records, and does not re-plan, that slice. mission_board.c’s generator has landed as mission/board-gen.lsp, leaving board_screen.c as the wave’s only open row.
W1 (shipped, GWP-808)nosh_baseline.c, deck.c, nosh_stdlib.c, deck_screen.c, deck_aux.c, tutorial.c, tutorial_wiring.cPolicy already behind existing seams and existing Lisp modules. All seven rows shipped under GWP-808; each row above carries its module path and retained surface.
W2dev_overlay.c, debug.c, repl_toast.c, oled_row4.c, legacy_terminal/fkey_overlay.c, attract.c, sfx.c (plus the keyboard_overlay.c unwire)Screens, overlays, and content tables: self-contained surfaces with small blast radius, each following the established screen-port pattern.
W3input.c, nokia.c, t9_rank.c, nosh_runtime.c, nosh_host.c, screen_router.c, legacy_terminal/launcher.cInput and dispatch policy: one coherent pass over classification, routing, and key precedence, done after the screens it routes to are Lisp.
W4cipher.c, nemacs.c, world_engine.cDeep cores: the largest files, each with an unresolved boundary question, done last with the seam patterns proven on W1-W3.

Retained C inventory (the post-migration FFI boundary)

Section titled “Retained C inventory (the post-migration FFI boundary)”

The complete C surface once W0-W4 land. This is the boundary the FFI reference documents. “Proposed” marks contracts that do not exist today.

GroupSourcesContract status
Render / framebufferrender.c, font.c, phosphor.c, composite.c, text_view.c, reveal.c, reveal_char_flicker.c, reveal_radial.c, cell_api.cExists: render/* tier, cell-* tier, reveal primitives
Input eventsinput.c (mechanism half), keymap.c, nosh_input_lisp.c, legacy_terminal/numpad_shim.cExists: (read-key)/(poll-key), event queue. Proposed: classification-threshold accessors for the Lisp policy
Audio kernelsound.c, music.c, station.cExists: cue/tone/silence surface, station-*. Proposed: raw PSG register-write primitive for the sfx.c data migration
PSGpsg.c, tools/kn86psg/kn86psg.cExists: register model, .knm toolchain
OLED driveroled.c, sys_oled.cExists: pixel tier, mode gate
Coproc UARTcoproc.c, platform_link_emu.cExists: v0.2 framing per coprocessor-protocol.md
Blob storenosh_save.c, deck.c (codec half), repl_history.c, snippet.c, keystore.c, dossier.c and their *_screen.c seamsExists: per-store codecs and hydrate/flush seams. Proposed: one scoped atomic blob-store contract these converge on
Codecs / integrityclip.c, nosh_clip.c, provenance.c, provenance_wiring.c, firmware_validate.c, capabilities.c, cartridge.c, cartridge_fsm.c, legacy_terminal/manifest.c, legacy_terminal/runner.cExists
KEC lifecycle and bridgenosh_lisp_bridge.c, cell_api_bind.c, sys_render.c, sys_context.c, sys_screen.c, nosh_world_bind.c, station_bind.c, nosh_scripted_mission.c, nosh_baseline_loader.c, nemacs_lib.c, nemacs_screen.c, repl_lib.c, screen_router.c (lifecycle half), nosh_host.c (lifecycle half), nosh.c, router_bringup.c, nosh_event_bus.c, sched.c, panic.c, panic_screen.c, watchdog.c, degradation.c, mission_world.c, world_heat.c, mission_sweep.c, hot_swap.c, aesthetic_mode.cExists: NoshAPI v1 and the seam sets named per row above
Test / demo runnersrecorder.c, recorder_drive.c, tools/kn86rec/kn86rec.c, cli.c, nosh_backend_stub.cExists

The language-policy.md standing-debt table now lists board_screen.c alone under GWP-777; this map agrees and marks it the wave’s only open row. mission_board.c has left the debt table: its generator migrated to mission/board-gen.lsp (template pool, eligibility gate, tier and instance-count tables, threat clamp, payout formula), the file keeps mechanisms only, and the tier and broke-bonus math moved with it. The policy’s migrated list (pricing, contract readers, sweep, PRs #202 to #204) is confirmed from the module headers; this map refines it with mission/objectives.lsp (GWP-750, PR #208), which shipped after the policy was codified. Rows in this map beyond the debt table (the W1-W4 SPLIT/MIGRATE set) extend the table’s scope rather than contradicting it; the debt table stays the short-form authority for the remaining GWP-777 row until that slice merges.

  1. legacy_terminal/launcher.c: whether the gesture detector and launcher menu may be Lisp when ADR-0021’s mode swap suspends the runtime that would host them.
  2. world_engine.c: whether archetype shaping migrates to Lisp or the engine stays a sealed deterministic kernel read through the :world handle, given the u32 hash domain and the ADR-0049 determinism invariant.
  3. degradation.c: whether degraded-mode selection may live in Lisp when the mode exists to survive interpreter failure.
  4. nemacs.c: whether the C structural editor retires wholesale in favor of the kec-lisp editor engine (GWP-705) or keeps the completion path in C for keypress latency.
  5. music.c: whether pattern sequencing counts as audio policy (Lisp on run-with-timer) or as synthesis (C in the callback), given the caller-supplied elapsed-time design.