Provenance and migration#
Two different migrations share this page: moving your own code between 0.x releases of ComputerWorld, and the predecessor projects this workspace replaces.
Moving between 0.x releases#
0.x releases may change APIs and world schemas, so pin the version — snapshots and state
hashes name the engine that made them, and only the same engine version imports an
exported snapshot. CHANGELOG.md is the authoritative list; what follows is what
actually breaks a consumer.
Into 0.2.0. Services answer with text/html rather than Page JSON. Nothing you
have stops working: a Page a service returns, and a site seeded in the pages format,
are converted by cw_web::page::to_document on the way to the browser, and the element
ids an agent's script addresses are preserved through the conversion. New services
should be written in HTML; html-migration.md is the recipe, with
the search service as the worked example. PageTheme gains an optional font, a CSS
font-family list; scene JSON without a node typeface is unchanged. The world console
(examples/browser/), its site/demo/ copy, the browser-demo release archive and the
three Playwright suites that drove it were removed; the world those machines ran in is
now generated by scripts/content/build-live-world.mjs, and the engine half of the suite is
crates/computerworld/tests/site_world.rs.
After 0.2.0. Runtime::events() returns &EventLog rather than &[EventRecord];
it derefs to a slice and iterates in the same order. Tab::history is a History rather
than a Vec<HistoryEntry>; it derefs to a slice and deliberately has no DerefMut.
Runtime::fork_and_restore is new, and cw_scene::Digest is public and Copy. Every
state hash, event record, inspect(), exported snapshot and replay is byte-identical to
0.2.0, so checkpoints written by 0.2.0 still import.
The predecessor projects#
The detailed provenance matrix and pinned source revisions describe predecessor evidence. This workspace is a Rust redesign; it is not a source-compatible rename of any prior project and does not import predecessor runtime dependencies.
| Predecessor | Retained idea or behavior | Migration consequence |
|---|---|---|
| SCE | Generic topology, independent machines, VFS/process/network semantics, OS profiles and service placement | Convert topology to WorldDefinition; register native implementations |
| TCN vendored SCE | Deterministic IDs/time, persistent sessions, clock reset fixes, actor/evaluator split | Keep one runtime alive; replace wrapper globals and model-specific projections with explicit session grants |
| SynthUX | Stateful service workflows, logical scheduling and input/frame provenance | Move durable state into service instances; route views through actual HTTP responses |
| Standalone mock sites | Independent endpoints and useful mail/docs/chat/git/calendar/issue views | Serve the views as HTML from a service that owns their state; do not retain disconnected fixture stores |
| Synthex | Early virtual-internet intent and later SynthUX integration | No Internet-stub implementation to preserve |
| symbolic-ai-models | Explicit perception/action boundaries | Keep interfaces, omit model/training architecture |
Intentional incompatibilities include no mandatory Node/Python host runtime, no
Chromium-per-world rendering, no global Date patch, no subprocess-per-step bridge,
no implicit host network fallback and no hardcoded reference ecosystem. Reward
functions, training curricula and policy representations stay outside the kernel.
Portable checkpoints are new runtime artifacts, not imports of predecessor heap
snapshots. Commands implement documented synthetic subsets rather than a complete
POSIX/PowerShell interpreter. A site's HTML and CSS are rendered by the engine's own
web engine, which supports a bounded and explicit set of properties rather than
everything a shipping browser does; html::validate_strict names what is missing at
test time instead of dropping it silently. Extension handlers are trusted Rust code;
former JavaScript/Python handlers require ports or an explicitly separate adapter.
Use integration behavior rather than route-name similarity to assess parity: two-machine mutations, DNS failures, authorization, replay, fork isolation and actual visible-state transitions. Existing predecessor defects are evidence to avoid, not compatibility requirements. Performance comparisons must use actual successful work rather than requested-action echoes or unconditional success flags.