feat: SPEC-049 content-author directives + SPEC-050 component islands #65
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "refs/pull/65/head"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implements SPEC-049 (content-author Markdown directives) and SPEC-050 (component islands & inter-island messaging) on top of the shipped SPEC-048 component core. Both are opt-in behind default-on cargo features (
content-components,component-islands) with byte-identical backward-compatible defaults.SPEC-049 — content directives (
src/web/components/):::name{…}/::name{}invoke theme components from untrusted Markdown. The template is trusted; the directive's props and body are not:urlingestion (REQ-4904);:name[…]form deferred (Q2).SPEC-050 — component islands (
src/web/islands/+src/web/assets/islands.js)Sandboxed Web-Worker islands paint via a controlled-element renderer (Remote DOM); a retained replay-on-subscribe
window.zetlbus; capability-scoped grants; typed payloads; persisted topics + pre-paint; lazy hydration; per-page default-deny CSP.Security model & verification
Trusted host is the sole reference monitor; untrusted Worker output passes the CON-5007 allowlist renderer (no script/iframe/
style/on*, scheme-validated URLs, egress-taint, bounds). Two fresh-context adversarial reviews (PROTO-001 Principle 12) + a Codex review were run; all findings fixed. Tests: lib 2,531; LangSec property/fuzz (sanitiser, URL recogniser, CON-4904 lint, grammars); islands.js node tests (recogniser + renderer); integration suites for both specs; clippy clean;--no-default-featurescompiles.⚠️ Caveats (read before relying on this in production)
Both specs are non-converged strawmen. Per their own text, the untrusted-content trust boundary needs a human security expert + executable fuzzing before production use — this branch makes that review possible (working PoC + tests) but does not replace it. The iframe escape-hatch transport is stubbed (Worker is the v1 default); the bridge grant logic is covered by build-side wiring tests + a manual browser playtest.
Plan:
specs/IMPL-049-050-plan.spl. Docs:docs/content-directives.md,docs/islands.md.🤖 Generated with Claude Code