fix(STDFIX): IRIS-portable rollback — completes the dual-engine pure-M library#8
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 nsemantics:trollback nrolls back to level ntrollback nrolls back n levelsSo
with()/invoke()'strollback target(YDB "to level target") becametrollback 0on IRIS →<SYNTAX>. Engine-split the rollback (normal path + the$ETRAPre-raise): IRIS usestrollback $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
TSTARTis forbidden only lexically insidetry{}/xecute, not when reached via ado-chain — sotry { do RUN^STDHARN } → … → do with^STDFIX → tstartis fine. m-iris#3 closed as invalid.trollbacksemantics.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