Manifest hotfix. Two plugin.json button labels had been lossily re-encoded to a literal ? — the earlier BMP-icon fix patched plugin.py (the runtime source of truth) but plugin.json drifted. The running plugin was unaffected (it uses the class labels); only the manifest shown in the plugin browser/registry was wrong.
Fixed
- plugin.json button labels —
Apply Per-Channel LogosandShow Statusshowed a literal?instead of the ❖ / ⓘ icons. Now matchplugin.pyexactly (U+2756 / U+24D8, as JSON unicode escapes).
Tooling
- Contract-test parity guard —
test_plugin_contract.pynow asserts exactbutton_labelparity betweenplugin.jsonandPlugin.actions, and rejects a literal?placeholder. The pre-existing BMP-only check missed this because?is itself BMP.