Skip to content

feat: refresh the accepted snapshot to f9bc223 - #63

Merged
Blind-Striker merged 4 commits into
masterfrom
refresh/spec-f9bc223
Sep 8, 2026
Merged

Blind-Striker merged 4 commits into
masterfrom
refresh/spec-f9bc223

Conversation

@Blind-Striker

Copy link
Copy Markdown
Collaborator

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 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.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 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.

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.
@Blind-Striker
Blind-Striker merged commit 4eaf7a5 into master Sep 8, 2026
4 checks passed
@Blind-Striker
Blind-Striker deleted the refresh/spec-f9bc223 branch September 14, 2026 12:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant