Skip to content

fix(STDFIX): IRIS-portable rollback — completes the dual-engine pure-M library#8

Merged
rafael5 merged 2 commits into
masterfrom
fix-stdfix-iris-trollback
Jun 14, 2026
Merged

fix(STDFIX): IRIS-portable rollback — completes the dual-engine pure-M library#8
rafael5 merged 2 commits into
masterfrom
fix-stdfix-iris-trollback

Conversation

@rafael5

@rafael5 rafael5 commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

The last of the 4 non-base modules. STDFIX needed a small, real IRIS fix — not the m-iris runner change earlier (wrongly) suspected.

Root cause

YDB and IRIS have opposite TROLLBACK n semantics:

  • YDB: trollback n rolls back to level n
  • IRIS: trollback n rolls back n levels

So with()/invoke()'s trollback target (YDB "to level target") became trollback 0 on IRIS → <SYNTAX>. Engine-split the rollback (normal path + the $ETRAP re-raise): IRIS uses trollback $tlevel-target. Full partial-rollback fidelity holds on both engines — the nested inner-only-rollback tests pass unchanged (no YDB-only compromise).

Corrections to the prior (wrong) diagnoses

  • The m-iris runner needs no change: TSTART is forbidden only lexically inside try{}/xecute, not when reached via a do-chain — so try { do RUN^STDHARN } → … → do with^STDFIX → tstart is fine. m-iris#3 closed as invalid.
  • Journaling was never the blocker; the only real bug was the trollback semantics.

Caveat (documented)

STDFIX needs a journaled IRIS namespace (IRIS requires journaling for TSTART). Verified on m-test-iris (USER, journaled). foia's VISTA data db is unjournaled, so STDFIX's transactions are <UNIMPLEMENTED> there until journaling is enabled on that db — a deployment-config detail, not a code issue.

Result

All 4 non-base modules are now dual-engine green. STDFIXTST 28/28 on YDB (m-test-engine) AND IRIS (m-test-iris via the runner, nesting included). YDB byte-identical. Gates clean.

🤖 Generated with Claude Code

rafael5 and others added 2 commits June 13, 2026 20:04
…om YDB

STDFIX is the last of the 4 non-base modules. It needed a small, real IRIS fix —
NOT the m-iris runner change I'd wrongly suspected. Root cause: YDB and IRIS have
OPPOSITE `TROLLBACK n` semantics:
  - YDB:  `trollback n` rolls back TO level n
  - IRIS: `trollback n` rolls back n LEVELS
So with()/invoke()'s `trollback target` (YDB 'to level target') became
`trollback 0` on IRIS → <SYNTAX>. Engine-split the rollback (normal path AND the
$ETRAP re-raise): IRIS uses `trollback $tlevel-target` (that many levels back ==
undo to target). The YDB $ETRAP re-raise pattern works as-is on IRIS via the
normal do-chain (TSTART is only forbidden *lexically* inside try{}/xecute, not when
reached through a DO — so the m-iris runner's `try { do @ref }` is fine).

Full fidelity on both engines — IRIS supports partial rollback, so the nested-scope
inner-only-rollback tests pass unchanged (no YDB-only compromise).

Verified: STDFIXTST 28/28 on YDB (m-test-engine) AND IRIS (m-test-iris via the
runner, exit=0), nesting tests included. YDB byte-identical.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Document the engine-split rollback + the IRIS journaling requirement in the STDFIX
header. Correct discoveries.md: all 4 non-base modules are now dual-engine green
(STDFIX fixed via the trollback-semantics split); the 'runner-blocked / no
transactions / enable journaling' diagnoses were ALL wrong — the m-iris runner
needs no change (TSTART is forbidden only lexically in try{}/xecute, not via a
do-chain). m-iris#3 closed as invalid.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rafael5 rafael5 merged commit d456c20 into master Jun 14, 2026
2 checks passed
@rafael5 rafael5 deleted the fix-stdfix-iris-trollback branch June 14, 2026 00:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant