Repository navigation
Layering: frame core with no architect; frame-architect for the integration - #28
Merged
Merged
Conversation
This was referenced Nov 2, 2026
…ration Splits along the line the embedded-view design needs (architect defines the view contract and Frame implements it; architect never depends on Frame): - frame (core): document/format, the Scene IR, the Vello renderer, the surface protocol, runtime and kit, motion, feed, theme. No architect, vox, Dioxus, figcraft or crdt in its normal dependency tree, with every feature on (`just boundary`, a CI step). SurfaceEngine is a plain trait; LoroScene wraps a plain loro::LoroDoc (a host passes its CrdtDoc's loro().clone(), a reference clone); the demo catalog is surface::demo::demo_catalog; the runtime's Engine/Local/connect/send stay. - frame-architect: the #[architect::rpc] SurfaceEngine (same name, so the same wire names), implemented for every core engine; the mock engine (memory::Memory); remote engines and the telemetry pump (feature remote, was frame's remote/surface-runtime-vox); surface libraries (feature library, was frame's library). - frame loses the vox, rpc, remote, library, library-proto-vox, codec, surface-runtime-rpc and surface-runtime-vox features, and default is now empty (was vox). A break, pre-1.0: consumers move to frame-architect (Studio in FastTrackStudios/studio#373). - The tools depend on frame-architect where they serve, connect or use libraries. - Two of the tests Studio cut (studio#203) come back where they now belong: the vox round trip (frame-architect/tests/remote.rs) and the Loro replica (frame/tests/loro_scene.rs).
fts-forge
Bot
force-pushed
the
refactor/gh-5-core-architect-split
branch
from
November 2, 2026 05:50
300936a to
8c541c7
Compare
fts-forge
Bot
changed the base branch from
build/gh-4-architect-v0.10.0
to
main
November 2, 2026 05:50
The THEBATTLESHIP pool's job gate refuses pull_request jobs from public repos, so every PR job failed at "Set up runner". PR jobs now run on ubuntu-latest (nix installed, cargo home and target cached per job by rust-cache); pushes to main stay on the pool with kache. The shared setup is .github/actions/rust-env. Still no RUSTFLAGS anywhere.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #5. Part of #2. Stacked on #27 (which is on #26); this PR's base is #27's branch.
What
The split follows the line the embedded-view design needs: architect defines the view contract, Frame implements it, and architect never depends on Frame.
frame(core) keeps the document and format, the Scene IR, the Vello renderer, the surface protocol, runtime and kit, motion, feed and theme.just boundarychecks this (scripts/check-core-boundary.sh) and runs as a CI step. I confirmed it fails on the pre-split tree.SurfaceEngineis a plain trait. It has the same methods and none of the push streams.LoroScenewraps a plainloro::LoroDoc(same loro 1.16 as crdt).crdtitself depends on architect, so it couldn't stay. A host on architect passescrdt_doc.loro().clone(), which is a reference clone, so both edit one document.frame::surface::demo::demo_catalog.Engine,Local,connectandsendstay in core.frame-architect(new crate) holds the architect integration.#[architect::rpc] SurfaceEngine. It keeps the same name, so the vox wire names don't change. It is implemented for every core engine by a blanket impl, so an engine implements only the core trait plusSurfaceEngineStreamSourcefor its pushes.memory::Memory: the mock engine.remotefeature: the vox client as a runtimeEngine, plusconnect_ws,connect_ws_stream,serve_ws,Telemetry,IncomingandPumpEnd.libraryfeature: surface libraries (proto, fs, link).voxfeature, on by default. The rpc macro gates its generated items on the calling crate'svoxfeature.Breaks (pre-1.0).
framedrops these features:vox,rpc,remote,library,library-proto-vox,codec,surface-runtime-rpcandsurface-runtime-vox.defaultis now empty (it wasvox).frame-architect; Studio does so in Studio depends on Frame by tag; no Frame code left in Studio studio#373.frame-architectwhere they serve or connect to engines or use libraries.Tests.
frame-architect/tests/remote.rs, the vox round trip over a real WebSocket, including the engine being killed;frame/tests/loro_scene.rs, the Loro replica.host-sceneandnice-plug, so the workspace check compiles those paths. They had gone uncompiled, which is how Frame on architect v0.10.0 #27 missed thehost-scenebreak; Frame on architect v0.10.0 #27 now carries that fix.CI on hosted runners for PRs (second commit). The repo went public, and the THEBATTLESHIP pool's job gate refuses
pull_requestjobs from public repos, so every PR job failed at "Set up runner".ubuntu-latest, with nix and rust-cache..github/actions/rust-envsets up either kind of runner.RUSTFLAGSanywhere.Checks (local,
nix develop .#ci, kache; per LOCAL-CHECKS.md)Ran:
cargo fmt --all -- --checkcargo clippy --workspace --all-targets -- -D warningsjust boundarycargo test --workspace, once, after the split:remote3/3,loro_scene10/10,frame4 unit tests + 1 doctestembed,nice-plugandhost-sceneon, which is now part of the workspace checkSkipped:
host-scenefix, which touches neither test.