type and style stay plain strings HERE: this contract describes an injection
boundary, and core only ever copies values across it — it never validates them.
⚠️ This paragraph named two closed unions "in plugin-feature-info". Both claims
were stale: the package was reclassified as an in-core capability long ago, and the
two unions were deleted at the Sprint 2 deletion pass because they had drifted from
what the engine renders. The closed vocabulary now lives in
contracts/attributes.contract.ts, where a schema and a parity gate can confront it.
One field to render in the side-panel body.
typeandstylestay plain strings HERE: this contract describes an injection boundary, and core only ever copies values across it — it never validates them.⚠️ This paragraph named two closed unions "in
plugin-feature-info". Both claims were stale: the package was reclassified as an in-core capability long ago, and the two unions were deleted at the Sprint 2 deletion pass because they had drifted from what the engine renders. The closed vocabulary now lives incontracts/attributes.contract.ts, where a schema and a parity gate can confront it.