D225 - The report goes to the system log first, because a title has no descriptor

Every output channel runtime.c had writes to a descriptor: sceKernelWrite, puts, write, putchar. A title launched by the system has no parent holding the other end of one.

sceKernelWrite to standard output does not fail in that situation - it returns the byte count and the bytes go nowhere. That is precisely the undetectable success the comment on the channel order already warned about for one emulator, arriving from a direction nobody had looked: not a loader that lies, but a process with nobody listening. A full run would report itself sent and be unreadable.

So OBS_CHANNEL_DEBUG_OUT goes first: sceKernelDebugOutText, which is not a descriptor and which a homebrew klog reader already tails. It is the channel that made the minimal build's run legible - obscene-min: the guest is running arrived through it and through nothing else - and start.c already used it for boot breadcrumbs on the same reasoning. On an emulator it resolves to null, the guard skips it, and the order that was already right for emulators is unchanged.

It is the third local copy of one signature, after start.c and min.c, and this project says three copies of a judgement is how one of them goes wrong. It cannot go in platform.h yet: the census in corpus.h declares the name as const char so that it can only be probed, bulk.c and surface.c include both headers, and a function declaration there is a conflict in those two translation units. Converging them is the documented five-step census move and is worth doing; it is written down here rather than left to be noticed.