The previous "Tier 3: add a renderer needs a core PR" framing wasn't
honest open-source extensibility — it was just a permissive license.
This commit reframes Tier 3 as a renderer plugin model:
- Anyone can ship `@aoagents/ao-plugin-canvas-{name}` packages.
- Plugin declares own canvasType id, payload schema (Zod), and
React renderer.
- AO's build-time plugin registry walks installed packages, generates
a TypeScript file extending the CanvasArtifact discriminated union,
and the web build bundles the renderers.
- Trust boundary is `npm install` — same as every other AO plugin.
- No core PR. No runtime code injection. Build-time only.
Adds a new Tier 4: promote a popular renderer plugin into core's
built-in set when the ecosystem has converged on it. The bar is
"this is now standard infrastructure", not "this is a new idea".
Updates the contract from "constrained UI in core" to three rules:
1. Anyone supplies any data, in any supported type.
2. Anyone ships a new type via plugin (npm trust).
3. Nobody dynamically loads JS at runtime.
The non-goal list now distinguishes "dynamically-loaded React"
(rejected) from "build-time-bundled renderer plugins" (the v0.4
unlock). Mirrors the change across docs/canvases.md (source of
truth), docs/canvases-launch.{md,html} (showcase), and
docs/canvases-feature.html (full writeup).
No code change in v0.1. The plugin slot lands in v0.4 with its own
design pass — this commit just documents the direction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>