You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Designer PUTs half-filled lookup drafts that @objectstack/spec 17.3.0 refuses (reference is now required) — keep the draft client-side and do not PUT it (#7122 ruling, item 4 = A) #7714
Filed by the domain:spec @ objectui execution seat (session session_01BAZFhALsQsGqxui8sNqM8s) as the follow-up card the #7122 ruling requires. ⛔ Unassigned; domain:* and grading are triage's — the ruling names the landing lane as domain:ui (packages/app-shell), recorded here for the triage seat rather than stamped by this one.
The measured fact (PR #7685, aabc527cb, both artifacts read side by side)
FieldSchema.safeParse({ name, label, type: 'lookup' }) is ACCEPT at @objectstack/spec 17.2.0 and REFUSE at 17.3.0, with a custom issue on reference. MetadataService.saveFields (packages/app-shell/src/services/) deliberately PUTs half-filled lookup drafts, and MetadataService.specKeyReference.test.ts pins that behaviour on purpose ("a HALF-FILLED draft, type lookup, target left empty, still saves"). Against a 17.3.0-aligned backend that PUT answers 422 INVALID_METADATA — the failure class check-designer-field-key-parity documents as blocking every subsequent save of that object.
A — fix the designer: a half-filled lookup stays client-side and is not PUT. The dev's "contest upstream first" is not taken: spec's prose already declared reference required for relationship types, 17.3.0 closed a declared≠enforced gap deliberately, and asking spec to reopen it is the wrong direction; the correct home for draft state is the client, not the metadata store (#4001's silent-drop shape is the counter-example). ⛔ The pin is not flipped green. Own card, domain:ui (touches packages/app-shell), Blocked-by: this card.
Execution constraints carried from the ruling
⛔ Do not flip MetadataService.specKeyReference.test.ts green by weakening it; the pin must state the new truth (a half-filled lookup is held client-side; the PUT body never carries a lookup without a non-empty reference).
⛔ Not option B (strip incomplete relationship fields from the PUT body while still "saving"): the designer would show a field the server never received — the silent-drop shape objectstack#4001 closed.
⛔ Not option C (contest upstream).
Confidence gap carried verbatim: neither seat has driven "half-filled lookup → save → later saves blocked" in a running designer; the dev on this card measures it first (dogfood against a 17.3.0 backend). The urgency may move; the direction should not.
#7122 (the chain and the ruling) · PR #7685 (measurement carrier) · #7635 (item 2 of the same ruling) · #4001 · #6041 / #6043 (earlier designer keys that hard-blocked a save).
Filed by the
domain:spec@ objectui execution seat (sessionsession_01BAZFhALsQsGqxui8sNqM8s) as the follow-up card the #7122 ruling requires. ⛔ Unassigned;domain:*and grading are triage's — the ruling names the landing lane asdomain:ui(packages/app-shell), recorded here for the triage seat rather than stamped by this one.Blocked-by: #7122
The measured fact (PR #7685,
aabc527cb, both artifacts read side by side)FieldSchema.safeParse({ name, label, type: 'lookup' })is ACCEPT at@objectstack/spec17.2.0 and REFUSE at 17.3.0, with acustomissue onreference.MetadataService.saveFields(packages/app-shell/src/services/) deliberately PUTs half-filled lookup drafts, andMetadataService.specKeyReference.test.tspins that behaviour on purpose ("a HALF-FILLED draft, typelookup, target left empty, still saves"). Against a 17.3.0-aligned backend that PUT answers 422INVALID_METADATA— the failure classcheck-designer-field-key-paritydocuments as blocking every subsequent save of that object.The ruling (director seat, #7122 comment 5549255921, 2026-09-05T04:11Z; maintainer verbatim 「15622 也移交了;其他同意」)
Execution constraints carried from the ruling
MetadataService.specKeyReference.test.tsgreen by weakening it; the pin must state the new truth (a half-filled lookup is held client-side; the PUT body never carries alookupwithout a non-emptyreference).Related
#7122 (the chain and the ruling) · PR #7685 (measurement carrier) · #7635 (item 2 of the same ruling) · #4001 · #6041 / #6043 (earlier designer keys that hard-blocked a save).