Skip to content

docs(spec): qualify the four datasource pool.* liveness rows by driver (#6214) - #7242

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-6214-pool-liveness-notes
Aug 10, 2026
Merged

docs(spec): qualify the four datasource pool.* liveness rows by driver (#6214)#7242
os-zhuang merged 1 commit into
mainfrom
claude/issue-6214-pool-liveness-notes

Conversation

@os-zhuang

@os-zhuang os-zhuang commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

The spec half of the #5931 ruling. Ledger-only diff — one file, packages/spec/liveness/datasource.json, ten lines. Zero behaviour change, no schema change.

Premise check (fresh origin/main @ f40c5b4)

Both halves verified before any edit:

  1. The four rows still lacked the qualification. pool.min / pool.max / pool.idleTimeoutMillis / pool.connectionTimeoutMillis each read "status": "live" with a one-clause note ("knex pool floor.", "passed through to knex verbatim.", …) and no mention of any driver arm. Not already repaired.
  2. The datasource pool 声明在 memory 驱动臂同样被静默丢弃(#5714 的姊妹臂,裁决未覆盖) #5931 / datasource pool 声明在 sqlite / sqlite-wasm 驱动臂被静默丢弃(pg / mysql 生效) #5714 landed state is as the card describes, with one addition the card could not have known. POOL_UNSUPPORTED_DRIVER_IDS is ['memory', 'sqlite', 'sqlite-wasm'] — the memory arm did join the rejection set, so the card's fallback ("if it did not, name the silent drop") does not apply to memory. It applies to turso, which the landed module names itself.

packages/services/service-datasource/src/__tests__/datasource-pool-support.test.ts40/40 pass, including the pin expect([...POOL_UNSUPPORTED_DRIVER_IDS]).toEqual(['memory', 'sqlite', 'sqlite-wasm']) (:46).

#5931's final state, with file:line evidence

Read off origin/main, not paraphrased from the issue bodies:

arm what happens to a declared pool evidence
postgres honoured — buildSqlPool(spec)SqlDriver packages/services/service-datasource/src/default-datasource-driver-factory.ts:188-198, applied :403
mysql honoured — same builder same, applied :458
mongodb min / max onlyminPoolSize / maxPoolSize; nothing else in the block is read default-datasource-driver-factory.ts:477-483
memory loud authoring error (#5931, maintainer ruling 2026-08-07) datasource-pool-support.ts:79, reason :142-146
sqlite / sqlite-wasm loud authoring error (#5714, ruling 2026-08-06 option B) datasource-pool-support.ts:79, shared reason :122-126
turso still dropped in silence — needs its own ruling datasource-pool-support.ts:90-99
unknown ids (com.vendor.snowflake) deliberately not judged datasource-pool-support.ts:101-105

The rejection is thrown at every door a pool block can enter through: the Setup wizard's create/update (datasource-admin-service.ts:243, :314), the boot-time auto-connect pre-pass (datasource-connection-service.ts:508), and the factory's last door (default-datasource-driver-factory.ts:374).

The four rows, before → after

Every row keeps "status": "live" — the verdict was never wrong, only unqualified. What changes is that each row now states where it is live, and the pool block gains a container note carrying the full record (the ssl block's existing precedent in this same file).

row before after (summary)
pool.min "knex pool floor. Live only since #4465 …" + honoured on postgres/mysql (:191) and as Mongo's minPoolSize (:482); authoring ERROR on memory/sqlite/sqlite-wasm (#5714/#5931); silent on turso
pool.max "knex pool ceiling; also mapped onto the Mongo client's maxPoolSize (#4465)." + same driver qualification as min
pool.idleTimeoutMillis "passed through to knex verbatim." + SQL arms onlymongodb takes min/max and nothing else, so this key reaches nothing there; authoring ERROR on the three rejected arms; silent on turso
pool.connectionTimeoutMillis "mapped onto knex's acquireTimeoutMillis …" + same qualification as idleTimeoutMillis

Two deliberate choices worth review:

Stale evidence line numbers were re-cited at the same time — the four rows pointed at :181-184, which is now the JSDoc above buildSqlPool; the real reader lines are :191-196. The liveness gate resolves paths, not lines, so this was silently rotting.

Gates

gate result
packages/spec check:liveness (the liveness author-lint) ✓ — datasource 30 classified (live 30); 349/349 repo-local evidence paths resolve
packages/spec check:generated ✓ — 11/11 artifacts up to date (spec built first, per #7122)
@objectstack/service-datasource datasource-pool-support.test.ts ✓ 40/40 (premise evidence)
CI Spec property liveness

No changeset — skip-changeset label instead. Ledger prose releases nothing, which is route 2 of the Check Changeset gate's own two routes. The label was missing on the first push and the gate went red for exactly that reason; applied after, per the precedent this PR follows: PR #7179 (fix(spec): re-cite measured readers for 11 stale liveness-ledger rows, #7132/#7133, merged 2026-08-10) landed three ledger files the same way — no changeset, skip-changeset label. Route 3 (an empty-frontmatter changeset) is closed under #5471/#4898 and was not taken.

content/docs/releases/ and docs/adr/** untouched. No .zod.ts touched — no schema change was needed.

Closes #6214

…ver (#6214)

The spec half of the #5931 ruling. `packages/spec/liveness/datasource.json`
recorded `pool.min` / `pool.max` / `pool.idleTimeoutMillis` /
`pool.connectionTimeoutMillis` as unqualified `live`, which overstated the
landed state on three counts: three built-in driver arms now REJECT the block
loudly, `mongodb` reads only `min`/`max` out of it, and `turso` still drops it
in silence.

Each row now names its own qualification, and the `pool` block carries the
full record (the `ssl` block's precedent):

- honoured: `postgres` / `mysql` via `buildSqlPool(spec)`
  (default-datasource-driver-factory.ts:188-198, applied :403 / :458), and
  `mongodb` for `min`/`max` only → `minPoolSize`/`maxPoolSize` (:477-483);
- loudly rejected on `memory` / `sqlite` / `sqlite-wasm` —
  `POOL_UNSUPPORTED_DRIVER_IDS` (datasource-pool-support.ts:79), thrown at all
  four doors (#5714 for the SQLite pair, #5931 for `memory`);
- still dropped silently on `turso` (datasource-pool-support.ts:90-99) and for
  the two timeouts on `mongodb` — both named as such rather than left implicit.

Stale evidence line numbers on the four rows re-cited against the current
`buildSqlPool` body at the same time.

Ledger-only diff, zero behaviour change, no schema change. No changeset, per
the ledger-only precedent (#7133).

Closes #6214

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SsK4ETGEY1wKe2nmR4bXi4
@vercel

vercel Bot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 10, 2026 3:34am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/permissions/system-context.mdx (via packages/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

7 release-owned page(s) also reference the affected code. These are read-only:

  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

Copy link
Copy Markdown
Contributor Author

Check Changeset red — cause found, fixed with the skip-changeset label.

My error, not a flake. The gate offers two routes and I took neither: I concluded "no changeset" (correct — ledger prose releases nothing) but missed that route 2 requires the skip-changeset label to say so. Absent both, the gate is right to fail.

The precedent I cited in the original body was also cited imprecisely. PR #7179fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132/#7133), merged 2026-08-10, three ledger files, same shape as this one — carries the skip-changeset label and no changeset. That is the whole precedent; "#7133 landed with no changeset" was only half of it. Body corrected.

Route 3 (an empty-frontmatter changeset) was not taken and is closed anyway — #5471 rejects newly added ones, because an all-empty set makes changesets/action return in 0 seconds and stall the release silently and greenly (#4898).

Label applied. It fired a labeled event, and the newer Check Changeset run for this same SHA (27a4afa) is skipped — the gate's exemption path. The failed run above does not clear itself, as the gate's own log warns; the later run for that check name supersedes it. I'll re-verify the PR's combined state on my next check-in and push an empty commit to force a clean re-run if the stale red is still counted.

No code change was needed and none was made — git diff against origin/main is still exactly the ten lines in packages/spec/liveness/datasource.json.


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review August 10, 2026 04:55
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 10, 2026
Merged via the queue into main with commit 397e731 Aug 10, 2026
30 of 31 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-6214-pool-liveness-notes branch August 10, 2026 05:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[转移·spec] liveness datasource.json 的 pool 四行补按驱动限定注记(#5931 裁决的 spec 半边)

2 participants