From fa20db3db86c8a6f66b564de2126b22c6acf3424 Mon Sep 17 00:00:00 2001 From: Sylpheed RE agent Date: Wed, 26 Aug 2026 00:50:24 +0000 Subject: [PATCH] re: four ISL built-ins are tutorial-only, and 96 encodes the tutorial index 96, 97, 98 and 104 were unnamed. Measured over all 28 stages they form a family that appears nowhere outside the six tutorials: 96 8 sites S18-S23 only 97 38 sites S18-S23 only, followed by start_coroutine 27/38 98 0 sites never called anywhere 104 39 sites S18-S23 only, followed by wait_s 39/39, preceded by end_coroutine 37/39 104's adjacency is a textbook poll loop with no exceptions: coroutine starts, tests the predicate, waits, repeats. 96's operand is the giveaway. Its eight payloads in stage order are S18 -> 101, 102, 103; S19 -> 201; S20 -> 301; S21 -> 401; S22 -> 501; S23 -> 601, i.e. (stage - 17) * 100 + section. Tutorial 1 has three sections and the other five have one each, and the tutorial index is encoded in the argument. Names are deliberately NOT applied. tutorial_begin / tutorial_end / tutorial_message_pending fit the shape, and [phase+340]/[phase+344] are said to carry the state and payload, but I have not read that handler myself and this file has already had to withdraw five names guessed from shape. The distribution and the argument encoding are established and are what a port needs; the labels can wait for someone to read the code. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE --- docs/re/structures/isl-builtins.md | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docs/re/structures/isl-builtins.md b/docs/re/structures/isl-builtins.md index cbede089..9ec11900 100644 --- a/docs/re/structures/isl-builtins.md +++ b/docs/re/structures/isl-builtins.md @@ -140,6 +140,39 @@ and spread checks but its maximum *exceeds* the table — flag indices run 0..31 against symbol tables as small as 40 — so it is excluded, and the disassembler now declines to resolve it rather than printing an invented name. +### ✅ Four built-ins are TUTORIAL-ONLY — 85 sites, every one in S18–S23 + +`96`, `97`, `98` and `104` were unnamed. Measured over all 28 stages, they form a +family that appears **nowhere outside the six tutorials**: + +| id | sites | stages | shape | +|---|---|---|---| +| **96** | 8 | S18–S23 only | one call per tutorial *section* | +| **97** | 38 | S18–S23 only | followed by `start_coroutine` (27/38) | +| **98** | **0** | — | never called anywhere | +| **104** | 39 | S18–S23 only | **followed by `wait_s` 39/39**, preceded by `end_coroutine` 37/39 | + +`104`'s adjacency is a textbook poll loop: a coroutine starts, tests the +predicate, waits, and goes round again — 39 sites, no exceptions. + +`96`'s operand is the giveaway. Its eight payloads are, in stage order: + +``` +Stage18 → 101, 102, 103 Stage19 → 201 Stage20 → 301 +Stage21 → 401 Stage22 → 501 Stage23 → 601 +``` + +That is `(stage − 17) * 100 + section`: tutorial 1 has three sections, the other +five have one each. The tutorial index is encoded in the argument. + +🟡 **Names are NOT applied.** `tutorial_begin` / `tutorial_end` / +`tutorial_message_pending` fit the shape, and `sub_82260710` reportedly suspends +while `[phase+340] == 2` with the payload latched at `[phase+344]` — but I have +not read that myself, and this file has already had to withdraw five names +guessed from shape. What is established here is the **distribution and the +argument encoding**, which is what a port actually needs; the labels can wait for +someone to read the handler. + ### ✅ Five built-ins are the mission banners — named from usage, not from a guess `77`, `78`, `81`, `82` and `135` were unnamed. The engine has five contiguous