D505 - The declared surface now matches what guests ask for, and the coverage figure got worse
decided - 2026-09-03
Twenty-eight libraries declared, 212 names, none implemented. The point is not the names; it is that the denominator was wrong.
declared / implemented 674 / 647 (96%) -> 947 / 647 (68%)
unresolved imports 342 -> 117
The 96% was measuring the wrong set
D500 said coverage is not capability. This is why: orbistoun declared fifteen libraries, and PPSA02664's executable imports from thirty-five. The declared surface was very nearly what had already been implemented, so the ratio could not do anything but look finished.
Now it is 68%, and the drop is the figure starting to mean something. 947 - 273 = 674, the old declared total exactly: nothing was removed, and everything added is a name a guest asks for and nothing answers.
orbistoun-cli status reports the distinction rather than
leaving it to be rediscovered:
| Functions declared / implemented | 947 / 647 |
| Declared in a library that serves nothing | 273 across 30 libraries - names written down, no implementation |
Counted by library, not by symbol, because a library with one implementation is being worked on and a library with none has only had its names written down.
What was declared, and where it went
Homes were chosen so an implementation would not have to move later:
| crate | libraries |
|---|---|
orbistoun-audio |
libSceAjm, libSceAudioOut2,
libSceAudio3d, libSceAudioIn |
orbistoun-video |
libSceAvPlayer, libSceVencCore,
libSceVideoRecording |
orbistoun-input |
libSceKeyboard, libSceMouse,
libSceIme, libSceImeDialog |
orbistoun-net (new) |
libSceHttp2, libSceNet,
libSceSsl, libSceNpWebApi2,
libSceNpManager, libSceHttp,
libSceNetCtl |
orbistoun-systemservice |
libSceAppContent, libSceSaveData_native,
libSceMsgDialog.native,
libSceWebBrowserDialog, libSceRemoteplay,
libSceCommonDialog, libSceErrorDialog,
libSceCoredump, libSceJson2 |
orbistoun-gpu |
libSceAmpr |
One new crate, because networking had no home and putting it in one
that fit badly would have to be undone. libSceAmpr is
placed by name association with the graphics submission path and says so
- a placement worth revisiting rather than a claim.
Provenance, per library, because that is the whole licence to do this
Every name is read out of a real module's import
table or measured resolving on hardware - the provenance
orbistoun-input documents for libScePad, and
the strongest available without a console. Each module's header names
which: PPSA02664's own imports, other modules in the recorded corpus, or
obSCEne's 106-encoder checks (all
unresolved = 0x0, so those symbols demonstrably exist).
The <unknown> hashes in those same
libraries are not declared. Six of them sit in
libSceAgc alone. A hash is not a name, and declaring one
would put a NID in the table with nothing to say about it.
Arities are 6 throughout - the trampoline's full
capture, and not a claim about argument counts. D504 has the argument;
the short form is that arity reaches reports and trace shape and never
the call path, so the honest choice is the one that discards no
information.
What it did not do, measured rather than assumed
It did not move the wall, and it did not fix the oscillation. Twelve runs after: nine at 2080 calls / 46 distinct, three at 2077 / 44 - the same bimodal pair and the same ratio D499 recorded. The first four samples came up 2080 four times, which is exactly what a claim of "the non-determinism is gone" would have rested on; four is not enough to separate that from a coin weighted 60/40, and the next eight settled it.
standing is unchanged at 2078 of 2080 answered by an
implementation. The guest reaches none of these libraries before it dies
- which principle 6 predicts, and which is why every one of the
twenty-eight is in SERVES_NOTHING rather than
half-implemented.