re: the trigger container's "push" is a clear — and the live test is blocked
Third independent line for yesterday's built-in 100 rename, from the callee this time. sub_8226E3B8 was labelled "push", which is what made built-in 100 look like push_trigger. It reads the element count, returns immediately when the container is EMPTY, and otherwise walks the node list splicing nodes out until it is empty. A push links one node; this unlinks all of them. It is clear(). The append is sub_8226E160, reached from built-ins 19 and 25. So the rename now rests on the handler, the usage (all 12 Stage 02 sites sit in the phase terminator next to timer_stop / clear_flag(-1) / MARK_LAST_PHASE), and the callee. The dynamic half did NOT run, and the write-up says so. phase_watch.py now samples [phase+272+20] (triggers queued) and [phase+216+8] (coroutines alive) so a phase terminator's effect on the VM is visible in one line — written here, never yet exercised against a live guest. Boot-nav could not reach the title in 381 s. Diagnosed rather than retried: skip_intro.sh only runs the title test on a static frame, gated at rmse <= 1500, and this run measured 1503 at 104 s and 1549 at 139 s — just above the cut — so is_title.py was never called and the one allowed press was never spent. Recorded in BACKLOG with the explicit instruction NOT to raise the constant: the first step is to log rmse and the glyph count through a whole boot and look at the two distributions, because tuning a threshold to make one run pass is fitting to a single sample. Also reaped a stale lock: a gdb orphaned 2h14m earlier was holding /tmp/xenia-canary.lock with an already-defunct emulator child. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -83,11 +83,23 @@ def main():
|
||||
print(' [%6.1fs] *** GUEST FROZEN -- readings below are about '
|
||||
'a dead world ***' % now, flush=True)
|
||||
r = S.read_states(f, m, sym2, WATCH)
|
||||
key = (r['phase_ordinal'], r['finished'], r['active_records'],
|
||||
# Two script-VM counters, so a phase boundary and what it does to the
|
||||
# VM are visible in the same sample:
|
||||
# [phase+272+20] triggers queued (the container's element count)
|
||||
# [phase+216+8] coroutines alive (the active-thread list's count)
|
||||
# Built-in 100 is `reset_phase_threads`: it clears the container and
|
||||
# frees every thread but the caller, so BOTH should collapse at a
|
||||
# phase terminator. If they climb straight through one instead, that
|
||||
# reading is wrong -- which is the point of printing them.
|
||||
ph = S.u32(f, m + 4)
|
||||
pending = S.u32(f, ph + 272 + 20) if ph else None
|
||||
threads = S.u32(f, ph + 216 + 8) if ph else None
|
||||
key = (r['phase_ordinal'], r['finished'], r['active_records'], pending, threads,
|
||||
tuple((n, (v or {}).get('state')) for n, v in r['units'].items()))
|
||||
if key != last:
|
||||
print(' [%6.1fs] phase=%s finished=%s active=%3d %s' % (
|
||||
print(' [%6.1fs] phase=%s finished=%s active=%3d pending=%s threads=%s %s' % (
|
||||
now, r['phase_ordinal'], r['finished'], r['active_records'],
|
||||
pending, threads,
|
||||
' '.join('%s:%s' % (n, (v or {}).get('state'))
|
||||
for n, v in r['units'].items())), flush=True)
|
||||
last = key
|
||||
|
||||
Reference in New Issue
Block a user