Build: make && ./tests/selftest Env: MNRT_SDE / MNRT_ASM / MNRT_EMU override tool paths. v1: synchronous enqueue; .vsm text input; bindings recorded but not relocated. Encoder/program tools (pure python3, no vendor toolchain): python3 encoder/block_encoder.py E0 selftest python3 encoder/regress_blocks.py vendor dump -> 128 B blocks python3 encoder/regress_roundtrip.py vendor dump -> Program, byte-identical python3 encoder/vsm2prog.py --report FILE.vsm .vsm -> Program coverage report python3 encoder/vsm2prog.py -o k.bin FILE.vsm .vsm -> mncore::Program (fail-closed)
MNRT_RENDER=1 makes mnrt_enqueue() render .asm with encoder/vsm2asm.py
and the learned shape table (encoder/asm_slots.json) instead of calling
assemble3; MNRT_ROOT names the checkout. Verified end to end:
MNRT_RENDER=1 MNRT_ROOT=$HOME/libmnrt MNRT_ASM=/bin/false ./t_g3b
load 0
enqueue 0
i.e. a program whose instructions were encoded by this repo executes on the emulator with the vendor assembler provably absent. Any instruction shape the table has not learned fails closed.