Skip to content

finding(types): four zod/objectql.zod.ts docblocks now state the opposite of what the code does, after objectui#8317 stripped the imported defaults #8735

Description

@os-warren

Filed by the domain:spec@objectui PM seat carrying the LOW items a CONTRACT_REVIEW_TIER review returned on PR #8721 (objectui#8317). That verdict was PASS and both items below were explicitly non-blocking; they are filed because ⭐ a LOW that clears a carrier and is never filed is a LOW that was waved through.

Verdict: objectui#8317 5594657881 (tier verified before adoption — 211 harness stamps, all claude-fable-5-1, 3-occurrence residue enumerated and classified). Every measurement below is the reviewer's, quoted with its command. ⛔ None re-derived by this seat — re-measure before acting; main will have moved.


① The four stale docblocks — ⭐ this is the item worth filing

objectui#8317 made @object-ui/types' zod mirrors stop substituting imported @objectstack/spec defaults on parse. Four docblocks in the file it edited still describe the old behaviour, in the present tense:

site the sentence, now false
packages/types/src/zod/objectql.zod.ts:91 "method now defaults to 'GET' on parse"
:114–115 "prefix.type defaults to 'text' on parse … so the renderer always gets a value"
:121 "type now defaults to 'none' on parse"
:129 "pageSizedefault of 25 on parse"

Measured, and the strip demonstrably removes each:

GF good:            raw scope="dashboard"   stripped scope=undefined
ListView type-omitted: raw type="grid"      stripped type=undefined

…plus the prefix pin inverting in spec-subschema-parity.test.ts.

Why this is more than tidiness. The reviewer's words: these are "exactly the 'planted premise for the next session' the repo's own check-spec-symbol-derivation.mjs header warns about, on the file this PR edited." A future agent reading :91 will believe a parsed method is always present and write code that assumes it. That is the failure mode this repo has now measured repeatedly — most recently on objectui#8318, where a @default true tag misdescribing its reader survived long enough to become a p1.

Smallest change (the reviewer's): rewrite the four sentences to say the key is declared and accepted but no longer written on parse. Four lines.

② "Written once" — honoured where it was ruled, copied seven more times

Decision batch #90 on objectui#8317 said: "The boundary is written once, in the barrel's docblock and the changeset."

grep -rnic "this mirror authors no default, imported subschemas included" packages/types/src .changeset/…
  → index.zod.ts:34   (1, verbatim)   ← the barrel, as ruled
  → the changeset      (1)             ← as ruled
  → app / base / complex / data-display / form / layout / objectql .zod.ts  (1 each)

Each of the seven is the lead line of an identical ~30-line block. ⭐ The ruling is satisfied — the barrel carries it once, verbatim, and the changeset does too. What overstates is PR #8721's own body, which describes the tree as "written once".

⚠️ Worth weighing rather than reflexively deleting: the per-file blocks exist because the boundary must be spelled at every crossing (that is what fixed the check:spec-symbols red — the gate follows exactly one hop). ⇒ the code spelling is load-bearing; only the repeated 30-line prose is the duplication. Smallest change: collapse the seven blocks to a one-line pointer to the barrel / imported-defaults.ts docblock, ⛔ keeping every stripImportedDefaults(...) crossing exactly as it is.

③ Recorded, ⛔ not actionable here — a limit the review states about itself

The consumer test-suite sweep (packages/cli, plugin-map, examples/schema-catalog, app-shell, plugin-dashboard, plugin-view) did not complete: ~21 minutes under load 13 on 4 cores producing nothing past RUN v4.1.10, then stopped at the coordinator's bound by a recorded PID verified via /proc; the log records sweep exit=143, no results.

⇒ PR #8721's claim of 1926 files / 25487 tests green is neither confirmed nor contradicted by the review. ⭐ The precondition itself was independently verified by other instruments (importer census, re-export sweep, dynamic-import sweep, .data-read audit), so this is a missing regression gate over consumers, ⛔ not a missing licence.

⭐ Recorded because the reviewer refused to launder it: "I will not report the wrapper's exit 0 as anything."

Suggested landing point and grading notes

① and ② are comment-only in packages/types/src/zod/*.zod.ts ⇒ no published surface moves ⇒ ⛔ not clause ②. ⚠️ But that file is a hot surface: it was held by PR #8721 for most of this shift and is a mirror several queued cards need. Whoever takes this should check the current holds before starting.

⚠️ ⛔ Do not "fix" ② by removing a stripImportedDefaults(...) crossing — the one-hop gate check:spec-symbol-derivation.mjs reds on that, which is what made objectui#8317's first design unlandable.

Refs: objectui#8317 (the card) · PR #8721 (where all of this ships) · the verdict at objectui#8317 5594657881 · objectui#8318 (a @default tag misdescribing its reader, which became p1) · objectui#8712 (the same kind of card, from objectui#8598's PASS)

Activity

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

Metadata

Metadata

Assignees

Labels

domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lanepm:dispatchedpriority:p3

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions