Release v0.1.0
Added
Cratis.Scene.Model(C#) — the platform-agnostic Screen object model: theSceneElement → VisualElement → FrameworkElement → Control → Panel/ItemsControl/ContentControl/ExternalComponentelement hierarchy,Layout(flow and freeform arrangement per slot, width × height size classes),Form(the three population/mapping tiers), contribution points and navigation, andUiProfile/Theme. No React, DOM or CSS vocabulary anywhere in this project.@cratis/scene.model— the TypeScript mirror, hand-maintained and guarded by a real cross-language parity spec: a sharedscene-model-shape.jsonmanifest that both a C# spec (reflection over the assembly) and a TypeScript spec (walking each type's ownPropertyNamesconst) assert against independently, so a desync on either side fails its own build.@cratis/scene.engine— theRenderer<TOutput>contract a renderer implements (one method per concrete element kind), and arenderElement()tree walk. Binding resolution is injected via aBindingResolvercallback rather than solved here — the profile/contribution/layout/theme resolution engines are separate, later issues.@cratis/scene.react— implements the renderer contract against real React/DOM, with a smallcorecomponent set (core:text/button/card) and Storybook wired at the package level.- Repository scaffold:
.ai/instruction corpus and its Copilot/Claude/Codex adapters, build/lint/format config, and CI workflows (dotnet + JS build, NuGet + npm trusted publishing, semver label gate) — copied fromCratis/Arc, the closest real dual-stack framework repo.
Notes
- The design-time editor building on this object model belongs in Studio (
StudioIssues#156), not here. - Verified end to end:
dotnet build/dotnet testclean (Debug + Release, 0 warnings),yarn ciclean across all three JS packages,yarn build-storybooksucceeds, and the parity spec genuinely fails on both sides when deliberately desynced (verified, then reverted).
(#1)