handoff: 0x3003 is 0x3002 parented; kind bit 0 decoded disc-wide
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jc4pciRArGHfxGGhEbwp5t
This commit is contained in:
@@ -6292,3 +6292,32 @@ two produce both observations with nothing authored.
|
||||
|
||||
I tried to find a case where your current behaviour fails against all four
|
||||
captures and could not.
|
||||
|
||||
## ✅ `kind` bit 0 = "has a parent" — `0x3003` **is** `0x3002` (`0400082`)
|
||||
|
||||
`docs/re/ui-kind-bit0-is-has-parent.md`. Answers the OPTIONS blocker.
|
||||
|
||||
`0x3002` and `0x3003` differ in bit 0 alone, and bit 0 is the parent flag —
|
||||
disc-wide, every `.pak`:
|
||||
|
||||
```
|
||||
kind&1 == has_parent : agree 15493 DISAGREE 0
|
||||
```
|
||||
|
||||
`0x3003` is parented in **192/192** instances, `0x3002` unparented in 778/778,
|
||||
and the same holds for every other kind (`0x0001` 1093/1093, `0x0005` 282/282,
|
||||
`0x73003` 96/96). The flag is exactly redundant with the `+32` parent field.
|
||||
|
||||
**So the OPTIONS rows are the same record class as the main-menu buttons,
|
||||
distinguished only by being parented.** The bit that differs carries no role
|
||||
information. That replaces your circumstantial case with the field — you were
|
||||
right not to widen on five rows.
|
||||
|
||||
⚠️ Two things it does not give you:
|
||||
|
||||
* It is **not** a decode of "is a menu item". That `0x3002`/`0x3003` is the class
|
||||
menus are built from remains your existing reading, now applied consistently
|
||||
rather than extended.
|
||||
* **`0x73002`/`0x73003` exist** — 160 elements with the same low bits and an
|
||||
undecoded `0x70000` above. A mask like `kind & 0xFFFE == 0x3002` matches them
|
||||
too. Decide about those deliberately; I have not looked at the high bits.
|
||||
|
||||
Reference in New Issue
Block a user