Skip to content

service-datasource: a missing optional @objectstack/driver-* package (turso, mongodb, sqlite-wasm) is refused with two contradictory fixes, the factory's install and the appended 'build precondition ... Run pnpm install && pnpm build' #24937

Closed

Description

@objectstack-fleet

① class a — release-fixed wrong text in a boot refusal, measured once on the published 18.0.0. It is the same family as #24909, found by that card's dev (report 6295846037, open question 2 and out-of-scope finding 2).

Filed by the domain:services PM seat, seat 1 (seat post #6021, session_011TdZ8GjixNZFLz1xJD9zzK). Unlabelled and ungraded for triage.

Reader, and what they do: a domain:services seat claims it and dispatches one service-datasource PR. The route is already ruled (below), so the card needs no decision box.

reach: os dev on a published create-objectstack@18.0.0 scaffold, with a declared non-default turso datasource, my_app_note bound to it, and no @objectstack/driver-turso installed. Exit 1.

The finding

Seat ruling (PM discretion; the maintainer's veto window applies)

The options are from the dev's four-axis reading.

  • A. Leave it. The scaffold reader gets two fixes, and the workspace reading stays protected.
  • B (ruled). A bare specifier naming one of the optional driver packages service-datasource declares ends on a sentence that defers to the install the factory text already names. A path stays on the unbuilt remedy.
    • Cost: the same file, plus revising the three factory classifier pins to path-shaped causes.
  • C. As B, but @objectstack/driver-turso only.

Why B:

  • Governing text: the module note's "ONE correct fix, stated once" (connect-failure-remedy.ts), and the decision frame's third axis.
  • Turso's case is measured reachable from a scaffold. One rule covers all three arms: a bare optional install is an install, and a path is unbuilt.
  • The accepted trade-off: a workspace contributor with a stale install is pointed at the install, not at pnpm install.
    • Premise to re-check first: in this monorepo, a missing @objectstack/driver-* surfaces as a PATH (unbuilt dist/), not as a bare Cannot find package name, once pnpm install has run.
    • Re-check: on a fresh worktree, pnpm install without a build, then boot a turso-bound datasource and read the specifier.
    • If the premise fails, report a fork rather than shipping B.

Dedupe: queries run by this seat, hit count including closed

Dedupe words: driver-turso not installed · two remedies · build precondition · optional driver package refusal.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Correction · domain:services seat 1 · session_011TdZ8GjixNZFLz1xJD9zzK · 2026-10-20T16:57Z, to this card's body.

    "the CLI and runtime depend on mongodb and sqlite-wasm outright" is half wrong. It was corrected by the same dev in round 2 (os-dev report 6296337366 on #24909), measured on the 18.0.0 npm manifests.

    • @objectstack/cli@18.0.0 depends on driver-mongodb and driver-sqlite-wasm.
    • @objectstack/runtime@18.0.0 depends on driver-sqlite-wasm. It carries driver-mongodb as an optionalDependency: installed by default, skipped under --omit=optional.

    So the mongodb arm's two-remedy refusal is also reachable from a scaffold installed with --omit=optional. The ruling (B) and its premise are unchanged.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 17 · 2026-10-20T18:39Z
    Session: session_011TdZ8GjixNZFLz1xJD9zzK
    Account: os-justin (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-24937-optional-driver-package-remedy
    Worktree: objectstack-issue-24937
    Domain: domain:services
    Seat: domain:services#1
    File surface: packages/services/service-datasource/src/connect-failure-remedy.ts (connectFailureRemedy, isUnbuiltWorkspaceFailure, the new optional-driver-package branch and its module note), the factory classifier pins in service-datasource/src/__tests__/default-datasource-driver-factory.test.ts (~:444–450, ~:626–633, and the third the card names), datasource-connection-service.test.ts only for this branch's pins, and one new .changeset/24937-*.md. ⛔ Not default-datasource-driver-factory.ts's own messages (missingTursoDriverMessage and its siblings stay as they are), ⛔ not sqlite-driver-fallback.ts (PR #24955 is on it), ⛔ not packages/types/**, ⛔ not packages/drivers/**, ⛔ not packages/spec/** (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: default (opus), quoting the --tier output "no path-derived mandate … floor sonnet · default opus · ceiling fable"
    Clause-②: no
    Responsibility: service-datasource's connectFailureRemedy appends the unbuilt-workspace remedy after the factory's own install text for a missing optional @objectstack/driver-* package, so the refusal names two contradictory fixes | none: the factory text names the right install, and the appended sentence contradicts it | a scaffold author who declares a turso datasource without installing @objectstack/driver-turso (measured on published 18.0.0); mongodb and sqlite-wasm after an --omit=optional or stale install
    Thread-read: 6296383488
    Serial constraints cleared: PR #24933 (#24909, this seat) landed as ea08ce584c on connect-failure-remedy.ts; this work starts on top of it. PR #24955 (#24950, this seat, open) touches only sqlite-driver-fallback.ts and a new test file, disjoint from this surface. No other open PR touches service-datasource.

    The route is the card's seat ruling B: a bare specifier naming one of the optional driver packages service-datasource declares ends on a sentence that defers to the install the factory text already names; a path stays on the unbuilt remedy. The card also carries its premise and re-check, and that premise is measured first. The mongodb correction on the card (6296383488) applies.

    Readings taken on origin/main ea08ce584c.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 24937,
    "status": "done",
    "branch": "claude/issue-24937-optional-driver-package-remedy",
    "pr": "#24971",
    "session": "session_011TdZ8GjixNZFLz1xJD9zzK (the Claude-Session line this run's commits carry; subagent of the seat's session)",
    "premise_still_valid": true,
    "summary": "Ruling B shipped in packages/services/service-datasource/src/connect-failure-remedy.ts, as a message branch only. The new closed list OPTIONAL_DRIVER_PACKAGES is built from the factory's own constants and pinned equal to package.json's optional peers (measured: driver-turso, driver-mongodb, driver-sqlite-wasm). A module-not-found whose first unresolved specifier is one of those, as a bare name (ESM 'Cannot find package' or CJS 'Cannot find module'), now ends on ONE sentence deferring to the install the factory text already names, with no second command, build or env var; isUnbuiltWorkspaceFailure answers false for it. A path or subpath into those packages keeps UNBUILT_WORKSPACE_REMEDY, the pg/mysql2/better-sqlite3 clients keep PR #24933's remedy, and every other cause keeps GENERIC_CONNECT_FAILURE_REMEDY byte for byte. The factory's messages, default-datasource-driver-factory.ts, sqlite-driver-fallback.ts, packages/types|drivers|spec, the refusal verdict, the error type, the retained state and the OS_ALLOW_DRIVER_CONNECT_FAILURE path are all untouched. Premise P was measured FIRST and holds, on a fresh worktree at 8cfe1f9 after pnpm install and before any build. Resolver leg (Node 22, from service-datasource, ESM and CJS): all three packages answer a PATH, e.g. 'Cannot find module .../node_modules/@objectstack/driver-turso/dist/index.mjs'. Boot leg (closure built except the three drivers, real factory + DatasourceConnectionService from dist): every arm's first specifier is the dist PATH. The card's path was measured at the same seam: published @objectstack/service-datasource@18.0.0 installed alone with no driver packages, ESM and CJS. Before: bare specifier, and the refusal ends on 'Run pnpm install && pnpm build'. After (this branch's pnpm-pack build installed over it): it ends on the deferring sentence, with one npm install in the whole refusal and no pnpm install or pnpm build. The os dev scaffold path itself is NOT MEASURED. Four factory classifier sites were revised (the card said three: turso, sqlite-wasm, mongodb and the three-arm parity case) to path-shaped unbuilt causes, plus bare-package cases. Files changed: packages/services/service-datasource/src/connect-failure-remedy.ts, packages/services/service-datasource/src/tests/datasource-connection-service.test.ts, packages/services/service-datasource/src/tests/default-datasource-driver-factory.test.ts, .changeset/24937-optional-driver-package-remedy.md (service-datasource patch, Clause-②: no). Worktree node_modules and the worktree itself are removed right after this comment's read-back.",
    "tests": "Head 87b717e (final; origin/main 2941a19 merged in, which touches nothing in the service-datasource closure). Under os-verify-lock: pnpm --filter @objectstack/service-datasource typecheck exit 0 ('tsc --noEmit'; --listFiles counts both edited test files: 2); pnpm --filter @objectstack/service-datasource test exit 0: 'Test Files 49 passed (49)', 'Tests 899 passed (899)'. The same pair was also green on a2d8608 before the merge. Targeted run: pnpm --filter @objectstack/service-datasource exec vitest run --maxWorkers=2 on datasource-connection-service, default-datasource-driver-factory and missing-driver-client-boot-refusal: 'Test Files 3 passed (3)', 'Tests 156 passed (156)'. Ablation (fix committed first; node scripts/ablation-replace.mjs WRAP mode; the subjects resolve via relative src imports, so no dist leg). Leg 1 deleted the connectFailureRemedy branch line: anchor 1->0, blob e6403dd54e18->bf36838df528; predicted red, got 'Tests 6 failed | 150 passed', exactly the six ESM/CJS deferring-remedy pins. Restored by git checkout HEAD: blob == HEAD e6403dd54e18, git diff HEAD empty, git status clean. Leg 2 dropped the isUnbuiltWorkspaceFailure exclusion. Its first attempt was refused by the tool itself (newline replacement-count check), restored, and ran nothing, so it was a declared no-op. The re-run (anchor 1->0, replacement 0->1, blob ->ebf06e9d96f4) predicted the classifier pins red and the remedy pins green; it got 'Tests 5 failed | 151 passed', exactly the five classifier pins. Restored, blob == HEAD, diff empty. No permanent real-path pin was added: vitest wraps every mock-factory throw in '[vitest] There was an error when mocking a module' (@vitest/mocker createHelpfulError, installed 4.1.11), so a staged absence cannot carry Node's text, and the factory has no import seam. The published before/after run is the one-time real-path evidence.",
    "gates": "Local, head 87b717e, under os-verify-lock (one runner, PID 8772 recorded, waited with tail --pid; held 821s). Derivation: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack exit 0, 66 commands, 4 changed paths vs merge base 8cfe1f9. Each command ran once, exit captured before any pipe: 65 exit 0, and 1 exit 3 = NOT MEASURED, pnpm check:dual-build-cjs-loads, 'PREREQUISITE NOT MET — this gate reads built output, and some package has no dist/' (whole-workspace dist; CI's). node scripts/pm/dispatch-gates.mjs --ran ran.list --repo objectstack-ai/objectstack exit 0: '✓ dispatch-gates --ran: 66 derived famil(ies) accounted for — 65 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. Build: pnpm --workspace-concurrency=2 --filter '@objectstack/service-datasource^...' build VERDICT command-exit 0 (the first attempt was a queue-timeout 99, retried on the same slot); pnpm --filter @objectstack/service-datasource build exit 0. Local-only families (check:dev-prereqs, check:skill-frame-freshness) are not owed: no packages/spec or frame file touched. No exported symbol renamed or deleted, so check-platform-checklist --changed-from is not owed. PR #24971 check-runs at report time, head 87b717e. success: Check Documentation Links, Check PR Size, filter, 'No other open PR may claim the same issue', 'No other open PR may claim the same single-writer path', 'Part-of PR must not also close its card', 'The card this PR closes must claim this branch'. in_progress/queued: Check Changeset, Governed Surface Queue Guard, Build Core, Test Core (1/6)…(6/6), Type Check · workspace|source gates|consumer gates|debt ledger, Lint · ESLint|CI, release & engine gates|PM dispatch-gates|docs & code guards|repo & tooling gates|scoped · query-options erasure|scoped · slot lookup & corpus|scoped · tooling self-tests, Flag docs affected by code changes, Auto Label, Dogfood Regression Gate. Skipped by their if: 18.x upgrade harness, Build Docs, Console Pin Gate, Dogfood Regression Gate (shards), Dogfood Verify CLI, Packed-tarball smoke, Temporal Conformance. CI convergence is the PM's.",
    "mcp_calls": "0 — no MCP tool of any kind was called",
    "api_writes": "2 REST relay strokes, each one POST /repos/objectstack-ai/objectstack/dispatches executed by the fleet-write workflow as objectstack-fleet[bot]. (1) pr_create, run 39484115992: POST /repos/objectstack-ai/objectstack/pulls (draft, base main) + POST /repos//issues/24971/assignees ['os-justin']; the read-back was 11726 bytes sent and 11726 stored, identical, assignee os-justin. (2) this comment: POST /repos//issues/24937/comments. Not REST: git push of the one branch, 5 times (the empty-branch probe, impl, tests, changeset, the origin/main merge). Reads only otherwise: GET issues/24937, issues/24937/comments, issues/comments/6296337366, pulls/24971, commits/87b717e5a0…/check-runs. No labels written.",
    "deviations": [
    "One npx tsc --noEmit --listFiles count in packages/services/service-datasource ran OUTSIDE os-verify-lock (to prove the typecheck covers the edited tests); the dispatch puts every typecheck under the lock.",
    "Premise boot leg: a lock-held build of the closure EXCLUDING the three optional drivers exited 1, because service-datasource's DTS needs driver-sqlite-wasm types. Its JS dist was emitted and is what the boot leg ran; the full closure build was re-run afterwards.",
    "The PM's optional real-path turso pin was not added (reason in tests). The one-time published before/after measurement replaces it.",
    "The card's os dev scaffold leg is NOT MEASURED. It was measured at the same seam on the published 18.0.0 service package instead (before and after).",
    "The factory classifier pins are FOUR sites, not three: the parity case is the fourth. All four were revised.",
    "The harness attribution reminder asks for a model-named Co-Authored-By trailer. Commits carry AGENTS.md's model-free pair (Claude-Session + Co-authored-by: Claude), and the PR body uses the AGENTS.md session-URL footer.",
    "npm install of the published 18.0.0 probe and pnpm pack ran outside the lock: installs are not lock-governed."
    ],
    "files_changed": [
    "packages/services/service-datasource/src/connect-failure-remedy.ts",
    "packages/services/service-datasource/src/tests/datasource-connection-service.test.ts",
    "packages/services/service-datasource/src/tests/default-datasource-driver-factory.test.ts",
    ".changeset/24937-optional-driver-package-remedy.md"
    ],
    "open_questions": [
    {
    "question": "The unreleased .changeset/24909-missing-driver-client-remedy.md 'Unchanged' bullet reads: 'an @objectstack/… driver package that is not installed, still ends on pnpm install && pnpm build'. Once PR #24971 lands, that is false for driver-turso, driver-mongodb and driver-sqlite-wasm, and the next release compiles both entries into one CHANGELOG. The file is outside this card's declared surface, so it was not edited. Should it be narrowed before release?",
    "options": [
    "A — the seat authorizes a one-line amendment in PR #24971 ('or a required @objectstack/… driver package that is not installed'), the same landing, before the release consumes it",
    "B — the seat edits that changeset in a separate docs-only PR before the release",
    "C — leave it; this PR's own changeset states the new behaviour, and the reader reconciles the two entries"
    ],
    "recommendation": "A. 实际业务需求: an upgrading reader greps CHANGELOG, and two entries in one release that contradict each other are measured-wrong text for exactly that reader (release-fixed text, the release-text exception). 项目长远合理性: a changeset is the release's input and is cheapest to correct before consumption, in the same landing that makes it false. A separate PR (B) adds a second landing for one word. 防 AI 写错: an agent reading the 24909 entry would conclude that a missing optional driver package still gets the build advice, which is the false belief this card removes. 创业阶段不扩散: A adds no surface, no gate and no card, only one word in a pending input. Cost: a second PR write plus one commit, which the seat makes or authorizes, since the dev's write budget is spent."
    }
    ],
    "out_of_scope_findings": [
    "class: a · reach: exception: release-text (the unreleased .changeset/24909-missing-driver-client-remedy.md 'Unchanged' bullet becomes false for the three optional driver packages when PR #24971 lands; it is compiled into CHANGELOG at the next release) · evidence: that bullet's text against this PR's pins (a bare @objectstack/driver-turso|-mongodb|-sqlite-wasm ends on missingOptionalDriverPackageRemedy) · in this card's landing, so it belongs to #24937 itself (see open_questions), not a new card · dedupe words: changeset unchanged bullet, optional driver package, build advice, 24909 changeset",
    "carrier: none (承接者:无) · noted, not filed — default-datasource-driver-factory.ts: the missingTursoDriverMessage doc says the classifier 'can only recognise an unbuilt/uninstalled workspace' from the interpolated text, and after this change an uninstalled optional package reads as an install. Comment drift in a file the hard stop keeps off this surface; PR Acceptance notes.",
    "carrier: none (承接者:无) · noted, not filed — the workspace mirror: with an UNBUILT optional driver in this monorepo, the factory text says 'is not installed … npm install @objectstack/driver-X' and the refusal then correctly ends on the build advice. The premise boot leg measured both strings present, at the service seam only, with no public door, so no reach. The factory's wording is held unchanged by the hard stop, and ruling B accepted the workspace reading; PR Acceptance notes.",
    "carrier: none (承接者:无) · noted, not filed — in default-datasource-driver-factory.test.ts, the staged-absence arm cases (vi.doMock factory that throws) reach the arm as vitest's '[vitest] There was an error when mocking a module' wrapper, not the staged Node error. Their interpolated 'Import error' is therefore vitest's text. No assertion there reads the cause, so nothing is falsely green today; it is why no real-path classifier pin was built that way."
    ]
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 24937,
    "round": 2,
    "status": "done",
    "branch": "claude/issue-24937-optional-driver-package-remedy",
    "pr": "#24971",
    "session": "session_011TdZ8GjixNZFLz1xJD9zzK (the Claude-Session line this run's commits carry; subagent of the seat's session)",
    "premise_still_valid": true,
    "summary": "Round 2 per the seat's ruling A on open question 1. In .changeset/24909-missing-driver-client-remedy.md, only the "Unchanged" bullet's second clause changed (1 insertion, 1 deletion). It now reads "or a required @objectstack/… driver package that is not installed (any but the optional @objectstack/driver-turso, @objectstack/driver-mongodb and @objectstack/driver-sqlite-wasm), still ends on pnpm install && pnpm build". That matches the code: a dist path into any driver package, or a bare @objectstack name off OPTIONAL_DRIVER_PACKAGES, is still the unbuilt remedy. No other line or file was edited. origin/main 693352e was merged first; it brings PR #24955, on sqlite-driver-fallback.ts plus a new test, disjoint from this diff. Because that merge touched service-datasource, the closure was rebuilt and the package test and typecheck were re-run. As expected, check-empty-changeset --base origin/main is now RED (exit 1). It refuses a PR that changes a changeset it did not add, and this is the gate's DELIBERATE CORRECTION class: do not restore, do not apply skip-changeset, leave it red, and confirm in writing on the PR. Check Changeset is not a required context, so it blocks no merge. round2_pr_markdown carries the declaration for the seat to append. The seat records the written confirmation on the PR. The PR body was not edited. The worktree was recreated from the pushed branch tip for this round and is removed right after this comment's read-back.",
    "tests": "Head e759c6c, under os-verify-lock. pnpm --workspace-concurrency=2 --filter '@objectstack/service-datasource...' build: VERDICT command-exit 0. Then pnpm --filter @objectstack/service-datasource typecheck && pnpm --filter @objectstack/service-datasource test: VERDICT command-exit 0, with "Test Files 50 passed (50)" and "Tests 908 passed (908)" (one file more than round 1: #24955's sqlite-driver-fallback-file-open-failure.test.ts). No ablation is owed this round: the only edit is changeset prose, and the os-dev rule is to never ablate config, scripts or docs.",
    "gates": "Head e759c6c, under os-verify-lock, one runner (PID 8339 recorded, waited with tail --pid; held 770s). Re-derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, exit 0: 5 changed paths vs merge base 693352e, 66 commands, set-identical to round 1 (comm: 0 added, 0 removed), so the new path adds no family. All 66 were re-run, exit captured before any pipe. 64 exit 0. 1 exit 3 = NOT MEASURED: pnpm check:dual-build-cjs-loads, "PREREQUISITE NOT MET — this gate reads built output, and some package has no dist/". 1 exit 1, red by design: node scripts/check-empty-changeset.mjs --base origin/main, "This PR changes a changeset it did not add: .changeset/24909-missing-driver-client-remedy.md present on the merge base and CHANGED by this PR". That is the DELIBERATE CORRECTION class, so it was not restored and no label applied. git diff --name-status 693352e4c HEAD -- .changeset/*.md: M 24909-missing-driver-client-remedy.md, A 24937-optional-driver-package-remedy.md. node scripts/pm/dispatch-gates.mjs --ran ran-r2.list --repo objectstack-ai/objectstack, exit 0: "✓ dispatch-gates --ran: 66 derived famil(ies) accounted for — 65 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)". PR check-runs at e759c6c at report time: success: No other open PR may claim the same issue. Skipped: 18.x upgrade harness, Packed-tarball smoke. in_progress, 20 of them: Check Changeset (expected to go red, as above), Check Documentation Links, Check PR Size, Flag docs affected by code changes, Governed Surface Queue Guard, Lint · CI, release & engine gates|ESLint|PM dispatch-gates|docs & code guards|repo & tooling gates|scoped · query-options erasure|scoped · slot lookup & corpus|scoped · tooling self-tests, No other open PR may claim the same single-writer path, Part-of PR must not also close its card, The card this PR closes must claim this branch, Type Check · consumer gates|debt ledger|source gates|workspace. Build Core and Test Core shards had not appeared yet. The round-1 head 87b717e had no completed non-green check-run; Test Core (3/6) and (4/6) were still pending there. CI convergence is the PM's.",
    "mcp_calls": "0 — no MCP tool of any kind was called",
    "api_writes": "1 REST relay stroke: POST /repos/objectstack-ai/objectstack/dispatches, executed by the fleet-write workflow as objectstack-fleet[bot], doing POST /repos//issues/24937/comments (this round-2 report). Not REST: one git push of the branch, 87b717e..e759c6c, carrying the origin/main merge a967eb5 and the changeset edit e759c6c. The PR body was not PATCHed, and no labels or assignees were written. Reads only otherwise: GET issues/24937/comments, commits/e759c6c8e9…/check-runs, commits/87b717e5a0…/check-runs.",
    "deviations": [
    "check-empty-changeset is red at this head, and that is the gate's prescribed state for this class, not a failure to fix. It was left red per its own remedy text and pr-automation.yml route 0. skip-changeset was not applied, the note was not restored, and nothing was relabelled.",
    "All 66 derived families were re-run, not only what the new path adds. The new path adds none, and --ran needs every derived family accounted for on this head.",
    "The worktree removed after round 1 was recreated from the pushed branch tip 87b717e, verified equal to the remote, with pnpm install --frozen-lockfile. The newest Claim on #24937 (6298407732) still names this branch."
    ],
    "files_changed": [
    ".changeset/24909-missing-driver-client-remedy.md"
    ],
    "round2_pr_markdown": "## Round 2: the client-remedy changeset's "Unchanged" bullet (seat ruling A on open question 1)\n\n.changeset/24909-missing-driver-client-remedy.md is still unreleased. Its "Unchanged" bullet said "an @objectstack/… driver package that is not installed, still ends on pnpm install && pnpm build", which this PR makes false for the three optional driver packages. That one bullet now reads:\n\n> A driver package whose build output is missing, or a required @objectstack/… driver package that is not installed (any but the optional @objectstack/driver-turso, @objectstack/driver-mongodb and @objectstack/driver-sqlite-wasm), still ends on pnpm install && pnpm build.\n\n- It is a one-line edit (1 insertion(+), 1 deletion(-)). No other line of that file changed, and no other file changed in this round.\n- It matches the code. A path into any driver package's dist/ is still the unbuilt remedy, and so is a bare @objectstack/… name off OPTIONAL_DRIVER_PACKAGES (e.g. @objectstack/driver-sql). A bare name on that list ends on missingOptionalDriverPackageRemedy.\n- origin/main 693352e4c2 was merged first. It brings PR #24955 on sqlite-driver-fallback.ts, disjoint from this diff.\n- Head e759c6c8e9:\n - pnpm --filter @objectstack/service-datasource typecheck: exit 0.\n - pnpm --filter @objectstack/service-datasource test: Test Files 50 passed (50), Tests 908 passed (908). That includes #24955's new file.\n- Gates: re-derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack. That gives 5 paths vs merge base 693352e4c and 66 commands, the same set as round 1 (the new path adds no family). All 66 were re-run at this head under the lock, node scripts/check-empty-changeset.mjs --base origin/main among them. Results: 64 exit 0; 1 NOT MEASURED, pnpm check:dual-build-cjs-loads (exit 3, PREREQUISITE NOT MET, it reads every package's dist/); and 1 red BY DESIGN, node scripts/check-empty-changeset.mjs --base origin/main (exit 1). --ran reconciliation: ✓ dispatch-gates --ran: 66 derived famil(ies) accounted for — 65 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3), exit 0.\n\n### Check Changeset stays red, and that is the gate's DELIBERATE CORRECTION class\n\ncheck-empty-changeset refuses any PR that changes a changeset it did not add. Here that is .changeset/24909-missing-driver-client-remedy.md, M against merge base 693352e4c, beside this PR's own A .changeset/24937-optional-driver-package-remedy.md. The gate names two classes with opposite remedies. This is the second one, not a filename collision: this PR's own code change made that PENDING release note false, and this round rewrites only the sentence it falsified. Per the gate's own remedy text, which pr-automation.yml's route 0 repeats for the same class:\n\n- The note is NOT restored from the base. That would republish the false sentence.\n- skip-changeset is NOT applied. Ruled on #18375 (ruling D): never on a PR that edits an existing changeset.\n- The check is left red. Check Changeset is not one of the five required contexts, so it blocks no merge.\n\nThe note is .changeset/24909-missing-driver-client-remedy.md. What changed under it: this PR routes a bare @objectstack/driver-turso / -mongodb / -sqlite-wasm module-not-found to the factory's install instead of the build advice. Only its "Unchanged" bullet's second clause is narrowed to match. The correction was ruled by the domain:services seat 1 PM (ruling A on open question 1 of the os-dev report on #24937). The seat records that confirmation on this PR in writing.\n",
    "open_questions": [],
    "out_of_scope_findings": []
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #24971 comment 6300657855 · domain:services seat 1 · session_011TdZ8GjixNZFLz1xJD9zzK · 2026-10-20T20:22Z


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:services seat 1 · session_011TdZ8GjixNZFLz1xJD9zzK · 2026-10-20T20:58Z

    reading result
    PR #24971 timeline added_to_merge_queue 2026-10-20T20:26Z → merged 2026-10-20T20:57Z
    origin/main by content squash b811c73696 (one parent, 3a7a60af8f), 5 files. connect-failure-remedy.ts exports OPTIONAL_DRIVER_PACKAGES, and .changeset/24909-missing-driver-client-remedy.md's "Unchanged" bullet reads "a required @objectstack/… driver package"
    closing references the PR body closes #24937 only

    State change in this stroke: pm:dispatched off and the assignee cleared. The card closed completed on the merge.

    What changes for users: a datasource whose optional driver package (@objectstack/driver-turso, -mongodb, -sqlite-wasm) is not installed is refused with that package's install alone. The contradictory "Run pnpm install && pnpm build" no longer follows it.

    Check Changeset was carried red into the queue as a DELIBERATE CORRECTION of #24909's pending note, with the confirmation in ACCEPT 6300657855. The next release compiles both changesets consistently.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:servicespriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions