D507 - A second capture settles the third query field, and demotes thirty measurements
measured - 2026-09-03 (live_launch.txt,
the same build shape as the capture before it)
A new hardware capture arrived: same meta, same
build|dev|module, same context, and a better run -
144 checks passed where the previous one managed 122,
with three fewer failures and thirteen fewer partials.
measurements 224 -> 227 constant 200 -> 172
CLAIMED 73 -> 76 OPAQUE 58 -> 28 OUTSTANDING 69 -> 68
The third field of the query structure is the memory type
orbistoun-kernel has carried this beside that field:
What
3denotes - a type, or some state - is still open, and one run distinguishes them: allocate with several types and query each back.
That run has now been taken. One 16 KiB page allocated with each of
WB_ONION (0), WC_GARLIC (3) and
WB_GARLIC (10), and the field read back for each:
| asked | read back |
|---|---|
| 0 | 0x0 |
| 3 | 0x3 |
| 10 | 0xa |
Every one is the type it asked for. Three distinct answers also rule out the other reading obSCEne's own comment named - "if it is the same value for every type, it is state and the type is somewhere this does not read."
So the model orbistoun already had was right before it could be
checked, and the three measurements are claimed by
the_third_query_field_is_the_memory_type_the_allocation_asked_for.
The test allocates and then queries rather than reading a region
orbistoun built itself, because the latter would pass on the model
alone. Watched failing by writing a constant 1 into the
field.
This is only measurable because the run got direct
memory. The previous capture recorded
alloc-refused for all three types - the arbitrator granting
that process nothing - so both sets of records are real and neither
supersedes the other: one says what happens when the allocation is
refused, the other what the field holds when it is not.
The poison answered D497, and the answer cannot live on that measurement
Yesterday's probe change (obSCEne's D303) initialised the encoder
path-probe's out-parameter to 0xC7C7C7C7 instead of zero,
because a zero could not be told from a field the platform never writes.
All twenty-four paths now report
0xc7c7c7c7: the platform does not
write that out-parameter on a refused load.
The measurement id cannot carry that finding. The two captures
disagree - 0x0 then 0xc7c7c7c7 - so the
generator marks all twenty-four not constant, and a
varying measurement must never be asserted. It is right to: the
disagreement is between two probes, not two consoles. But the
consequence is that the twenty-four leave OPAQUE and the
result would vanish with them.
Recorded where a non-constant-but-informative result belongs: an
edge case on sceKernelLoadStartModule in
the knowledge base, with the poison, the paths and the code in its own
text.
Not as known_by = measured, and a guard said
so. Setting that tripped
a_question_is_never_recorded_against_something_already_measured:
"measured means hardware answered it. An entry claiming that and
listing an open question is contradicting itself, and the queue would
send a probe to re-ask something already settled." This entry has
plenty of open questions - the whole parked module thread - so one
measured fact about it does not make the entry measured.
known_by stays guest-observed, which is what
its siblings sceKernelGetModuleList,
GetModuleInfo and Dlsym carry for the same
shape: measured edge cases, open assumptions.
The distinction is worth keeping: known_by describes the
entry, an edge case describes one behaviour, and a measurement that
arrives as an edge case must not be promoted to the entry.
Six of D502's ten were confirmed by the mechanism rather than by my judgement
D502 moved ten measurements out of the work queue on the argument
that they were "a moment on one machine" or "a rate on one
machine". A second capture now disagrees with the first on exactly
six of them - the three clocks-advance absolutes and three
timer-ratio deltas - so the generator marks them
non-constant on its own. The argument was right and is no longer
needed.
And it corrects the one D502 hedged on.
timer-ratio:tsc_hz_calibrated:hz was kept outstanding as
"claimable in principle - it agrees with the reported frequency to
eight figures". Across the two captures it reads
0x3d554b40 and 0x5f2476c6: 1.03 GHz
against 1.60 GHz, a 55% swing.
nothing_claims_a_measurement_that_cannot_be_claimed refused
it by name, which is the guard doing what the hedge could not.
What a capture costs to absorb, which is the reusable part
cargo run -p orbistoun-gen -- measurements --records <dir>
regenerates the table from every capture in a directory and marks a
measurement constant only when every run that took it agreed. Adding one
capture then produces a precise work list from two gates: what is newly
measured and unaccounted for, and what is named in a list but no longer
constant. Both fired, both named the exact ids, and the work was
following them.
Worth stating because the alternative - reading a 11,002-line capture by eye - is how a finding like the third field stays open for another month.