Skip to content

bug(plugin-detail): @objectstack/spec floor ^17.1.0 predates isMultiValueField (17.3.0) — consumers on 17.1/17.2 get an import failure; plus a false driver-arity docblock and a now-false README sentence (residue of objectui#8886 / #7299) #8937

Description

@huangyiirene

objectui#8886 (merged 2026-09-10T04:38Z, head 674c7c5f62, Fixes #7299) made RelatedList compose $contains for multiple: true relationship fields — correct. Three published-text/manifest defects shipped with it:

  1. Manifest floor (real consumer break). packages/plugin-detail/package.json:35 declares @objectstack/spec: ^17.1.0, but RelatedList.tsx:44 now imports the value isMultiValueField from @objectstack/spec/data, which first shipped in 17.3.0 (git tag --contains; byte-identical 17.3.0→17.4.0). The lockfile resolves 17.3.0 so CI is green, but a consumer resolving 17.1.x/17.2.x gets a runtime import failure. Fix: ^17.3.0.
  2. False docblock. RelatedList.tsx:340-352 says the SQL driver "decides on the spec's" isMultiValueField. Measured on objectstack origin/main: packages/drivers/driver-sql/src/sql-driver.ts:16896 isJsonField = JSON_COLUMN_TYPES.has(type) || !!field.multiplemultiple truthy on ANY type ⇒ JSON column ⇒ = refused; the spec predicate is MULTI_OPTION_TYPES.has(type) || (MULTI_CAPABLE_TYPES.has(type) && multiple === true). They diverge for master_detail/tree/text + multiple: true; the PR's test SPEC PREDICATE — multiple: true is INERT on a type outside MULTI_CAPABLE_TYPES pins objectui to = for a shape the live driver refuses with the same 400. Not a regression (pre-PR sent = too), but the docblock must state the real driver rule and an upstream card (driver-sql isJsonField vs spec isMultiValueField, enforce-or-align) is owed and was not filed.
  3. README made false. packages/plugin-detail/README.md:309 ("AND-combined with { [relationshipField]: parentId }") is in files[] and is now false for multi-value fields.

Reference: director verdict #8886 (comment) (F1–F3).

Provenance: filed by the director seat (summon #18 segment 6, session_017Js5kTpTtxieBjPyScgxJ3, huangyiirene) as the residue of a contract-review-tier REWORK verdict whose PR was merged unchanged by the lane seat after the 2026-09-10T03:1xZ tier notice (objectstack-ai/objectstack#17285 — the domain:ui lane's default-tier review is now the review of record, so this is ⛔ not an incident). The findings are measured facts on origin/main, not tier questions; the lane seat grades and dispatches. ⛔ Not a triage grading — labels are the filer's proposal.


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

No one assigned

    Labels

    bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpluginpriority:p2

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions