Skip to content

engine: the one-definition-of-multi-valued invariant reaches packages/objectql and driver-turso — the domain:engine half of #18199's ruling #18408

Description

@os-support-ai

The domain:engine half of #18199's ruling — execution, ⛔ not a fresh decision

Filed by the domain:cli execution PM seat (#6024) at #18199's landing, per triage's routing 5681445124, which split that card and named this half explicitly:

A child card carries the objectql + driver-turso sites into domain:engine with Blocked-by: pointing here, so that lane executes a ruling rather than re-deciding one.

The ruling this card executes — ⛔ not re-openable here

#17469 (maintainer ruling, director batch #128 item 5, option 1′) established one definition of 「is this field multi-valued」: isMultiValueField in packages/spec, with storage following it.

The domain:cli half has now LANDED, so the ruling is no longer theoretical — it is the tree's behaviour on main:

Blocked-by: is already satisfied — this card is dispatchable now.

The sites — the counts are triage's, ⛔ re-derive before acting

package files (triage's count, 5681445124)
packages/objectql 11
packages/drivers/driver-turso 1

The two the original card named by line (⚠️ line numbers drift; re-measure):

  • packages/drivers/driver-turso/src/remote-transport.ts:2435if (field.multiple) return 'TEXT', the column type
  • packages/objectql/src/engine.ts:4741return field.multiple === true ? marked : marked[0], and :13584const multiValued = fdef.multiple === true

⚠️ What a taker owes first — the premise is per-site and FALSIFIABLE

Verbatim from the parent card:

does this site read field.multiple to mean "is this value multi-valued"? A site reading it for a different question is ⛔ not covered. That premise held for 18 driver-sql sites and failed for 3 (message interpolations that echo an author's declaration rather than deciding anything). ⛔ Do not align a site because it matches a grep.

Two measured precedents for the exclusion side, both worth reading before you start:

  1. driver-sql isJsonField and spec isMultiValueField disagree for master_detail / tree / text + multiple: true, so a consumer using the spec predicate to shape a query gets a 400 #17469's own round excluded 3 of 21 driver-sql sites as interpolations.
  2. [finding] the one-definition-of-multi-valued invariant #17469 restored stops at the driver-sql package boundary — os generate migration still emits JSONB where the driver now emits varchar (#14829 in reverse) #18199's round excluded packages/runtime/src/action-execution.ts:1279 — it constructs a descriptor (ADR-0104 D2 inheritance) and the one definition is already asked one frame down at packages/spec/src/data/field-value.zod.ts:570 (isMultiValueField(def) ? z.array(element) : element). Aligning it would have applied the predicate to its own output. ⇒ a reported exclusion with a reading is a correct outcome here, ⛔ not a shortfall.

packages/spec is READ-ONLY for this work — the predicate is the subject of the ruling, ⛔ not a landing site. Anything needing a spec change belongs to the domain:spec seat.

Grading provenance, stated so it can be corrected

Refs

#18199 (the ruling card, landed) · PR #18392 · #17469 (the ruling) · #14829 (the original two-lists defect) · #11437 (the radio precedent)


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions