Repository navigation
sdk: tape-replay-plugins - #880
Conversation
A plugin loaded from the store imports `tape` and `replay` as a bundled one does (plugin.create's modules, the instances core was built with). The shape fingerprint now folds `tape.binary.version` and hashes the tape data types and replay's Stage, so a change to a tape's format moves it; recorded. tests/fixtures/tape-plugin writes, encodes, loads and plays a tape: tested linked into the app (test-integration) and as a dylib (its own build, run by scripts/check-examples.sh). Agent-Team: linux Worker: claude Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
PM note: how this PR will be handledWhat it is for: sdk: tape-replay-plugins Rules that apply: touches the SDK or plugin ABI: the shape fingerprint must be recorded; touches build scripts; changes agent rules or guides. Things to watch (checked by rule):
What happens next:
A living status comment below is kept current. Nothing here is a merge decision. |
Where this PR standsStage: Waiting for the maintainer What the PM needs before approving (ticks as it is met; the full CI runs only at the end, after the reviews are clean):
Rules that apply: touches the SDK or plugin ABI: the shape fingerprint must be recorded; touches build scripts; changes agent rules or guides. Reviews at the current commit (
7 earlier reviews are for older commits and will be redone. Latest fixes comment: https://github.com/fizzyedit/work/issues/409#issuecomment-6447425703 (0 findings answered) Updated 2026-10-27 18:24 UTC by the PM. This comment is edited in place. |
Hash Tape.Check, the Sequencer sink types and replay.Player in the boundary fingerprint, build the bundled fixture through its own staticModule and rehome, and scope Script's errdefer so a failure after finish cannot free the arena twice. Agent-Team: linux Worker: claude Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge origin/main (conflict in scripts/check-examples.sh: kept main's builds-optional structure and the tape-plugin dylib step). The tape_fixture path dependency is now lazy and used only in fizzy's own build, since tests/ is not in the root .paths and an app fetching fizzy lacks it. Re-recorded the SDK shape fingerprint for the merged boundary. Agent-Team: linux Worker: claude
Agent-Team: linux Worker: claude Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Part of fizzyedit/work#423
Rework: work#490
Goal
Store (dylib) plugins can import
tapeandreplay, proven by a fixture plugin built bundled and as a dylib.What changed and why
Round-2 fixes: the
tape_fixturedependency is lazy and its use is guarded bycfg.app_is_fizzy(lazyDependency+lazyImport), so an app fetching fizzy as a tarball, which lackstests/, still resolves. Merged origin/main (one conflict inscripts/check-examples.sh) and re-recorded the fingerprint.How it was verified
check-fmt ok; build 84/84; test 183/183; test-integration 97/97 (includes fizzy-tape-plugin-bundled-tests); check-web 44/44; test-sdk-version 35/35.
scripts/check-examples.shpasses with the tape-plugin dylib fixture, app-only, the build-API fixture app (fizzy fetched as a tarball) and the example-plugin and minimal example-app builds.Not done / follow-ups
Other example-app shapes (studio, endless, replay, dvui) were not built here.
Changes (13 files, +238/-1)
Gates: 6 of 6 passed
scripts/check-fmt.sh(exit 0)scripts/zb build --summary all(exit 0)scripts/zb build test --summary all(exit 0)scripts/zb build test-integration --summary all(exit 0)scripts/zb build check-web --summary all(exit 0)scripts/zb build test-sdk-version --summary all(exit 0)