Smoke test required

...

← All documentation

Documentation

Vision Revision (Apr 30)

Terminology lock + tier limits + sprite-walk pulled into v1.0.

source: docs/decisions/VISION_REVISION_2026-04-30.md

RENAMED 2026-05-03: Brand pivoted from “Ensemble” to “Endenza”. Vocabulary (Maestro/Virtuoso/Agent/Studio/Canvas/Showcase) unchanged. References to “Ensemble” in this historical doc preserve the decision context as-recorded; treat the brand name as Endenza in any current work.

Status: locked 2026-04-30 evening (Kevin’s call). Supersedes: the v1.0 scope in PATH_TO_LAUNCH.md §2.2 and the v1.5 walkable-world deferral in V1_5_WALKABLE_WORLD.md. Earlier docs stay as historical record but the v1.0 vs v1.5 line shifts per this doc.


1. Terminology lock

These four terms are the binding vocabulary going forward. Every piece of user-facing copy, every doc, every internal variable name where copy bleeds in, gets aligned to this table.

Term Definition Cardinality
Ensemble The overworld map. The PLACE itself. The world a visitor lands in. One
Studio The editor app where creators author canvases. Every creator has exactly one. 1 per creator
Canvas A creator’s place inside their Studio. Anything they can imagine within the sprite-game world. Can wrap games, websites, embeds — visual elements placed via toolbar or Claude. 2 (free) / 10 (pro) per creator
Showcase The ONE canvas a creator chooses to publish to Ensemble. Visitors see it from the overworld and walk into it. 1 per creator

Anti-glossary (terms NOT to use anymore)

  • “Room” → use Canvas
  • “Workshop” (when meaning the creator’s surface) → use Studio
  • “Showcase” (when meaning the public-grid of all creators’ work) → use Ensemble for that grid; “Showcase” is reserved for the per-creator public canvas

2. Tier limits — canvas count

Tier Showcase (public) Extra canvases (drafts/private) Total
Free 1 1 2
Pro 1 9 10
Team (post-launch) 1 per member unlimited unlimited

Enforcement points

  • POST /canvas (create) — tier check + count check; reject with HTTP 402 (Payment Required) + upgrade-prompt if at limit.
  • Studio UI — disable “New canvas” button when at limit; show “Upgrade for more” inline.
  • Showcase setter — exactly one canvas per creator can hold the showcase flag at any time. Setting a new one auto-clears the prior.

3. v1.0 scope expansion — sprite-walk pulled in

Old v1.0 (per PATH_TO_LAUNCH.md): visitor lands on creator’s canvas, clicks components from outside, components launch/link/embed/read.

NEW v1.0: visitor steers a SPRITE through the canvas. Walks up to components. Presses X (or clicks) to interact. Click-to-launch / link / embed / read all still work — sprite just gets there first.

What changes about the shipping v1.0 product

Capability Old plan New plan
Character creator v1.5 v1.0 ← pulled in
Sprite-walk engine v1.5 v1.0 ← pulled in
Component collision (walkable_through / solid / interactable flags) v1.5 v1.0 ← pulled in
Camera follows sprite v1.5 v1.0 ← pulled in
“Press X to interact” prompts v1.5 v1.0 ← pulled in
Multi-canvas overworld (walk between Studios) v1.5 v1.5 (unchanged)
Multiplayer presence (live ghost-cursors) v1.5 v1.5 (unchanged)
Notes pinned to other creators’ work v1.5 v1.5 (unchanged)

Why this works

The substrate we shipped earlier today already supports half of this:

  • Canvas v2 schema (canvas_schema.py) — components have x/y/w/h, ready for collision detection
  • Rooftop editor MVP (rooftop_editor.py + runtime) — proves the sprite-grid + click-to-place pipeline at small scale; we extend that to canvas-scale
  • All 4 click-to-* interactions (launch / link / embed / read) — sprite walks up, then those work unchanged
  • Sound layer scaffold — ambient track + footstep SFX hooks ready
  • Theme + bg system — each canvas already styles itself per theme

What we’re ADDING is the sprite, the walk physics, the collision flags, the camera, and the interaction-prompt overlay. ~3-4 dedicated warp rounds.


4. The 10/10 plan — every category, no exceptions

Per ~/.claude/CLAUDE.md: “Apple-quality. Would I be proud to ship this to a harsh critic?” Tonight’s re-rate landed visual at 7.58/10 and codebase at 7.25/10. Sprint 7 ship-contract is “≥7.5 visual / ≥7.0 code” — we cleared that, but we’re not at 10/10.

