493. The refusal a guest could not see
2026-09-10 - loop, continuing 492
Went after image+0x39f7c, the fault PPSA02664 and
PPSA03416 share. The register dump named the cause:
rbx = 0x7fff0001, orbistoun's Unimplemented
placeholder held in a callee-saved register, and
rsi = 0x542e2e00776f6c66 - which is ASCII,
"flow\0..T", not a pointer. The guest had taken a refusal,
believed it, and built a pointer out of what came after.
Placeholders were positive, so they read as success
D009 has placeholders avoid the high bit so a leak is "obvious in a
trace rather than plausible". Obvious to a reader; invisible to the
guest. Every error this platform has been measured returning sets the
high bit, so a guest tests rc < 0, and
0x7FFF_0001 is positive.
StubPolicy defaults to Unimplemented rather
than Ok for exactly this reason, and
Unimplemented was Ok to anything that
looked.
The policy is data, so the question cost one run. Same guest, same
code with the high bit set: it printed
sceCommonDialogInitialize() failed 0xf7ff0001 and called
exit. Two observations of different kinds - where it
stopped, and the guest naming the function in its own words - which is
what principle 3 requires of an intervention that moves a wall.
PLACEHOLDER_BASE is 0xF7FF_0000 now:
negative so a guest's check catches it, not 0x80 so it
still cannot be read as firmware, same low half so it is recognisable on
sight (D670).
What it actually bought, stated honestly
It did not move the wall. Answering
sceCommonDialogInitialize with ok puts
PPSA02664 straight back at image+0x39f7c, 197 imports and
417,752 calls, with rbx = 0xf7ff0001 from
sceAgcCreateShader - the same wall, and one Unity does
not check. The sign helps where a guest checks and nowhere
else.
What it bought is that the stop is now honest and named:
| title | was | now |
|---|---|---|
| PPSA02664 | image+0x39f7c, 197 imports, 417,752 calls |
exit, 74 imports, 15,007 calls, names the
call |
| PPSA03416 | image+0x39f7c |
exit, names the call |
| PPSA25872 | image+0x17554a3 |
exit, 77 imports, 18,965 calls, names the
call |
| PPSA28061 | image+0x43c4, 933 calls |
abort, 334 calls, after printing
Earthion 0_8256KB |
| PPSA21564 | title's own modules+0x7af792 | unchanged |
| PPSA04263 | image+0x196b91a |
image+0x2bfab2f |
| obscene-payload | ran to completion | unchanged |
Three titles that died at three different garbage addresses now stop
at one named function. The reach numbers fall a long
way and that is the correct answer: every FURTHER earned
past an unimplemented call was earned by the guest being told it
worked.
Surprises
sceCommonDialogInitialize is checked and
sceAgcCreateShader is not. Same guest, same run,
two refusals: one it tests and exits on, one it stores in a register and
dereferences. Worth knowing before assuming a negative code fixes
anything on its own.
Six tests failed on a number rather than a
behaviour. tests/posix.rs wrote
0x7FFF_0002 and 0x7FFF_0003 out as literals -
two copies of one constant, and the second is the one that goes stale.
Same shape as the twelve knowledge files nothing loaded (D668) and the
profile that still said ps5 after the rename (D663). They
derive from GuestError now.
I destroyed
crates/orbistoun-core/src/error.rs with a
multi-line perl -0pi substitution whose pattern matched the
whole file. Restored from HEAD and re-applied the one
addition this session had made to it, which was in context verbatim, so
nothing was lost. Structured edits to source go through the editor from
here, not through regex.
Recorded rather than answered
sceCommonDialogInitialize is not measured
anywhere: obSCEne's 130-layout/common-dialog reads
resolved|0x0 and skips, and 900-surface/dialog
reports every libSceCommonDialog symbol absent on the
package leg. Filed as REQ-20260910T0600Z-a3f7.
Meanwhile the fact is established well enough to write down,
and it is written down: answering 0 lets PPSA02664 proceed
123 further imports; answering a negative stops it dead; and all three
titles that stop here ship and run on a console, so it succeeds there.
That is guest-observed in this project's own vocabulary -
the guest proceeded when answered this way, and stopped
otherwise - and both halves were actually run.
orbistoun still does not answer 0 by
default. Making it do so would put back exactly what this entry
removed: a stub answering success for a call nothing measured. The
knowledge file now says what a one-line policy override would be resting
on, which is the difference between an assumption somebody can retire
and one nobody can see.
The mesh
SELFish resolved the split-decisions.sh change:
keep, 29 rows moved, no row wrong. They credit the
banner shape - the half they would have dropped - which turned out to
fix a false red on their D088 as well as preserving the true
one on D070. obSCEne and Prosperous have not answered yet.
Next
sceAgcCreateShaderis the wall behind the wall, and is unmeasurable on any obSCEne leg.111-modlink/walkstill needsDT_DEBUG, which is why the context record still saysunknown-gpu.category::presentis still built and uncalled.