2026-09-02 - (/loop) 452 documented functions were knowable all along; the work list is now inventory-driven
User's criticism, and it lands: "we know we need all of this
stuff, so why are we adding it piecemeal rather than one big port".
Both walls hit today - _Getpctype and setenv -
are C library functions with published specifications, and each cost
most of a session to discover. Writing them is an
afternoon; discovery was the expensive part, and none of it was
necessary: the import list is knowable before execution, which is
exactly what principle 7 buys.
What was actually missing was a report
worklist totals call traces and says so in its own help
- "a static import dump says what a module might call; this says
what it actually did". That is a deliberate choice and it is right
for vendor code, but it means the tool can only ever name functions a
run has already reached. Nothing answered "what is imported and
unimplemented", which for a documented function is enough to act on.
Added orbistoun-cli worklist --static-gap. Over the
seven modules in titles/:
| needed | missing | |
|---|---|---|
| documented - write in bulk, no guest needed | 711 | 452 |
| the title's own modules - load, do not implement | 1 | 1 |
| vendor - the guest is the only oracle | 29,633 | 29,487 |
plus 7,333 imports with no name yet. The documented gap is
libScePosix 281 and libc 171.
The classification is a type, with tests (D472)
orbistoun_hle::origin::Origin - Documented
/ TitleOwn / Vendor - because two of the three
answers are not "write it". TitleOwn encodes today's other
finding: PPSA02664's il2cpp_init imports come from
Il2CppUserAssemblies.prx, sitting in the title's own
Media/Modules/ beside PS5Util.prx and three
plugins. sceKernelLoadStartModule hands back a handle
without loading anything and nothing registers a second
module's exports, so calls into the game's own code land on stubs.
Implementing them would be reimplementing the game.
The classifier consults the symbol as well as the library, since
libc is not uniformly documented -
sceLibcMspaceMalloc lives there and is not a standard
function. Five tests pin that, including the two that would have been
got wrong.
One thing I nearly shipped
The first version of the summary printed "1 needed, 2
missing" - impossible on its face, because needed
deduped by symbol name while the gap summed per-library sets. Fixed by
counting missing names flat as well, and the reason is in a comment: a
symbol two libraries both name is one job. A report that prints an
impossible number is the failure principle 3 is about, and it was in a
tool built to fix a reporting blind spot.
Not done, deliberately
setenv was half-written this tick and abandoned mid-edit
when the direction changed - the file is untouched
(grep -c "fn setenv" is 0). It belongs in the first batch
rather than as another one-off, which is the whole point.
Next
Batch the documented gap by family - string/memory, atomics, C11
threads, stdio, math, C++ ABI - each written from its specification and
tested against it, no guest required. Vendor work stays wall-driven.
After the batches, the TitleOwn loader is the single
highest-value structural piece: it would unlock
Il2CppUserAssemblies, PS5Util (36k calls in
the corpus aggregate) and three plugins at once.
clippy --tests clean, fmt clean, orbistoun-hle tests
pass, identity scan clean, nothing committed.