The road to 10/10 has two distinct phases:

Phase 1 — Polish to 8.5+ on existing surfaces (Rounds 4-5)

This is partial-adoption debt cleanup. Substrate exists but isn’t fully used. Mechanical sweeps + small refactors. Round 4 is in flight; Round 5 finishes it.

Category 04-30 baseline Phase 1 target How
Grid + alignment 6 8 Container max-width consolidation (Round 4 slot A)
Typographic system 6 8 Inline-style elimination (Round 4 slot A)
Proportional structure 7 8 Token sweep finish (Round 4 slot A)
Vertical rhythm 6 8 Same — tokens consume the magic-px
Visual hierarchy 8 9 .settings-h3 rule + heading scale audit
Color discipline 8 9 One straggler #10b981var(--success) (Round 4 slot A)
Component consistency 7 9 studio-publish-modal migration + drop legacy aliases (Round 4 slot A)
Whitespace 8 8.5 Per-section breathing-room audit
No overlapping elements 8 9 Already mostly clean post-tonight’s fixes
Detail polish 8 9 Footer rebuild (already done tonight) + studio fixes
Mobile / responsive 8 9 Verify breakpoints across all new surfaces
Brand + first-impression 9 9.5 Hero logo addition (already done tonight)

Codebase Phase 1 targets (Round 4 slot B + C):

Category 04-30 Target How
Error handling 6 8 19 bare-excepts narrowed (Round 4 slot B)
Performance 6 8 Bundle minification fix (Round 4 slot B)
Type hints 7 9 Handler methods annotated (Round 4 slot B)
Module shape 8 9 Drop 3 tombstones (Round 4 slot C)
Maintainability 7 8 One studio.html JS extraction (Round 4 slot C)

Phase 1 expected aggregate: visual ~8.5, code ~8.0. Sprint 7 ship-contract clear by a comfortable margin.

Phase 2 — Build the new vision (Rounds 6-7)

Tier gates + terminology sweep + sprite engine + character creator. This isn’t polish; it’s NEW product. Each round adds capability.

Round 5 — Vision foundations (right after Round 4 merges) - Slot A: Update grand-plan docs (PRODUCT_SPEC.md, MANIFESTO.md, PATH_TO_LAUNCH.md, V1_5_WALKABLE_WORLD.md) with new terminology + scope shift - Slot B: Tier-gated canvas creation (POST /canvas with tier check) + showcase distinction (per-user showcase_canvas_id field) - Slot C: Terminology copy sweep across pages (replace “Workshop” / “Room” misuse, lock Ensemble/Studio/Canvas/Showcase naming)

Round 6 — Sprite primitive + walk engine - Slot A: Character creator UI + storage (sprite customization on first-run; per-user sprite descriptor) - Slot B: Sprite-walk engine — vanilla canvas2D, 8-direction, collision against components, camera follow - Slot C: Component interaction-radius prompt + walkable_through/solid/interactable flags + per-component metadata in canvas_schema

Round 7 — Stitch + integrate - Slot A: First-run flow — sprite creation → studio entry → walkable canvas - Slot B: Click-to-launch / link / embed / read all work via sprite proximity - Slot C: Re-rate (visual + codebase) — checkpoint on Phase 2 end-state

Phase 2 expected aggregate: visual ~9.0, code ~8.5. The sprite addition is itself a major brand + first-impression lift.

Phase 3 — Optical polish to 10/10 (Rounds 8-9)

This is where the rating doc says “the work shifts from substrate to optical.” Hand-tuned details that no token can capture. Each is small individually; the SUM is what makes the difference between 9.0 and 10/10.

Round 8 — Optical pass - Slot A: Hand-tuned aspect-ratios on every card type. Optical alignment of brand mark to baseline. Hand-set kerning on EB Garamond hero. Stagger + ease curves on grids. - Slot B: Every state designed (empty / loading / error / first-time / disabled). No defaults; everything purposeful. Microcopy review (every error message, every help text, every placeholder). - Slot C: Animation choreography — sprite walk-cycle frames hand-tuned. Door-open ease. Camera follow smoothness. Reduced-motion fallbacks for everything.

Round 9 — Final pre-freeze - Slot A: Cross-browser smoke (Safari / Chrome / Firefox / iOS / Android). Fix anything that drifts from spec. - Slot B: Performance pass — bundle audit, asset optimization, TTI / LCP / CLS measurement against 60fps target. - Slot C: Final re-rate — confirm 10/10 across every category. Tag v1.0-rc1.

