MediaValue gains an Attribution credit resolved through the existing
MediaResolver context hook. The BlockNote image case renders width and
align presets, alt text, an optional link wrap, and the attribution chip
in chip, chipHover, and below modes with the same themed markup as the
cms page-builder image block. Legacy url-and-caption blocks render
byte-identical to the previous output.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bootstrap the plugin-facing SDK module so the fleet migration (P2) becomes a
mechanical block/core/X -> block/pluginsdk/X import rewrite.
- abi/proto/v1: the single source-of-truth ABI proto tree, copied from the cms
authoring source (cms/backend/abi/proto/v1) with go_package retargeted to
git.dev.alexdunmow.com/block/pluginsdk/abi/v1;abiv1. Kills the hand-kept
cms/core proto duplication (audit gap 4).
- abi/v1: generated Go bindings (buf generate); byte-identical to core's abi/v1
save the embedded go_package path.
- plugin/ (registration + DI surface), plugin/wasmguest/** (transport shim,
caps stubs, bnwasm db driver, testdata fixtures + golden .pb), and the
guest-facing type packages: blocks (+builtin/shared/tags), templates
(+pongo/bn), auth, settings, content, gating, crypto, rbac, video, ai,
subscriptions, menus, datasources. Internal imports rewritten core ->
pluginsdk; zero block/core references remain.
- README/AGENTS(+CLAUDE symlink)/Makefile: proto is the contract, Go is one
binding; no replace directives; templates/bn is a synced copy authored in cms.
Spec: cms docs/superpowers/specs/2026-07-07-proto-first-plugin-sdk-design.md
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>