ipc-polish (2026-10-27, Linux cloud): IPC command depth from 99% toward 100%¶
Branch claude/ipc-polish-2026-10-27, base 11a9da9. Status words: tested = unit test passes on Linux; nothing here was run on a Mac.
Scan before / after (python3 -I .claude/skills/percent-analysis/scan.py)¶
| before | after | |
|---|---|---|
IPC_IMPL rows |
1136 | 1145 |
IPC_STUB rows |
16 | 7 |
| IPC command depth | 99%, 4.9 pts | 99%, 5.0 pts |
| measured coverage | 96.2% | 96.2% (+0.04 from this row only) |
Stub rows per file before: applet 7, applet_ae 3, fs 3, nvdrv 1, vi 2. After: applet 1, fs 3, nvdrv 1, vi 2. The bsd rows the assignment named (DuplicateSocket, RecvMMsg, SendMMsg) were already IPC_IMPL on main (ipc-depth-rest2); RegisterClient still answers 0 (test in test_svc_offline_depth.c). The offline pool rows are all impl already.
Row by row¶
| Row | Decision |
|---|---|
applet IsSystemBufferSharingEnabled (ISelfController 41) |
documented answer: failing result for a process without the shared system buffer. impl |
applet PopLaunchParameter (IAF 1) |
real for the preselected-user parameter (kind 2, once), "no data" 0x480 otherwise. impl |
applet EnsureSaveData (IAF 20) |
0 extra size: the host creates the save on first mount. impl |
applet GetSaveDataSize (IAF 26) |
now reads UserAccountSaveDataSize/JournalSize from control.nacp (0x3080/0x3088); 32 MiB each without it. impl, tested |
applet GetPreviousProgramIndex (IAF 110) |
-1 (single-program title). impl |
applet / applet_ae NotifyMessageToHomeMenuForDebug |
no Home menu process, silent accept. impl |
applet GetSystemSharedLayerHandle (42) |
kept stub: unreachable once sharing reports disabled; placeholder {1, 1} |
applet_ae GetImageDatabaseService (miiimg placeholder) |
dead code (the real service is mii_img.c): removed |
applet_ae CreateSystemInterface (nfc:sys / nfp:sys) |
real: registered in offline.c, hands out the simulated INfc / INfpUser objects. impl, tested |
nvdrv 13 Unknown13 |
kept stub: no public description |
vi TransactParcel / TransactParcelAuto |
kept stub: the graphics back end never uses the producer |
| fs 1003 / 1005 / 1006 | not touched (fs.c belongs to another session): hand-off, they are console no-ops / log-mode getter and should become impl with a comment |
| online rows (bsd, nifm, friend, nsd, ssl, ...) | unchanged: provider hooks, NullProvider answers |
Known calls (part 2)¶
runtime/tests/linux/known_calls_titles.txt (new, 239 rows): the common SDK boot sequence plus the commands documented for LAS (apm ids, swkbd path), SMO (nn::socket init, nfp at boot), ACNH (ngc, olsc, prepo 10105, IAF 130/210, ICSG 900, fsp 202) and MK8D (mii:u, time:u 300), taken from docs/titles, the archived change notes and source comments. Titles' real traces are not in the repo (no game here), so the list is "documented or standard SDK init", not a captured trace; rows were selected by command name (a name that exists in several tables of one file lists every id). check_known_calls.py now reads every known_calls_*.txt and fails when a titles row disappears, is renamed, or is IPC_STUB (except vi 0/3). 705 rows checked.
Tests¶
test_svc_applet.c (+8 checks), test_svc_offline_depth.c (+2: nfc:sys / nfp:sys). tests/linux/run.sh and run_applet.sh green; see the integrator file for the numbers. Not run: Mac builds, make -C runtime test, any game boot.