Phase 3 expected aggregate: visual 10/10, code 9.5+/10 (10/10 is asymptotic for code; some categories like i18n only hit 10 with a real translation effort which is post-launch).

Phase 4 — Sprint 7 launch (your manual external actions)

Per docs/operations/SPRINT_7_LAUNCH_RUNBOOK.md. CF Access + Stripe + DNS + Sentry + uptime monitor + privacy/ToS sign-off + trusted-friend walkthrough → public flip.


5. Estimated timeline (assuming current warp pace)

Day Round Code-side Kevin-side
04-30 (now) 4 Polish to 8.3/7.7 — in flight None
05-01 5 Vision docs + tier gates + terminology sweep Read vision-revision doc + sign off
05-02 6 Sprite engine + character creator + collision flags Begin §3 CF Access setup (45 min)
05-03 7 Stitch + integrate + re-rate §5 Sentry + §6 Stripe (45 min)
05-04 8 Optical polish pass §7 uptime + §8 privacy/ToS sign-off
05-05 9 Final pre-freeze + 10/10 re-rate confirm Domain + DNS records
05-06 (freeze) Tag v1.0-rc1; observability smoke Friend-walkthrough setup
05-07 (rc-test) Bug fixes only Run trusted-friend walkthrough
05-08 🚀 Public flip CF Access policy → public; announce

~8 days from tonight to public flip at this cadence. Could slip 2-3 days if sprite-engine work hits unexpected complexity (collision math is famously tricky; cross-browser pointer events fragmenting).


6. Open questions for Kevin (before Round 5 fires)

  1. Pro tier canvas count. I proposed 1 showcase + 9 extras = 10 total. Want it tighter (1+4=5) or looser (1+19=20 / unlimited)?
  2. Showcase = the ONE public canvas, or top-N highlighted? Current model: exactly 1 showcase per creator. Could later allow Pro to have 2-3 highlighted. Lock at 1 for v1.0?
  3. Sprite character creator — palette size for v1.0? Tight palette (8 body × 6 hair × 8 outfit = 384 combos) keeps art budget reasonable. Or aim for “lots of freedom” with a procedural generator?
  4. Sprite art direction. v10w-style (warm-bronze on dark / clean line) or pixel-art (more game-like)? Locks the asset pipeline.
  5. Walk physics — top-down or 3/4-perspective? Top-down (like Stardew / Pokemon Red) is simpler. 3/4 (like Stardew Valley as it actually plays) feels richer. Top-down for v1.0?
  6. Sound — footsteps default on? With opt-out toggle, or off-by-default-with-opt-in like the ambient layer?

7. Definition of “10/10” — explicit

Because “10/10” is otherwise hand-wavy:

Visual 10/10: - Every surface looks designed, not assembled - Every state designed (empty / loading / error / first-time / disabled / hover / focus / active) - Optical alignment everywhere; hand-tuned where math doesn’t catch it - Animation purposeful, not decorative; reduced-motion respected everywhere - Mobile parity with desktop (or intentional mobile-specific designs) - Brand consistency through every page

Codebase 10/10: - 100% test coverage on critical paths (auth, persistence, payments) - All Handler methods type-annotated - Zero unjustified bare excepts - Every module has a docstring; every public function has a docstring - Observability complete — Sentry catches errors; logs are structured + redacted; metrics endpoint covers every load-bearing dimension - Performance — TTI < 1s on 4G; LCP < 2.5s; CLS < 0.1; bundle < 150KB compressed - Security — auth gate verified; CSRF on writes; rate limits on auth + creates; iframe sandboxing audited - A11y — WCAG 2.1 AA on every surface; keyboard nav complete; focus rings visible everywhere; reduced-motion honored

Brand 10/10: - Every word feels considered - Every transition feels intentional - The product has a voice you can quote

If any category is below 9.5/10 at v1.0-rc1, we don’t ship. We fix it. The bar is the bar.


8. What this doc commits to

  • New terminology is locked (Ensemble / Studio / Canvas / Showcase)
  • Tier limits are locked at 1+1 free / 1+9 pro (pending Kevin’s call on the 9 number)
  • v1.0 scope now includes sprite-walk + character creator (was v1.5)
  • 10/10 across every category before public flip — no exceptions
  • ~8 days to public flip at current warp cadence (5 more rounds)

This doc is the spec the rounds execute against. If reality diverges, update this doc + announce the divergence. Don’t drift silently.