Repository navigation
Files Changed: gate migration and coordinated release #1083
Description
Files Changed: gate migration and coordinated release
Important
Problem - The extension and app can outpace the vendored engine binary, producing clients that call unavailable provenance routes. Existing sessions and in-flight v1 reservations cannot safely be upgraded by assumption.
Approach - Publish a discoverable capability matrix and migration boundary, then release in order: fork protocol, verified binary assets and pin, extension, and overlay synchronization proof. Full, partial, and legacy modes are explicit and rollback-safe.
Scope - in: capability discovery, mixed versions, pre-existing sessions, in-flight reservations, rollout criteria, rollback, fork release, binary pin, extension release, and overlay proof. out: implementation of individual mutators and UI features.
Assumptions - The ledger protocol, app surface, and v1 Sidebar foundation are available in source before the coordinated release.
Acceptance Criteria
- Capability discovery deterministically selects full, post-upgrade-partial, or legacy mode without probing a mutation route.
- Old engine with new client and new engine with old client remain safe and visibly labelled.
- Pre-existing sessions remain legacy; an active old session can record only a labelled post-upgrade epoch.
- In-flight v1 reservations are resolved as legacy and never silently adopted into a ledger operation.
- Rollback from a partially deployed release cannot authorize an uncontextualized full-provenance mutation.
- Fork release completes before the verified vendored-binary pin, which completes before extension release; overlay synchronization is verified as release evidence.
- Default enablement remains off until the adversarial acceptance matrix succeeds.
Testing Decisions
- Add capability and mixed-version contract tests across supported engine and extension combinations.
- Exercise upgrade, rollback, active-session, and in-flight-reservation fixtures in release rehearsal.
Key Decisions
- Compatibility discovery is separate from mutation-context validation.
- Overlay synchronization demonstrates source provenance; it does not substitute for a binary protocol release.
Constraints & Invariants
- Legacy mode may preserve prior behavior but never claims full provenance.
- Release ordering cannot be collapsed into a client-only deployment.
Prior Art
- Parent Files Changed: full session-lineage mutation ledger #972
- Existing Files Changed: session-bind Sidebar external file mutations #976 release and binary-pin gate
Deliberation Resolution
- Capability discovery returns a versioned object with
protocol_version,mode, andmigration_boundary.modeisfullonly for a supported engine and a session born after rollout;partialapplies to an opted-in post-upgrade epoch;legacycovers unsupported engines and pre-existing sessions without an epoch. - The supported matrix is explicit: old engine plus new client is legacy; new engine plus old client keeps its pre-ledger view; new engine plus new client is full only for a full root; new engine plus new client on a partial or legacy root remains labelled partial or legacy.
- Migration transitions are
legacy -> partialonly through an explicit epoch start, never by background inference. In-flight v1 reservations resolve as legacy results. Rollback disables full discovery before client mutation routes are available. - The release manifest lists required fork tag, binary checksums, lock pin, extension version, overlay provenance check, rehearsal cases, and mandatory matrix case IDs. Default enablement requires a machine-readable all-required-passed result.
Activity
jeonghun-jj-lee commentedon Sep 14, 2026
Closing: the CODE for this slice is delivered and merged (fork PR harmoniqs/opencode#356, on
local/amicodevia integration PR #345) — capability discovery, mixed-version matrix, migration boundary, rollback safety, and the release-readiness evaluator (default-enablement stays OFF and the #1084 all_required_passed gate authorizes the eventual flip).The remaining acts are a deliberate HUMAN release decision, NOT tracked dev work: cut the fork release, verify + pin the binary, publish the extension, re-sync the overlay against the pinned tag, and flip default-enablement. Those happen when we choose to ship — other agents finish from the merged code. Not keeping this open as a pending-work issue.
Epic #972 is thus fully implemented on the fork base; shipping is out-of-band.