Adopt wick v0.1.0 and chart 0.15.0#9
Merged
Merged
Conversation
Re-pin from a loose commit to the v0.1.0 tag. The release brings a pre-decoded IR and threaded dispatch — plugin bodies are translated once at load and executed over preallocated stacks — plus a typed host/guest API that the loader now uses. Entry points are resolved through wick.guest.func against Zig function types declaring the plugin ABI, so an export with the wrong shape fails with SignatureMismatch before any guest code runs, instead of being invoked with the host's assumed arity and reading garbage locals. activate keeps accepting both the void and status-code forms. Scratch-region writes go through Instance.writeBytes rather than a hand-rolled slice + memcpy; the explicit size check stays, since writeBytes bounds-checks against linear memory and not the plugin's own buffer. Also factors the 21-line callback literal the loader tests repeated into a helper, and bumps to 0.15.0-dev.
0.14.0 was themed repeatable operations and provable behavior, and shipped the repeatable half. Rather than roll the rest forward silently, record what slipped: deterministic simulation testing, the fuzz corpus expansion, the Unicode pass, and the terminal matrix. 0.15.0 takes its theme from what the release cleanup turned up — nine modules whose test suites had never run, and the drifted doubles and backwards assertions hiding behind them. A test suite that misreports coverage is the same instrument failure as a counter that cannot report a drop, which stem tells as a success story in its own architecture notes. Also correct the 0.13.0 section, which still listed OSC-52 and named registers as if they had shipped.
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.
Re-pins the plugin host to wick v0.1.0 and adopts the typed API it introduced. Opens 0.15.0 development.
Why this is more than a version bump
stem was pinned to a loose commit from before wick's five development phases. v0.1.0 brings a pre-decoded IR — each function body is translated once at load, immediates unpacked and branch targets resolved to direct indices, then executed by a threaded-dispatch loop over preallocated stacks, with nothing inside the interpreter loop allocating.
It also brings a typed host/guest API, which the loader now uses.
Entry points are signature-checked
Previously the loader looked an export up by name and invoked it with the arity the host assumed. A plugin exporting
handle_commandwith the wrong shape got called anyway and ran with garbage locals — silently.Entry points now resolve through
wick.guest.funcagainst declared Zig function types (ActivateFn,CommandFn,EventFn,ScratchFn), so a mismatch fails witherror.SignatureMismatchbefore any guest code runs. A new test covers it: a hand-assembled module whoseactivatematches the ABI but whosehandle_commanddoesn't still loads and activates, then reports the mismatch instead of miscalling it.Backward compatible:
activateis still accepted in both thevoidand status-code shapes.Also adopted:
Instance.writeBytesfor the scratch region, replacing manual slice +@memcpy.0.15.0 roadmap
Themed verification you can trust — stem's honesty about stem, not the runtime's honesty about itself.
The motivating discovery came from 0.14.0's release cleanup: nine modules' test suites had never run,
split_manager(window splits) among them, because Zig only runs tests from files reachable from a test root. Wiring them back in surfaced test doubles that had drifted from the interfaces they stand in for, assertions that asserted the opposite of real behavior, and a leak helper that could only pass for code that allocated nothing.That's the same instrument failure as the dishonest drop counter stem tells as a success story in its own architecture notes. The release applies the lesson inward: a test-wiring build guard, the deterministic simulation testing that slipped from 0.14.0, chaos CI as a merge gate, and named registers (#3) — which also make 0.14.0's macros durable.
The roadmap now also records what didn't ship in 0.13.0 and 0.14.0 rather than rolling it forward silently.
Verification
zig fmtclean2@acomments three lines, and a singleSpace ureverts the entire replay as one undo groupVersion bumped to
0.15.0-dev.