Skip to content

Adopt wick v0.1.0 and chart 0.15.0#9

Merged
ooyeku merged 2 commits into
mainfrom
wick-0.1.0
Jul 26, 2026
Merged

Adopt wick v0.1.0 and chart 0.15.0#9
ooyeku merged 2 commits into
mainfrom
wick-0.1.0

Conversation

@ooyeku

@ooyeku ooyeku commented Jul 26, 2026

Copy link
Copy Markdown
Owner

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_command with the wrong shape got called anyway and ran with garbage locals — silently.

Entry points now resolve through wick.guest.func against declared Zig function types (ActivateFn, CommandFn, EventFn, ScratchFn), so a mismatch fails with error.SignatureMismatch before any guest code runs. A new test covers it: a hand-assembled module whose activate matches the ABI but whose handle_command doesn't still loads and activates, then reports the mismatch instead of miscalling it.

Backward compatible: activate is still accepted in both the void and status-code shapes.

Also adopted: Instance.writeBytes for 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

  • 724/724 tests, zig fmt clean
  • All four bundled plugins load, activate, and dispatch through the new typed path — verified in the running editor via pty, with zero traps in the session log
  • Macro record + replay driven end-to-end in the real editor: 2@a comments three lines, and a single Space u reverts the entire replay as one undo group

Version bumped to 0.15.0-dev.

ooyeku added 2 commits July 25, 2026 14:37
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.
@ooyeku
ooyeku merged commit bcee682 into main Jul 26, 2026
11 checks passed
@ooyeku
ooyeku deleted the wick-0.1.0 branch July 26, 2026 22:21
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