Add SP0 foundations + editor spike
Stand up the SkyPress skeleton and prove the riskiest path end-to-end:
IsolatedBlockEditor -> onSaveBlocks -> block tree -> rendered back to HTML.
Stack: Astro 6 + React 18 islands. React 18 is mandatory — the bundled
@wordpress/* packages require react@^18.3 (Decision 0001). The editor is a
client-only island confined to /editor; reading pages render to light HTML and
ship zero JS.
Key spike findings (Decision 0003):
- The @wordpress editor stack can't render server-side (browser-only
window/moment/registry deps). Reading pages therefore use a dependency-free
renderer (src/lib/blocks/render.ts) whose fidelity is locked to the real
@wordpress/blocks.serialize() by tests.
- The whole @wordpress tree must be version-pinned via overrides to the line
isolated-block-editor bundles, or duplicate data/core-data registries crash
the editor. Pinned accordingly.
Verified: 6 Vitest tests (round-trip + render fidelity + textContent),
astro check clean, production build (3 pages), and a browser smoke test —
editor boots, typing captures the block tree to localStorage, /preview renders
server-side with 0 JS.
Curated block allowlist documented as the content model (Decision 0002).
Includes GPL-2.0 license, README, AGENTS.md working agreement, and the SP0 spec.