Skip to content

feat(spec): comparand-type door — the accepted literal comparand set, enforced once at the shared compile face for all five drivers (#7872) - #8234

Merged
huangyiirene merged 7 commits into
mainfrom
claude/issue-7872-comparand-type-door
Aug 13, 2026
Merged

feat(spec): comparand-type door — the accepted literal comparand set, enforced once at the shared compile face for all five drivers (#7872)#8234
huangyiirene merged 7 commits into
mainfrom
claude/issue-7872-comparand-type-door

Conversation

@huangyiirene

Copy link
Copy Markdown
Collaborator

Fixes #7872

Implements the maintainer ruling on this card (comment 5265944890, 「同意你的决策」): the shared filter-compilation face in packages/spec defines the accepted literal comparand-type set as the measured superset — string | number | bigint | boolean | null | Date (#7956's divergence matrix; the "any JSON-representable literal" wording was rejected because bigint is not JSON-representable yet accepted by 4/5 drivers) and refuses everything else loudly at the compile face, with code: INVALID_FILTER + status: 400 + guidance naming the accepted set.

One PM mechanism assumption was falsified — the measured call graph, and the adjusted wiring

The dispatch assumed parseFilterAST is on every driver's path. Measured on this branch's base:

The object form is exactly how the #7956 matrix (and the mongo worst cell) arrives, so a door wired in parseFilterAST alone would have missed the dominant form — the NormalizedFilterSchema lesson again. The adjusted wiring keeps the ruling's substance intact:

Net: every platform path to every driver passes the door; parseFilterAST is now on the object form's path wherever it previously was at all. Flagged here rather than silently absorbed; if the PM reads assumption 1's STOP clause as outranking this, the wiring commit is cleanly separable.

The bigint cell — how the ruling's two sentences were reconciled

The ruling both (a) puts bigint in the accepted set and (b) says the memory BigInt crash cell "becomes a refusal". A bigint passed through verbatim still crashes mingo (Query.compileJSON.stringify), and driver-local patches are frozen (#5499) — so (a) and (b) cannot both be literal. The approved recommendation's own sentence ("mongo's silent-edit cell and memory's crash cell both die at the door without touching frozen drivers") is implementable, and that is what this PR does:

  • an exact-range bigint (|v| ≤ 2^53) is narrowed copy-on-write to its JS number at the door — the same declared-conversion pattern as RemoteTransport's Date → ISO — so no driver path ever sees a bigint, and the memory cell becomes a working compile (the conformance table pins {qty: {$eq: BigInt(100)}} matching its row on all five drivers);
  • a bigint beyond ±2^53 is refused loudly (precision loss must not answer silently — the exact evil this thread outlaws);
  • direct transport callers keep libsql's native bigint binding (remote-transport-comparand-refusal.test.ts's pin is untouched).

The #6915 citation in the ruling is a mis-cite (that card is driver-memory tenant isolation); the BigInt crash cell is this card's own memory×BigInt cell. Both readings are surfaced in the report's open_questions for the maintainer to confirm.

Both directions pinned — FILTER_COMPARAND_TYPE_CASES, run by all five drivers

New conformance table in spec/data (registered in scripts/check-driver-conformance.mjs; the matrix is now 45 covered / 0 DEBT / 0 exempt):

  • accepted direction: each of the six types compiles on every driver path — executed on better-sqlite3 (driver-sql), sql.js (driver-sqlite-wasm), libsql local (driver-turso), mingo (driver-memory), and — server-free, as on measure: how each driver answers the six non-JSON comparand types (#7872 restart condition b) #7956 and the sibling conformance suites, since a live mongod is unreachable in CI — translateFilter + the mongodb package's own BSON round trip (driver-mongodb). Stated in that suite as the accepted substitute.
  • refused direction: undefined (operator form, implicit form — the mongo worst cell — and as an $in member), function, Symbol, Map, Set, class instance, plain object in a scalar slot, oversized bigint — all refused at the door with the envelope, and the suites assert no driver ever runs (the engine suite pins zero driver reads/writes on refusal).
  • reverse-direction pins, so the door's work cannot be mistaken for driver changes: driver-memory pins that the direct-path bigint crash still exists (mingo unfixed, frozen); driver-mongodb pins that {qty: undefined} still BSON-encodes to {} = match everything on the direct path. Both notes say when to retire the pins.

SQL-family allowlists reconciled to the door, not duplicated

  • driver-sql isBindableComparand / isRenderableTextComparand now delegate type membership to isAcceptedFilterComparand; refusal messages quote ACCEPTED_FILTER_COMPARAND_TYPES_SENTENCE. Two recorded driver-local extras stay, each with its reason in place: the undefined → true arm (unreachable behind the drivers: undefined 比较数被发射器读作 null、却被守卫/校验读作「值」—— turso local 抛裸 knex 错、remote 静默答 IS NULL(实测,origin/main) #6050 walk, which owns the purpose-written undefined refusal) and ArrayBuffer.isView (blob bindables — a direct-caller surface the engine door does not admit; nothing on engine paths uses them, measured by grep and by the suites).
  • driver-turso serializeComparand delegates the scalar membership to the same predicate; its pinned refusal wording ("must be a string, number, bigint, boolean, null or Date") is now the shared constant, byte-identical, so reconciling changed no message.
  • Their ADR-0112 envelopes are untouched — the ruling's "keep their local raise but source the SET from the door" fallback was not needed beyond the two recorded extras above.

Boundaries the door deliberately does not judge (each has a recorded owner)

Changeset: minor, argued from the diff

Precedent #3746 (acceptance narrowing at a validation face, minor) fits what this diff does: no authorable key is removed, no export is removed, and every newly-refused input was measured answering a crash, a silent wrong row count, or a silent match-all — not a documented capability. The one previously-"working" behavior that narrows is mongo/memory deep-equality via $eq: {plain object} through engine paths (direct driver calls unchanged) — measured divergent 3-vs-2 across drivers, which is the divergence the ruling closes. #4583-major (removal of a declared key with migration prescription) does not describe this diff. Not declared-breaking ⇒ no ADR-0087 marker required; the changeset carries the full caller-facing delta anyway.

Verification

All local runs serialized on the shared verify lock, NODE_OPTIONS=--max-old-space-size=4096, scoped filters.

Pre-merge batch (base 37b82ed):

  • @objectstack/spec test — full suite green (386 files; earlier baseline run: 10236 tests, the two reds it surfaced — a 521-char refusal message and the stale export snapshots — were fixed/regenerated and the suite re-ran green).
  • @objectstack/objectql test — 191/192 green; the one red was engine-filter-array-lowering.test.ts's pass-through pin for { $eq: { $in: 'not-an-operator' } }, a fixture that pinned exactly the limb the ruling re-judges (plain object in a scalar slot). Re-judged per the fixture-triage rule: the case now asserts the door's TYPE refusal at where.stage.$eq and that the message never misreads the inner $in data key as a malformed operator (not.toContain('requires an ARRAY')) — the old pin's surviving concern, kept.
  • @objectstack/metadata-protocol (Door 1), all five driver suites, @objectstack/service-analytics, @objectstack/runtime + @objectstack/rest — green (runtime: 145 files / 2195 tests).
  • typecheck ×7 (spec, objectql, five drivers) — green.
  • check:driver-conformance45 covered / 0 DEBT / 0 exempt (was 40/0/0; the five new cells are the door column, all covered in this PR). check:nul-bytes — green (7424 files).
  • check:generated — 2 of 13 stale (api-surface/, export-origins/ — the 13 new exports), regenerated with --fix, additions only.

Post-merge lap (merged origin/main @ fa48973; incoming touched objectql/src/engine.ts — the same file as the door wiring — and spec/src/contracts/*): rebuilt the closure, then re-ran the moved packages — spec check:generated green (artifacts still current), spec test 386/386 files green, objectql test 193/193 files green (the re-judged pin and the new door suite included).

Examples validate ×3: all green (app-crm, app-showcase, app-todo — "Validation passed"; todo's two draft-flow warnings pre-exist this branch). The first two attempts failed on this worktree's own build state (packages/cli and connector-mcp had no dist — command validate not found / missing module), not on the diff; building the examples' dependency closures by package name fixed both.

Out-of-scope findings


Generated by Claude Code

claude added 4 commits August 12, 2026 18:38
…rced at the shared compile face (#7872)

The measured superset string | number | bigint | boolean | null | Date is
defined in packages/spec (filter-comparand-type.ts), enforced by
parseFilterAST on everything it returns and by the engine's lowering seam on
the object form; everything else is refused with the INVALID_FILTER / 400
envelope naming the accepted set. bigint is narrowed copy-on-write to its
exact number (refused beyond 2^53), which kills the driver-memory mingo
crash cell without touching the frozen driver; the mongo silent-edit cell
({qty: undefined} wiring to {} = match everything) becomes a refusal at the
door. SQL-family allowlists source their set membership and wording from the
door instead of local copies. FILTER_COMPARAND_TYPE_CASES conformance table
added and consumed by all five driver suites.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0123k4cam2jEAkPmbJeoaY3r
…d-type door exports (#7872)

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

vercel Bot commented Aug 12, 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 12, 2026 11:45pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 4 package(s): @objectstack/driver-sql, @objectstack/driver-turso, @objectstack/objectql, @objectstack/spec.

113 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 @objectstack/objectql, 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/driver-sql, @objectstack/driver-turso, @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 packages/objectql, @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/driver-turso, @objectstack/spec)
  • content/docs/deployment/environment-variables.mdx (via @objectstack/driver-turso)
  • content/docs/deployment/migration-from-objectql.mdx (via @objectstack/objectql)
  • content/docs/deployment/self-hosting.mdx (via @objectstack/driver-turso)
  • 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/deployment/vercel.mdx (via @objectstack/objectql)
  • 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/glossary.mdx (via @objectstack/driver-sql, @objectstack/driver-turso)
  • 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/objectql, @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 packages/objectql, @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/driver-sql, @objectstack/objectql, @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/objectql, @objectstack/spec)
  • content/docs/permissions/authentication.mdx (via @objectstack/objectql)
  • 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/objectql, packages/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/anatomy.mdx (via @objectstack/driver-sql)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/objectql, @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/driver-sql, @objectstack/driver-turso, @objectstack/objectql, @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/driver-sql, @objectstack/objectql, @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/driver-sql, @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/driver-sql, packages/objectql, @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/objectql, @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/driver-sql, @objectstack/objectql, @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
Collaborator Author

os-regen relay lap over #8230 / #8232 — complete. Merge sha 2abb1e8ee (merges origin/main @ 29488ccae), regen commit 81f6752e4, both pushed; head is 81f6752e4. Ran via scripts/pm/os-regen-merge.sh (merge → take main's side of every os-regen path → commit → regenerate from the merged tree; the pre-commit deferral marker recorded and cleared itself).

Sibling-entry assertions on the regenerated artifacts:

Gates and suites on the new head: check:generatedall 13 artifacts up to date; spec scoped suites (comparand-type door, filter, operator vocabulary, text conformance, export-origins) — 5/5 files green; objectql scoped (door suite + lowering suite) — 2/2 files, 58 tests green. One false red on the way: the recreated worktree had no @objectstack/types dist, so the first objectql run failed at import resolution — fixed by building the dependency closure, not by touching the diff. engine.ts re-merged cleanly (main does not carry #8236 yet, as expected).

PR stays draft; over to the PM for gate verification on 81f6752e4 and the flip.


Generated by Claude Code


Generated by Claude Code

…erased engine option bags (#7872)

The door suite's registerObject(deal) call was missing the required
packageId (the +1 over objectql's frozen TEST_DEBT 355); and its option
bags used bare 'as any', which the query-options-erasure ratchet counts
(240 -> 245). The bags now type-check uncast — FilterCondition's index
signature admits the deliberately off-contract comparands, which is the
point of the door — except the one FilterArray case, which carries the
sanctioned 'as unknown as EngineQueryOptions' naming the contract it
bypasses (not counted).

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

Copy link
Copy Markdown
Collaborator Author

Patch round for the two red farm jobs — fixed, new head dee462fdb. Both reds were mine (verified — neither reproduces from origin/main content; both point at the door suite added in this PR):

  • TypeScript Type Check (check:type-check-debt --re-measure): objectql TEST_DEBT 355 → 356 (+1). The new error was engine-comparand-type-door.test.ts's registerObject(deal) missing the required packageId argument (TS2554 — the sibling lowering suite carries the same call inside the frozen 355; mine was the increment). Fixed by passing the id (registerObject(deal, 'test')), not by raising the ledger. Re-measured locally with the exclusion lifted, exactly as the gate counts: 355 — back at the frozen number, zero errors from this PR's files (exit 0).
  • ESLint (check:query-options-erasure): test surface 240 → 245. The door suite's option bags used bare as any. Now they type-check uncastFilterCondition's index signature admits the deliberately off-contract comparands, which is precisely why the runtime door has to exist (noted in the test) — except the one FilterArray case, which carries the sanctioned as unknown as EngineQueryOptions form naming the contract it bypasses (not counted). Local re-run: ratchet holds, 240 test sites, "none new" (exit 0).

Behavior re-verified after the edits: door suite + lowering suite — 2 files / 58 tests green (exit 0). Diff is one test file; no source, no artifacts, no changeset delta. PR stays draft on dee462fdb for the farm re-read.


Generated by Claude Code


Generated by Claude Code

@huangyiirene
huangyiirene marked this pull request as ready for review August 13, 2026 00:08
@huangyiirene
huangyiirene added this pull request to the merge queue Aug 13, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 31653423757 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Test Core (2/3) — 失败步骤: Run this shard's tests

    �[41m�[1m FAIL �[22m�[49m test/watch-dot-root.test.ts�[2m > �[22mFileSystemRepository watcher — dot-rooted watch root (#7150)�[2m > �[22msees an external edit when the root is under a dot-directory
    

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 7 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 在其他 PR 的同类评论里搜同名测试;出现过 ⇒ flaky 实锤,开 issue 修/隔离那条测试。修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

Merged via the queue into main with commit 7e5af5c Aug 13, 2026
27 checks passed
@huangyiirene
huangyiirene deleted the claude/issue-7872-comparand-type-door branch August 13, 2026 00:53
huangyiirene pushed a commit that referenced this pull request Aug 13, 2026
os-regen merge lap for landing: merge origin/main (committed first, per
scripts/pm/os-regen-merge.sh), then wholesale regen of the os-regen'd
references/api pages from the merged tree. Sibling assertions on the
regenerated tree: #8230 retirement state (def names only in retirement
prose + migration entry), #8232 currency fraction-digit guard, #8234's
13 comparand-door exports in api-surface/data.json, #8236's groupBy
union row all survive; MONGODB_MULTI_TENANT_UNSUPPORTED stays absent
from the ledger and the references ErrorCode union reads main-minus-one
(+265 -> +264; the union grew by 2 on main since the previous lap).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0123k4cam2jEAkPmbJeoaY3r
huangyiirene pushed a commit that referenced this pull request Aug 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation protocol:data size/xl tests tooling

Projects

None yet

2 participants