Skip to content

Add a render-only ./render entry for read-only viewers - #1

Merged
wass08 merged 1 commit into
mainfrom
render-entry
Nov 11, 2026
Merged

wass08 merged 1 commit into
mainfrom
render-entry

Conversation

@wass08

@wass08 wass08 commented Nov 11, 2026

Copy link
Copy Markdown
Contributor

Read-only viewers can now render boots:job cones without loading @pascal-app/editor.

What's split

boots:job (the only kind) is now built from two files, and definition.ts combines them:

  • src/definition.render.ts (render half): schema, schemaVersion: 1, defaults, capabilities (selection, bounds and transforms, matching the built-ins), the cone renderer, presentation and the mcp description.
  • src/definition.edit.ts (editing half): snapProfile, the inspector parametrics, and the system slot.

The system slot holds the whole Boots game: Jump in, the ?boots=drop gate, spectators and the pending Save/Discard preview. It has no separate "job system". It reaches @pascal-app/editor through game/session.ts (useEditor) and game/inventory.tsx (CATALOG_ITEMS), and it writes the scene on Save. So it goes in the editing half, the same way Spielberg's feed/capture system does. Read-only viewers still draw cones without it.

src/render.ts exports bootsRenderPlugin, with the same pascal:boots id and the same kind as bootsPlugin. package.json adds a ./render export that follows the root's source convention (./src/render.ts for types and default). bootsPlugin, bootsHostPanel, plugin contract v1, the kind name, the schema version, defaults and migrations (none) are all unchanged.

How it was verified

  • bun run check:render (new, scripts/check-render-entry.ts, added to CI): uses Bun.build to bundle ./render with every dependency included (290 inputs, including core and viewer). It fails if any import resolves to @pascal-app/editor or next. As a self-test, the root entry must fail the same check. I also added import('./game/session') to render.ts temporarily, and the check caught both editor imports.
  • src/render.test.ts: the render plugin has the same id, apiVersion, kinds, schema objects, schema versions, defaults and renderer as the root plugin. It carries no edit-only fields (snapProfile, parametrics, system, preview, tool, …), and the root definition keeps them.
  • bun run check-types: passes.
  • bun test: 3058 pass, 0 fail.
  • The package ships source, so there is no build step to run.

🤖 Generated with Claude Code

Split boots:job into definition.render.ts (schema, defaults, capabilities,
cone renderer, presentation, mcp) and definition.edit.ts (snapProfile,
inspector parameters, and the game engine on the system slot, which reaches
@pascal-app/editor). definition.ts composes both, so bootsPlugin is unchanged.

@pascal-app/plugin-boots/render exports bootsRenderPlugin. check:render bundles
it and fails on any @pascal-app/editor or next import; CI runs it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@wass08
wass08 merged commit e68c072 into main Nov 11, 2026
1 check passed
@wass08
wass08 deleted the render-entry branch November 11, 2026 17:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant