2026-09-03 - (/loop) Skeletons for the gaps: 61 graphics names and 49 recorded imports

declared functions      674  ->  735
unresolved imports      342  ->  286
knowledge entries       655  ->  682 recorded, 654 understood beyond a name

Directive was to stop self-blocking and build skeletons. Two gaps had one, and the honest skeleton in both cases was names without claims.

The current generation's graphics API was not declared at all

D500 found orbistoun modelling libSceGnmDriver - the previous generation - while guests call Agc. Reading PPSA02664's import table gave the size of it: fifty-one libSceAgc names and five libSceAgcDriver, plus five more libSceAgcDriver names the corpus saw called from other modules. Sixty-one confirmed names, none declared, six of them being called and reported as unknown::.

Declared, nothing implemented. Unresolved imports for that executable: 342 -> 286. D504.

The arity question is settled by precedent rather than by invention: orbistoun-input already documents that "the names are confirmed, the arities are not, and that asymmetry is deliberate". Checked that arity never reaches the call path - it goes to ImportDesc, the CLI listing and the knowledge generator, and nowhere else. So every arity is 6, the trampoline's full capture, on the reasoning that with nothing established recording every argument register loses no information where guessing low discards it.

Two guards caught me, and both were right.

And it changed nothing about the run. Four samples after: 2077/44 and 2080/46, the same bimodal pair, the same fault at the same address. The guest dies long before graphics, which is what principle 6 predicts. Worth recording either way - a declaration that had moved the wall would have been a surprise worth chasing.

Forty-nine called imports had no knowledge entry at all

Computed rather than guessed: of the 433 distinct imports the corpus has seen called, 49 named ones had no entry (the 53 unnamed hashes excluded - those are the harvester plateau). Led by scePadReadState at 519 calls and sceKeyboardReadState at 519.

All 49 recorded, with name, library, where it was seen and how often, and nothing else. No arity, no purpose, no known_by - because the field is required only when something beyond a name is recorded, and nothing beyond a name is. knows counts them honestly: 682 recorded, 654 understood beyond a name.

I got the provenance wrong on the first one and caught it: I recorded sceAgcDriverGetDefaultOwner as --known measured --cites "obSCEne 106-encoder/related-libs", and no probe measured that symbol - the related-libs check measured libraries absent. Its knowledge comes from a guest's import table, which is found_by = static and no behavioural claim at all. Deleted and re-recorded.

Eleven libraries guests import from are still undeclared

libSceKeyboard, libSceNetCtl, libSceVideoRecording, libSceJson2, libSceCommonDialog, libSceCoredump, libSceErrorDialog, libSceSaveData_native and the two now done. That is why unknown::sceKeyboardReadState shows 327 calls beside libSceKeyboard::sceKeyboardReadState's 192 - the same function, split by whether the library resolved.

Not done here: each wants its names read out of an import table the way Agc's were, and libSceKeyboard belongs in orbistoun-input beside the pad rather than in a new crate. Next.

State

cargo test --workspace green - 117 suites, 1993 tests, 0 failures. clippy --tests clean, fmt clean, identity scan clean on both.

Nothing committed. The day holds worklogs 292-353 and D466-D504.