Skip to content

Screens release: prototype in Studio, author in Screenplay, run and render through Stage #7

Closed

Description

@einari

Screens release scope

Release plan derived from StudioReleaseScreens.md at the Cratis organization root. Screenplay is the source of truth for the complete application UI, not merely intent. Scene remains the rendering authority. Studio Play, cratis run, and a generated React application must realize the same modeled application.

Audited upstream main, not just the local checkouts (several were stale): Scene b6643fc, Studio 2c0f910c1, Screenplay 52a5ccb9, Stage 5a412fe, cli c3d799f, AI 6bdc80cc, Components f6efb3ac.

Already shipped foundations: Scene package resolution, layouts, contribution points, themes, recursive fitsSlot templates, descriptors/exposure/edit operations (#1–#6, #51), icon packages (#52); Studio floating editor/query binding/template selection/icons (Cratis/StudioIssues#393–#397); Screenplay forms/profiles/templates/arrangements and folder workspaces; Stage Scene translation and standalone frontend composition (Cratis/Stage#37, Cratis/Stage#100, Cratis/Stage#122); CLI file/folder run/render. These must be extended, not recreated. Closed issues are historical evidence, not new release blockers.

The old build-order section below is historical. This release section supersedes its obsolete open-decision and dependency claims. Source inspection is not a passing end-to-end test: the release closes only against the executable evidence below.

Acceptance criteria

  • A master/detail business application binds a slice query to a table, binds selection to details, and authors an auto/manual multi-column CommandForm.
  • Application shell → module → feature → nested feature/slice composition is recursive; optional templates, exposed inherited settings, toolbar-driven dialogs/outlets and authored URLs survive save/export/import.
  • Components, styling, blueprints and icons resolve through one coherent package contract in Studio, embedded Event Models/VS Code, Stage runtime and generated React.
  • An AI agent can create and modify that same multi-file application through Screenplay MCP; corpus examples compile and run.
  • Studio Play uses the full surface below announcements, only the upper-right Stop/Frontend/API/Chronicle toolbar, and restores authoring chrome on Stop.
  • The canonical release vector proves runtime/render behavior and CLI/Studio plan parity using the exact released package/image set; no silent fallback or dropped modeled UI.

References and dependencies

Blocked by

Release work index

Repository Issue Work
Scene Cratis/Scene#27 Decide and document the component-library manifest authority across Scene and Components
Scene Cratis/Scene#69 Support typed data-context and named-component property bindings
Scene Cratis/Scene#70 Formalize package-provided component designers, property editors and design-time actions
Scene Cratis/Scene#71 Render auto and authored multi-column CommandForms through the same native form runtime
Scene Cratis/Scene#72 Add extensible template types and categories with scope-aware applicability
Scene Cratis/Scene#73 Research and ship business-application blueprints with categorized live examples
Scene Cratis/Scene#74 Resolve hierarchical navigation, authored URLs and toolbar actions into named outlets or dialogs
Scene Cratis/Scene#75 Expose a consistent frontend package-host configuration for embedded and standalone rendering
Screenplay Cratis/Screenplay#536 Express the complete screens-release UI contract across single-file and folder applications
Screenplay Cratis/Screenplay#537 Prove screen creation and editing through the existing revision-checked MCP authoring tools
Stage Cratis/Stage#236 Use one complete screen application plan for generated React and live Stage
Stage Cratis/Stage#237 Run the full modeled application through the same Scene composition as generated React
StudioIssues Cratis/StudioIssues#156 Complete the Scene-based editor with package designers and design-time actions
StudioIssues Cratis/StudioIssues#555 Author data-context and component-property bindings in the prototype inspector
StudioIssues Cratis/StudioIssues#556 Design CommandForms with auto/manual mode, generated fields and resizable columns
StudioIssues Cratis/StudioIssues#557 Replace the blueprint button dump with a categorized, scope-aware template browser
StudioIssues Cratis/StudioIssues#558 Author hierarchical navigation and toolbar slice actions with outlet/dialog destinations
StudioIssues Cratis/StudioIssues#165 Preserve the complete authored UI in Screenplay export, import and Play
StudioIssues Cratis/StudioIssues#470 Move saved screens to screen documents with an explicit data migration, not conversion on open
StudioIssues Cratis/StudioIssues#275 Use Stage's renderer instead of Studio's own
StudioIssues Cratis/StudioIssues#502 Static code generation provider: render through Stage on top of the Screenplay output
StudioIssues Cratis/StudioIssues#559 Make Play fill the workspace and move Stop/Frontend/API/Chronicle to the upper right
cli Cratis/cli#284 Pass full screen application and package configuration through run and render
Screenplay Cratis/Screenplay#168 Publish a Screenplay-owned canonical end-to-end conformance corpus
Screenplay Cratis/Screenplay#173 Prove CLI and Studio Stage-plan parity with the canonical corpus
AI Cratis/AI#536 Teach and verify end-to-end screen authoring, MCP editing and Stage runtime/render parity

Audited source revisions


Previous scope and historical context

The release scope above updates this issue without deleting its prior context. Completed foundations and superseded product questions are not new blockers. Existing non-screen requirements remain in scope.

Tracking issue for the screen work — the UI half of the Screenplay stack, spanning six repositories. Every issue below carries the screen label in its own repo.

The work splits by lifecycle, the same way Chronicle/Arc/Components/AuthProxy already do:

  • Screenplay owns the language — what a screen, form, layout, theme or ui profile can say.
  • Scene owns the object model and runtime — Scene.Model (platform-agnostic), Scene.Engine (binding/resolution), Scene.React (one renderer).
  • Stage owns the seam and the build — translating parsed Screenplay into Scene.Model, and producing a shipped artifact per ui profile.
  • Studio owns the design-time tooling — designers built on top of Scene's object model, previewing through the unmodified Scene engine.
  • Arc / Components own the form runtime the form construct ultimately compiles down to.

Build order

Waves are dependency layers, not sprints — everything inside a wave can run in parallel.

Wave 1 — foundations, nothing blocking

Issue What
Cratis/Screenplay#94 Language construct: ui profile — the vocabulary (target platform, target size, packages) everything else layers on
Cratis/Screenplay#92 Language construct: contribution points and navigation
Cratis/Screenplay#91 Language construct: form
#1 Scene object model, and the split into Model / Engine / React
Cratis/Arc#2549 CommandForm populated at startup

ui profile and the Scene object model are the two real roots — starting anywhere else risks rework.

Wave 2

Issue Depends on
Cratis/Screenplay#95 — layout arrangement (flow / freeform) #94, for the size-class vocabulary
Cratis/Screenplay#96 — theme construct #94, for the package chain it declares compatibility against
Cratis/Screenplay#93 — string resources for UI text #92 (nav labels) — also blocked on reconciliation with the existing Internationalization construct, Cratis/Screenplay#7
Cratis/Components#133 — initial values for CommandForm Cratis/Arc#2549
Cratis/Components#104 — dynamically populate form content Cratis/Arc#2549
Cratis/StudioIssues#156 — editor architecture: chrome vs. preview surface #1

Wave 3 — Scene engines

Issue Depends on
#3 — ui profile package resolution engine Cratis/Screenplay#94, #1
#4 — layout engine Cratis/Screenplay#95, #1
#2 — contribution point runtime and NavBar widget Cratis/Screenplay#92, #1

Wave 4

Issue Depends on
#5 — theme engine Cratis/Screenplay#96, #3 (themes resolve against the profile's package list)

Wave 5

Issue Depends on
#6 — UI starters (kits) and sample gallery #3, #5, #2 — the gallery is a real mini-app driven by all three

Wave 6 — Stage

Issue Depends on
Cratis/Stage#37 — hook Screenplay's constructs into Scene's object model #1 and every Screenplay construct it translates: #91, #92, #94, #95, #96
Cratis/Stage#39 — runtime rendering per deployment target Cratis/Stage#37, #3, #4, #5

Wave 7 — Studio designers

All of these sit on Cratis/StudioIssues#156, which establishes that the preview surface runs the real Scene.Engine + Scene.React rather than a Studio-specific reimplementation.

Issue Depends on
Cratis/StudioIssues#157 — form designer Cratis/Screenplay#91; runtime via Cratis/Arc#2549, Cratis/Components#133
Cratis/StudioIssues#158 — navigation / contribution designer #2
Cratis/StudioIssues#159 — string resource management Cratis/Screenplay#93 (itself blocked on Cratis/Screenplay#7)
Cratis/StudioIssues#160 — ui profile and theme configuration #3, #5 — refines the original request in Cratis/StudioIssues#80
Cratis/StudioIssues#161 — layout designer Cratis/Screenplay#95, #4
Cratis/StudioIssues#162 — new-project wizard and gallery preview #6

Decisions that gate more than one issue

These are open questions whose answers change work in several repos at once, so they are worth settling before the wave that consumes them starts.

Not part of this

#6 (ui starter) is deliberately a packaged tooling artifact, not a .play construct — see the out-of-scope note in Cratis/Screenplay#96. Don't reuse theme or the earlier "template" wording for it.


Decisions taken 2026-08-14

Scene is dual-stack: C# Scene.Model as the source of truth, with a TypeScript mirror. Scene.Engine and Scene.React are TypeScript and consume the mirror; Stage references the C# model directly, so the Screenplay → Scene seam is typed rather than serialized. Arc's proxy generator does not cover a standalone object model, so the mirror is hand-maintained behind a parity spec unless #1 decides to build a generator. Full detail in #1.

Screenplay#93 drops the inline strings block. The compiler already ships companion .strings files per locale and $strings.<key> references covering label, title and validation message. The work narrows to extending $strings. to the operands Cratis/Screenplay#92 introduces — principally navigation-item's label. This closes the reconciliation question against Cratis/Screenplay#7, so Cratis/Screenplay#93 and Cratis/StudioIssues#159 are no longer blocked on it, and Wave 2 loses a dependency.

Activity

  1. added
    screenScreen/UI work: Screenplay UI constructs, Scene runtime, Stage rendering, Studio designers
    on Aug 14, 2026
  2. einari commented on Aug 16, 2026

    @einari
    ContributorAuthor

    Status — 2026-08-16

    Scene is published. All eight packages are on npm at 1.0.0: @cratis/scene.model, .engine, .react, .tailwind, .primereact, .components, .blueprint.default, .blueprint.components. The registry trust-policy blocker that held every publish since Scene#8 is resolved.

    Landed

    • Screenplay 4.0.0 (Distinguish layout, screen template and dialog template Screenplay#117) — the language now distinguishes the concepts that used to share a word: application-level layout, module-level screen template with fits slot, dialog template, the arrangement tree folded under arrangement, screen bodies referencing template <Name>, and ui profile selecting a layout beside its theme. Package validation restored at the 4.0.0 baseline in Add the application structure reference and index (part of #97) #118.
    • Scene#16 — the package model (ScenePackage, kinds ComponentLibrary/Styling/Blueprint, declared dependencies), dependency resolution with ordering that is override priority, ScreenTemplate/DialogTemplate and the resolver that turns fitsSlot names into a nesting tree, plus six packages: PrimeReact (87 components, 25 credited themes), Cratis Components, Tailwind, the default blueprint (2 layouts, 8 menu modes, 23 screen + 3 dialog templates) and the Cratis Components blueprint.

    The vocabulary this settled on

    Word Means
    Layout An application's base navigational look. One per application, selected.
    Screen template A reusable shape inside it, at module / feature / slice level. fitsSlot names the parent slot it fills.
    Dialog template The same, minus fitsSlot — an overlay occupies no slot.
    Screen The instance.
    Blueprint The package shipping a coherent set of the above.

    Still open

  3. cratis-direct commented on Aug 27, 2026

    @cratis-direct

    Thanks for opening this - it has been received and will be looked at.


    Posted by Stagehand (AI) - an autonomous agent, not a person. Review accordingly.

  4. einari commented on Sep 2, 2026

    @einari
    ContributorAuthor

    One more decision for the list, surfaced by Components 4: #27 — whether a ui profile's ComponentLibrary package and a Components UiLibrary are one concept or two.

    Components 4 made the UI library a swappable runtime choice — nine primitive slots behind a versioned ABI, with @cratis/components.primereact and @cratis/components.mui both shipping at 4.1.1 and filling the same nine. Scene's ScenePackage/UiProfile already models the design-time half, and the two overlap closely enough to be worth reconciling deliberately: both make package order the override priority, and both have core as the final fallback.

    It gates how Cratis/StudioIssues#160 and the resolution engine from #3 converge, rather than whether either proceeds — neither is blocked today.

  5. self-assigned this
    on Sep 6, 2026
  6. woksin commented on Sep 6, 2026

    @woksin
    Contributor

    Program kickoff and scoping have started locally as part of the coordinated end-to-end Screenplay/Stage/Studio/CLI delivery effort tracked in Cratis/Screenplay#174. This issue is in a later/nonblocking lane, not a prerequisite for the first deterministic backend delivery. @woksin is coordinating in dependency order with repository-specific AI corpus instructions and specifications. Existing work/PRs will be reconciled rather than duplicated. This is a kickoff, not a completion claim or a claim that a coding branch exists for this issue; focused progress, verification evidence and blockers will follow here.

  7. woksin commented on Sep 16, 2026

    @woksin
    Contributor

    Narrow frontend progress: #38 is merged and its release is in progress; explicit queryArguments now reach registered collection queries, with affected builds, 125 component tests, lint and full JavaScript/Storybook CI verified. This is not optional-single result support or a standalone generated frontend. The next concrete gaps are #39 (keyed optional-single lookup/input behavior) and Cratis/Stage#100 (pure artifact-plan composition of existing Scene/Arc/Components/frontend-host pieces). Existing engine/translation work remains completed; do not recreate it. #27 remains the explicit presentation-library mapping decision. The old Storybook build-failure report #26 was closed against current successful CI.

  8. woksin commented on Sep 16, 2026

    @woksin
    Contributor

    Scene v3.4.0 is now published and registry-verified. All eight npm package records report gitHead 1368cea; Cratis.Scene.Model and Cratis.Scene.Engine NuGet packages contain the same repository commit and net8/net9/net10 assemblies. The published scene.components bundle contains the explicit queryArguments forwarding/rejection implementation. This completes the narrow release from #38, not #39 optional-single lookup or Cratis/Stage#100 standalone application composition.

  9. woksin commented on Sep 16, 2026

    @woksin
    Contributor

    v3.5.0 now publishes the host-controlled optional-single view and typed native adapters from #41, with verified package provenance and green full JavaScript/Storybook CI. #39 still owns editable parameter/commit wiring and the actual keyed-query vertical; Cratis/Stage#100 owns deterministic standalone frontend composition. Existing Scene model/engine/renderers are being reused, not replaced.

  10. added theissue type on Oct 6, 2026
  11. changed the title [-]Screen: cross-repo build order and dependency map[/-] [+]Screens release: prototype in Studio, author in Screenplay, run and render through Stage[/+] on Oct 8, 2026
  12. self-assigned this
    on Oct 8, 2026
  13. einari commented on Oct 8, 2026

    @einari
    ContributorAuthor

    Implementation plan

    Prerequisites: Cratis/Scene#27, Cratis/Scene#69, Cratis/Scene#70, Cratis/Scene#71, Cratis/Scene#72, Cratis/Scene#73, Cratis/Scene#74, Cratis/Scene#75, Cratis/Screenplay#536, Cratis/Screenplay#537, Cratis/Stage#236, Cratis/Stage#237, Cratis/StudioIssues#156, Cratis/StudioIssues#555, Cratis/StudioIssues#556, Cratis/StudioIssues#557, Cratis/StudioIssues#558, Cratis/StudioIssues#165, Cratis/StudioIssues#470, Cratis/StudioIssues#275, Cratis/StudioIssues#502, Cratis/StudioIssues#559, Cratis/cli#284, Cratis/Screenplay#168, Cratis/Screenplay#173, Cratis/AI#536.

    1. Use this issue as the release index. Confirm the capability matrix against StudioReleaseScreens.md and retain closed foundation links as evidence, not unfinished tasks.

    2. Deliver in dependency order: Scene contracts/manifest decision → language and shared runtime contracts → Stage consumers and Studio authoring → MCP/AI and end-to-end parity. Independent Play chrome work can land in parallel.

    3. Keep the linked issue table and native blocking relationships current. Validate every capability using the Screenplay-owned multi-file fixture, then run the exact released package/image matrix before marking the release complete.

    Completion evidence: link implementation PRs and the tests/results for every checkbox under ## Acceptance criteria; keep release dependency links current. This is a proposed implementation plan, not a claim that the work or tests have already run.

  14. 13 remaining items

  15. einari commented on Oct 13, 2026

    @einari
    ContributorAuthor

    Screens release - closing summary (2026-10-13)

    Shipped and proven on public releases: Scene 4.22.1 (npm + NuGet), Screenplay 4.153.0 (+ Cratis.Screenplay.CanonicalCorpus 4.153.0), Stage 4.93.0 (GitHub/NuGet/Docker; the CLI default image is 4.92.0), CLI 3.59.0 (GitHub + Homebrew), AI 7.46.0, Studio 0.170.1 deployed to production.

    Epic criteria

    1. Master/detail business application (query -> table -> selection -> details) with an auto/manual multi-column CommandForm - master/detail, bindings and auto/manual forms are proven in Studio, live Stage and generated React; the custom two-column manual form on the public rendered vectors is not yet shown -> Screenplay#721.
    2. Recursive shell -> module -> feature composition, optional templates, exposed settings, toolbar dialogs/outlets, URLs survive save/export/import - proven: production Studio imports the corpus with 0 compiler notes and exports it with 0 of 290 lines absent; Play renders it. Inspector authoring of Screen.path/navigation hierarchy/toolbar placement -> StudioIssues#631.
    3. One package contract across Studio, embedded/VS Code, Stage runtime and generated React - proven: Scene#90/Prove the approved package set in the embedded and webview hosts #92, Stage#334/#353, CLI#335/#343 (custom package set 13/13 on cratis run).
    4. AI agent creates/modifies the multi-file application through Screenplay MCP; corpus examples compile and run - proven: standalone and Studio-hosted MCP (39/39 identical tool schemas, hosted apply now writes screens, command events and observable queries), screens-smoke in AI CI.
    5. Studio Play uses the full surface, only the upper-right Stop/Frontend/API/Chronicle toolbar, restores chrome on Stop - proven on production (24 viewport tests + today's production vector).
    6. Runtime/render behaviour and CLI/Studio plan parity on the exact released package/image set - behaviour proven (live Stage 81/0, generated React 78/78, render-audit 62 artifacts byte-identical); CLI-vs-Studio plan/artifact comparison on the same Stage release + drift gate -> Screenplay#722.

    Final public acceptance

    run-public-acceptance.sh on CLI 3.59.0 + cratis/stage:4.92.0 + corpus 4.153.0 + production Studio 0.170.1: browser passed (81 assertions / 0 blockers), render-audit passed, MCP transcript passed (41 tools), Studio production vector passed (14 steps; export vs corpus 0 absent). Evidence: agents/wave2/closer2-evidence/public-acceptance-cli-3.59.0/ in the screens-release worktree. Also proven on production in this pass: package-qualified component names keep a placed commandForm's place through Studio export -> Stage Play (Studio#1727, Stage #363), hosted studio_screenplay_apply writes screens/events/observable queries (#1726, #1731), and StudioIssues#470: the production dry run found 0 items to migrate (all 144 items skip), so nothing was written.

    Closed with a proof comment

    Scene #69, #70, #71, #73, #74, #75 (and #72) - Screenplay #168, #173, #536, #537 - Stage #236, #237 - cli #284 - AI #536 - StudioIssues #156, #275, #470, #555, #556, #557, #558, #559.

    New follow-ups (labels release + screens)

    • Screenplay#721 - two-column manual CommandForm on live Stage + generated React (from Scene#71, StudioIssues#556)
    • Scene#95 - real-browser template accessibility + a catalog business template rendered on Stage (from Scene#73, StudioIssues#557)
    • Screenplay#722 - CLI/Studio plan + generated output parity for the screen corpus on the same Stage, drift gate, legacy generation retirement (from Screenplay#173, StudioIssues#275)
    • StudioIssues#630 - finish the Scene.Model editor migration (from Project tracker: the timeline (part of #117) #156)
    • StudioIssues#631 - inspector authoring of screen path/hierarchy/toolbar placement (from #558)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

releaseRelease deliveryscreenScreen/UI work: Screenplay UI constructs, Scene runtime, Stage rendering, Studio designersscreensScreens release delivery

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions