You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The living docs/native/CORE-MIGRATION-LEDGER.md marks the Project state-shape compatibility adapter as an in-progress prerequisite before native Core/Qt admission:
features/project/coreBoundaryAdapter.ts already translates Redux EntityState/array shapes to the renderer-neutral Rust project model and preserves ID/order invariants;
parity fixtures and an observation-only desktop shadow caller exist;
the current Rust verdict is explicitly partial because unknown fields are not rejected/fully classified;
the boundary envelope currently synthesizes schemaVersion rather than consuming one persisted as authoritative data;
there is deliberately no production authority switch yet.
No dedicated open issue currently owns this remainder.
Goal
Turn the current proof into an explicit, versioned Project/Core compatibility contract that can safely support later authority migration and Qt, without importing Redux Toolkit shape into Rust Core or discarding forward-compatible project data.
Required decisions
1. Persisted version authority
Decide where the compatibility/schema version comes from and how it is persisted.
Do not let a synthesized current version make older/unknown persisted data appear already migrated.
Define:
version field/owner;
absent-version legacy semantics;
supported older/current/future versions;
upgrade/migration admission;
downgrade behavior;
error/recovery result when a version is unsupported.
2. Unknown-field policy
The current Rust model does not provide a complete verdict for fields outside its modeled subset.
Choose an explicit policy per boundary/evolution stage:
If Core does not understand a field that TypeScript currently persists, an observation/round-trip path must either preserve it or decline authority rather than deserialize/re-serialize a narrower object and erase it.
3. Authority-switch admission
Define the gates that move the current shadow comparison from:
OBSERVATION_ONLY
to any production decision/write authority.
At minimum require:
complete field inventory for the admitted lifecycle;
compatibility/version verdict;
no-loss round-trip proof;
TS/Rust accept/reject parity where both remain active;
rollback/fallback behavior;
representative historical fixtures;
no Redux-specific types leaking into Core.
Entity-state invariants
Preserve the already-established contract for characters/worlds:
stable IDs preserved exactly, including all IDs accepted by the authoritative import/persistence contract;
declared order preserved;
duplicates fail closed;
missing ids/entity correspondence fails closed;
orphan entities fail closed or are handled by an explicitly versioned migration;
Context
The living
docs/native/CORE-MIGRATION-LEDGER.mdmarks the Project state-shape compatibility adapter as an in-progress prerequisite before native Core/Qt admission:features/project/coreBoundaryAdapter.tsalready translates ReduxEntityState/array shapes to the renderer-neutral Rust project model and preserves ID/order invariants;schemaVersionrather than consuming one persisted as authoritative data;No dedicated open issue currently owns this remainder.
Goal
Turn the current proof into an explicit, versioned Project/Core compatibility contract that can safely support later authority migration and Qt, without importing Redux Toolkit shape into Rust Core or discarding forward-compatible project data.
Required decisions
1. Persisted version authority
Decide where the compatibility/schema version comes from and how it is persisted.
Do not let a synthesized current version make older/unknown persisted data appear already migrated.
Define:
2. Unknown-field policy
The current Rust model does not provide a complete verdict for fields outside its modeled subset.
Choose an explicit policy per boundary/evolution stage:
The default must never be silent data loss.
If Core does not understand a field that TypeScript currently persists, an observation/round-trip path must either preserve it or decline authority rather than deserialize/re-serialize a narrower object and erase it.
3. Authority-switch admission
Define the gates that move the current shadow comparison from:
to any production decision/write authority.
At minimum require:
Entity-state invariants
Preserve the already-established contract for characters/worlds:
ids/entity correspondence fails closed;Fixture/evidence matrix
Add/maintain fixtures for:
Use golden fixtures in both TS and Rust where transition parity matters.
Relationship to other work
Acceptance criteria
CORE-MIGRATION-LEDGER.mdrow 9 is updated whenever the authority state or compatibility policy changes.Non-goals