Move inline specs to the blob table at boot on the libSQL hosts#968
Merged
Conversation
3ace36b to
bfcedc6
Compare
6eb9923 to
2536422
Compare
This was referenced Jun 12, 2026
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
executor-marketing | 7b1a1e3 | Commit Preview URL Branch Preview URL |
Jun 12 2026, 05:43 AM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
executor-cloud | 7b1a1e3 | Jun 12 2026, 05:43 AM |
Contributor
Cloudflare previewTorn down — the PR is closed. |
@executor-js/cli
@executor-js/config
@executor-js/execution
@executor-js/sdk
@executor-js/codemode-core
@executor-js/runtime-quickjs
@executor-js/plugin-file-secrets
@executor-js/plugin-graphql
@executor-js/plugin-keychain
@executor-js/plugin-mcp
@executor-js/plugin-onepassword
@executor-js/plugin-openapi
executor
commit: |
Cloud's databases were rewritten by the out-of-band migrate-specs-to-blobs script, but the libSQL hosts (local, selfhost) have no operator — their integration.config rows still inline multi-MB OpenAPI spec text and GraphQL introspection snapshots from before the blob seam existed. This adds the ledger counterpart: a shared migration body in the SDK (runSqliteConfigBlobMigration) that moves a named inline config field into the blob table under the runtime's exact naming (o:<tenant>/<plugin> namespace, <prefix>/<sha256> key) and rewrites the config to the content-hash pointer, all inside one transaction. The openapi and graphql plugins bind their field names and export ledger entries, registered in both apps' data-migration registries. Idempotent (pointer rows plan zero work, blob writes are content-addressed upserts), tolerant of a fresh database with no integration table, and stamped once by the ledger. With every host now converging on the pointer shape, the legacy inline-read paths in the plugins become removable.
2536422 to
7b1a1e3
Compare
RhysSullivan
added a commit
that referenced
this pull request
Jun 12, 2026
The eval harness's core capability — drive the real OpenCode binary with
the machine's subscription, hermetically, and read structured output — is
useful on its own, so pull it out of the eval-specific harness.
- e2e/src/clients/inference.ts: runInference({ model, prompt, mcp? }) →
{ answerText, events, toolNames, ... }. Hermetic OpenCode home with the
subscription credential copied in; MCP optional with a pluggable consent
strategy. No effect on the developer's own OpenCode state.
- e2e/scripts/infer.ts (+ `bun run infer`): the CLI an agent runs while
developing — `bun e2e/scripts/infer.ts -m opencode/glm-5.1 "..."`.
- evals/harness.ts is now a thin consumer: runTrial = runInference + the
selfhost cookie-consent strategy; grading vocabulary unchanged.
Also: drop the connect-handoff 'baseUrl resolved' check — running against
current main surfaced that integration-level baseUrl is override-only now
(per-operation baseUrl from the #968-970 storage refactors), so the check
asserted an obsolete field. Documented in EVALS.md. Switch the eval test
import to @effect/vitest per the no-vitest-import rule.
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.
What
Cloud's databases were rewritten by the out-of-band migrate-specs-to-blobs script, but the libSQL hosts (local, selfhost) have no operator — their
integration.configrows still inline multi-MB OpenAPI spec text and GraphQL introspection snapshots from before the blob seam existed.This adds the ledger counterpart: a shared migration body in the SDK (
runSqliteConfigBlobMigration) that moves a named inline config field into the blob table under the runtime's exact naming (o:<tenant>/<plugin>namespace,<prefix>/<sha256>key) and rewrites the config to the content-hash pointer, all inside one transaction. The openapi and graphql plugins bind their field names and export ledger entries (2026-06-12-openapi-spec-to-blob,2026-06-12-graphql-introspection-to-blob), registered in both apps' data-migration registries.Properties
integrationtable = nothing to migrate).blobtable specifically — correct for the libSQL hosts whose runtime blob backend is the FumaDB store. The D1 host (R2-backed blobs) deliberately does not register it.Why now
With every host converging on the pointer shape, the legacy inline-read paths in the plugins become removable — the next PR in this stack.
Testing
New ledger-migration tests: pointer rewrite + runtime blob naming round-trip, idempotence, foreign-row safety, cross-integration blob sharing, fresh-DB tolerance, ledger stamping. Full gates green.
Stack