Rawmark as a markup layer for SureCart, plus Post Template for any post type.
Post Template now works for custom post types. It was hardcoded to the
built-in post. A new site-wide whitelist (Rawmark → Settings) picks which
types render through the designated Snippet — defaulting to post, plus
sc_product automatically when SureCart is active. One template, every
product, no per-product page and no hardcoded IDs.
Server-rendered live preview. The preview pane used to be built entirely
client-side, so shortcodes and blocks showed as literal text while editing. It
now renders through the same pipeline the live page uses. A Snippet also gets a
"Preview as" picker, since it has no post of its own to render against.
Render blocks checkbox. enable_blocks existed and was honored by the
render path, but no REST route accepted it — it could only be set from PHP.
There's now a checkbox in the editor topbar (Pages and Snippets both).
Correction to the SureCart guidance in v0.3.0. The docs recommended building
a product page from standalone id-less shortcodes. That advice was wrong and
failed quietly: SureCart's product child blocks declare surecart/product-page
as an ancestor, and that parent is what supplies product context, interactivity
state, and the script module. Only [sc_product_title] and
[sc_product_description] work standalone — price, media, quantity and
cart_button render empty with dead controls. The working pattern is to wrap
your own markup in a real surecart/product-page block, which passes arbitrary
HTML straight through. Full recipe in the bundled SKILL.md.
Known limitation: the preview iframe is sandboxed without allow-same-origin by
design, so block JavaScript can't run in it. Judge layout in the preview; judge
interactions (add to cart, variant pills) on the live URL.
238 PHP tests and 4 JS tests green.