Repository navigation
feat: refresh the accepted snapshot to f9bc223 - #63
Merged
Merged
Conversation
Upstream renamed its workspace package scope from @opencode-ai to @OpenCode across 1,858 files, which moved the context the SSE Restore patch depends on and left refresh-spec refusing to apply it. The patch is rebased onto the new revision: its generate-openapi.ts hunk is byte-identical to the one it replaces, because that file did not move, and the session.ts hunk changes only the three import lines it uses as context. The repair predicate still holds, since raw upstream carries no contentSchema, so this is a rebase rather than the retirement the upstream fix will eventually force. The document delta is additive. The operation set digest is unchanged, so all 140 operations and their bodies are the ones already accepted and the hand-authored admission and curation lists need no rows. Three components arrive: Provider.Compaction, a mode-tagged union, plus Session.ProviderContext and its provenance record. Six existing components gain an optional property referencing them, and none of those properties joins a required set. Regeneration follows that delta exactly. IProviderCompaction and its two variants land beside the usual unknown carrier, the two context records are emitted, and four models gain a nullable property. The public API baseline moves by sixty-eight added lines and no removed line, so a nightly consumer meets no compile break. Every watched source was reviewed rather than re-pinned blindly. Sixteen moved by hash and every one of those changes is the scope rename, four did not move, and the single semantic change is a comment in pty-binding.ts recording that the pty daemon package deliberately keeps its old scope. The hand-written PTY and persistent-PTY doors therefore rest on unchanged upstream behavior, and all twenty-one anchors still match.
The refreshed pin renames the CLI package to @opencode/cli along with the rest of upstream's workspace scope, which reads like an instruction to install something that does not exist yet. npm's @OpenCode scope publishes a reserved placeholder on latest and moves only beta and dev, so @opencode-ai/cli@next remains the pre-release a consumer can actually install. The snapshot now says both, because the identity table names the channel rather than the source package and the two have diverged.
The refreshed pin renames upstream's workspace scope from @opencode-ai to @OpenCode, and the persistent simulation host imports five of those packages by name. Its imports still carried the old scope, so the pinned server exited before readiness with "Cannot find module '@opencode-ai/util/effect/layer-node'" and every test that needs a real server failed. A local run did not catch this. The submodule moves under an existing node_modules tree, and the workspace symlinks from the previous revision are not pruned by bun install, so the old scope still resolved on a developer machine that had installed before the rename. Hosted CI installs into a clean checkout and failed immediately, which is the honest signal; the local suite only agreed once those stale links were removed and the dependencies reinstalled.
The scope rename that broke the simulation host reached the suite as a server that exited before readiness, and nothing before that point had a reason to object. The refresh receipt watches the upstream sources the hand-written doors read; it does not watch the module identifiers a fixture writes, so a fixture that imports upstream by name is coupled to the snapshot with no guard on the coupling. This adds that guard. Every embedded JavaScript fixture is scanned for the opencode-owned package names it writes, and each one has to be a name the accepted snapshot declares: a workspace package under the submodule, or a dependency one of those manifests names. A rename now fails as "fixture names '@opencode-ai/util'" rather than as a launcher timeout. It reads the snapshot on disk rather than an installed tree deliberately. Moving the submodule does not prune node_modules, so a machine that installed before a rename keeps the previous revision's workspace links and resolves the old names anyway; that is exactly how the local suite agreed while hosted CI did not. The check is independent of install state, so both agree.
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.
Upstream renamed its workspace package scope from
@opencode-aito@opencodeacross 1,858 files, which moved the context the SSE Restore patch depends on and leftrefresh-specrefusing to apply it. The patch is rebased onto the new revision: itsgenerate-openapi.tshunk is byte-identical to the one it replaces, because that file did not move, and thesession.tshunk changes only the three import lines it uses as context. The repair predicate still holds, since raw upstream carries nocontentSchema, so this is a rebase rather than the retirement the upstream fix will eventually force.The document delta is additive. The operation set digest is unchanged, so all 140 operations and their bodies are the ones already accepted and the hand-authored admission and curation lists need no rows. Three components arrive:
Provider.Compaction, amode-tagged union, plusSession.ProviderContextand its provenance record. Six existing components gain an optional property referencing them, and none of those properties joins a required set.Regeneration follows that delta exactly.
IProviderCompactionand its two variants land beside the usual unknown carrier, the two context records are emitted, and four models gain a nullable property. The public API baseline moves by 68 added lines and no removed line, so a nightly consumer meets no compile break.Every watched source was reviewed rather than re-pinned blindly. Sixteen moved by hash and every one of those changes is the scope rename, four did not move, and the single semantic change is a comment in
pty-binding.tsrecording that the pty daemon package deliberately keeps its old scope. The hand-written PTY and persistent-PTY doors therefore rest on unchanged upstream behavior, and all 21 anchors still match.Gates: analyzers, Release build, both format passes,
generate --verify,refresh-spec --verify, and 5,134/5,134 tests including the live lane against the new revision's server.