469. The binding reached the relocation

2026-09-09 - directed, continuing 468

crates/orbistoun-loader/ is still denied to this session - the rule matches the path and the text, so even a grep naming orbistoun_loader::relocate is refused. The work finished anyway, by arranging things so the unreadable part did not need reading.

Two faults, one behind the other

D640 fixed the first: bind_to_title_modules read the executable alone, so a module importing from a sibling module was never a candidate. That made the binding correct and changed nothing, because it was never applied.

The order. It was computed after the module relocation loop. A relocation that has run cannot be told which slot should have pointed into a placed module. Moved above the loop, from the same placed, modules and slots already in scope there.

The composition. Modules relocated through the offsetting resolver and never through the binding one. Wrapping raises a question - which sees the shifted index? - that the denied file answers.

Sidestepped, not guessed

One map per module, keyed by that module's own symbol index, with the binding outside the offsetting. The binding resolver then never sees a shifted index, and the offsetting one shifts only what falls through to the shared stub table. Neither needs to know what the other does with the number, so the ordering question does not arise (D644).

What made the shape safe to assume without reading it: the executable's path has worked this way since it was written - a map keyed by symbol index, which for module zero is also the slot.

What it moved

PPSA25872-app0   before:  141 imports  20000000 calls    2% standing
PPSA25872-app0   after:   141 imports    310987 calls  100% standing

19,689,013 calls gone. They were the guest asking one function the same question until its budget ran out - 87.6% of every call this project had ever recorded. It calls that function inside the module the title ships now, so orbistoun never sees it. Eight calls land on stubs out of three hundred and ten thousand.

PPSA02664 gained an import (199) and PPSA03416 gained one (198, with its fault moved to the same image+0x39f7c the other two stop at). Nothing lost one.

Surprises

Next