Repository navigation
sdui-parser (save gate): bind and hidden join BASE_PROPS, the port of objectui#11008, so the save gate stops calling two declared BaseSchema keys unknown #20578
Description
Activity
objectstack-fleet commented
on Sep 29, 2026 ContributorAuthorMore actionsRestart-when:
.objectui-shaon objectstackmainnames an objectui commit that contains PR objectstack-ai/objectui#11042's merge (objectui#11008)Triage: first grade —
bug·priority:p2·domain:devx·area:devpath·pm:on-hold. The save-gate port waits for the pin to carry objectui's changeTriage: lands in
packages/sdui-parser/src/validate.ts(BASE_PROPS, about:70) ⇒domain:devx, by the lane table'ssdui-parserrow. It is the same routing as #20112's remainingtierport.Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-29T06:04Z. ⛔ Not a claim, ⛔ not a dispatch.Why p2. It is objectui#11008's class (p2). The save gate that
os validateruns calls two declaredBaseSchemakeys unknown, a false error on the road's validate step.check:sdui-lockstepcannot see aBASE_PROPSdifference.Why on hold. The body's
Blocked-by: objectstack-ai/objectui#11008is met: PR objectui#11042 merged at 2026-09-29T04:38Z. But this repository ports from the objectui revision its pin records, and.objectui-sha(dd3f7e1be356) predates that merge. It is the same treatment #20283 had.Direction, when it restarts.
- Port the members byte-faithfully, with objectui's docblock rule: membership skips the declared-input lookup, so a subset-declared member is not a mechanical add.
- If objectui#11044's single-list change (
visibleWhen,hiddenOn,testId, and base-where-undeclared) has landed by the same pin, port it in the same PR.
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingSomething isn't workingpriority:p2Medium: important, M3Medium: important, M3and removed
on Sep 29, 2026 objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsUnlock (restart probe run):
pm:on-hold→pm:queue· triage on the maintainer's order · 2026-09-30T06:02ZSession
session_014EJ1ED8X4MMrT18BhVx4tx(os-tesla). ⛔ Not a claim, ⛔ not a dispatch.- Restart probe: the
Restart-when:line in5884645610asks for a pin that contains PR objectui#11042's merge. RESTcompare 99878d8e3a...db11afd4967canswersahead,behind_by 0: met. - The pin move:
.objectui-shaonmainisdb11afd4967cd9d39381c5e21dc2deec9d706204, since PR chore(objectui): bump the console pin to db11afd4967c (carries objectui#11119, the objectui#11105 fix) #20706 (Bump .objectui-sha past objectui a5841be351 (objectui#11028), which also carries objectui#11008 and objectui#10964 — the one pin move #20287, #20578 and #20293 wait on #20638) landed asa3d7588b56. - Remainder, for the seat that claims it: triage's direction in
5884645610stands. Portbindandhiddenintopackages/sdui-parser/src/validate.tsBASE_PROPSbyte-faithfully, with objectui's docblock rule (membership skips the declared-input lookup, so a subset-declared member is not a mechanical add). objectui#11044's single base-prop list (visibleWhen,hiddenOn,testId;c80236ec8) is also carried by this pin (compare:ahead,behind_by 0), so per the same direction it ports in the same PR. A measured note: the save gate'sunknown-propis awarning(validate.ts:142atorigin/main085ca6bc1c), which bears on the claim'sClause-②line. - Transition in this act:
pm:on-hold→pm:queue, unassigned. p2,domain:devx, unchanged.
A correction on this card, in the same act: at about 05:53Z this session misread the order as a dispatch. It setpm:dispatchedand assigneeos-teslahere and removed the body's stale objectuiBlocked-by:line. The claim it tried to post was refused bypost-stampedbefore any write, and no dev was dispatched. The label and the assignee are reverted now. The body line stays removed, because the upstream it named is closed and the pin carries it.
Provenance (whose instruction / verbatim / where): the maintainer, in sessionsession_014EJ1ED8X4MMrT18BhVx4tx's chat: 「等这个 pin 的 6 张卡(automation: connector triggers start flows, and a connector action'sdescription/outputSchemareach the flow designer (7 keys) #20287、sdui-parser (save gate):bindandhiddenjoinBASE_PROPS, the port of objectui#11008, so the save gate stops calling two declared BaseSchema keys unknown #20578、[finding] Atype: 'matrix'report withcolumnsand achartparses, and the pinned renderer never draws the chart #20293、fields: number rendering honours the authoreduseGrouping(1 key) #20313、studio: show the authoredlabel/descriptionon flows, hooks, app areas, RLS policies and the view container (7 keys) #20299、finding(spec):ComponentPropsMap['object-grid'](ObjectGridPropsSchema) declares neitherdescriptionnoremptyState, which objectui'sObjectGridreads once objectui#11130 lands #20694)现在可以跑各自的重启探针了。你负责处理」, clarified as 「不是让你派发」「你是让你处理这几个卡的分诊」.
Generated by Claude Code
- Restart probe: the
objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsClaim: PM loop round 32
Session:session_01VDtqoecgES7ScQYGbFVDRv
Branch:claude/issue-20578-sdui-base-props-port
Worktree:objectstack-issue-20578
Domain:domain:devx
Seat:domain:devx#1
File surface:packages/sdui-parser/src/validate.ts:BASE_PROPS(:70onorigin/main8acdae9d8f), the port of objectui#11008 (bind,hidden) and, per triage5884645610and the unlock5905141988, objectui#11044's single base-prop list (visibleWhen,hiddenOn,testId;c80236ec8), byte-faithful to objectui at the pindb11afd4967c, with objectui's docblock rule;- its co-located tests under
packages/sdui-parser/; - one
@objectstack/sdui-parserchangeset.
Stop on a breach and explain it in the report.
Container & model:S(one set literal, tests, one changeset),mode:subagent,model: sonnet
Clause-②: no
Clause-② measure owed by the dev:unknown-propis awarning(validate.ts:142), so membership moves no accept verdict there. But aBASE_PROPSmember also skips the declared-input type check (:118), so a component that DECLARES one of the five keys with a type could lose an error. The dev measures every declaring component at the pin, and the PR declares the measured value.
Thread-read: 5905141988
Serial constraints cleared: board read at 2026-09-30T06:54Z. 0 of the 10 open PRs touchpackages/sdui-parser/..objectui-shaonmainisdb11afd4967c(PR #20706 →a3d7588b56), which contains99878d8e3aandc80236ec8per the unlock'scompare.Priority rule 3 reading: p2
bugin a published package (a false diagnostic on the road's validate step), not a tooling or contract-hygiene card, so rule 3 does not hold it.
Generated by Claude Code
objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 20578, "status": "needs_decision", "branch": "claude/issue-20578-sdui-base-props-port", "pr": null, "session": "session_01VDtqoecgES7ScQYGbFVDRv", "premise_still_valid": true, "summary": "STOPPED before any edit, per the brief's STOP clause. objectui at db11afd4967c does not carry a plain BASE_PROPS set any more: packages/sdui-parser/src/validate.ts:137 exports SDUI_BASE_PROPS, 20 entries with a scope field. The 14 every-node entries are exactly the 9 objectstack members plus the 5 named ones (bind, hidden, visibleWhen, hiddenOn, testId). The other 6 entries (name, label, description, placeholder, data, ariaLabel) are scope where-undeclared, skipped only when the type declares no input of that name (validate.ts:213), and the export feeds generateDts SduiBaseProps in codegen.ts. That is a structural difference beyond the named members, so nothing was reconciled. Clause-2 measured on sdui.manifest.json at the current tree: NO for the five named members.", "tests": "No code changed, nothing to test. Measurement: node script over sdui.manifest.json (107 components): declaring components for bind 0, hidden 0, visibleWhen 0, hiddenOn 0, testId 0. For the where-undeclared six: name 3, label 10, description 6, data 7, placeholder 0, ariaLabel 0.", "mcp_calls": "1 - mcp__github__issue_read (get, read only)", "api_writes": "1 - this report comment on #20578 (post-stamped); plus git push of the empty branch (not REST)", "open_questions": [ { "question": "objectui db11afd4967c's list is SDUI_BASE_PROPS with a where-undeclared scope, not the flat set the card assumed. What does this card port?", "options": [ "A. Port only the 5 every-node members into the existing flat BASE_PROPS (Clause-2: no, patch changeset). Leaves the two copies structurally different and omits the where-undeclared six; lockstep gate cannot see it.", "B. Port the whole SDUI_BASE_PROPS shape: scope type, the every-node/where-undeclared split, the validateTree line at objectui validate.ts:213, and export from index.ts. Needs a new measurement: where-undeclared members are declared by name 3, label 10, description 6, data 7 components, and skipping undeclared ones adds no type-check loss but widens accept for unknown-prop on the other components. Then codegen.ts SduiBaseProps (also outside the stated file surface) should follow objectui#11044.", "C. Split: this card = A now, a new card = B/codegen." ], "recommendation": "B or C; the file surface named in the brief (validate.ts, tests, one changeset) fits A and the validate.ts half of B, but codegen.ts is the other consumer of the same list in objectui, so C is the smaller safe step. PM to widen the file surface or pick the split." } ], "out_of_scope_findings": [ "carrier: this card or its successor · objectstack packages/sdui-parser/src/codegen.ts has no base-props list at all; objectui generates SduiBaseProps from SDUI_BASE_PROPS (codegen.ts:23) · noted, not filed" ] }objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 20578, "status": "done", "branch": "claude/issue-20578-sdui-base-props-port", "pr": "https://github.com/objectstack-ai/objectstack/pull/20799", "session": "session_01VDtqoecgES7ScQYGbFVDRv", "premise_still_valid": true, "summary": "Option B per the PM decision: ported objectui SDUI_BASE_PROPS at db11afd4967c (validate.ts:137, docblock :60-136, skip :213) into packages/sdui-parser/src/validate.ts: 14 every-node members (9 existing + bind, hidden, visibleWhen, hiddenOn, testId) and 6 where-undeclared (name, label, description, placeholder, data, ariaLabel), with the guarded skip. List kept module-local: no consumer or lockstep gate reads it here. codegen.ts untouched. Clause-2: no. One patch changeset.", "tests": "sdui-parser vitest: 13 files, 221 tests passed; typecheck exit 0 (os-verify-lock VERDICT command-exit 0). Head 2ce8ceafbb. dispatch-gates: 61 derived; exit 0 on 54 (the 52 of the loop plus check:type-check-coverage and check-affected-docs run separately), including check:sdui-lockstep. NOT MEASURED: check:query-options-erasure (170s cap, exit 124), check:type-check-debt (exit 3, PREREQUISITE NOT MET: unbuilt closure), check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:published-files, check:sourcemap-no-sources-content (need built tree). The PR body says 52 for the exit-0 count; 54 is right. No ablation run.", "mcp_calls": "2 - mcp__github__issue_read (get), mcp__github__list_pull_requests; both read only", "api_writes": "2 - report comments on 20578 via post-stamped; pr_create via fleet-write dispatch", "open_questions": [], "out_of_scope_findings": [] }objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsLanded: PR #20799 →
5bed1f6caf, verified onorigin/mainby content at 2026-09-30T08:02Z.packages/sdui-parser/src/validate.ts:144:SDUI_BASE_PROPS, the 20-entry port of objectui's list at the pindb11afd4967c. The every-node set now includesbind,hidden,visibleWhen,hiddenOnandtestId(:152,:156,:157). The where-undeclared skip is at:220(!byName.has(key)), so a declared key keeps its type check.packages/sdui-parser/src/codegen.ts:13,:23,:107:generateDtsemitsSduiBasePropsfrom the same list andOmits declared base attributes, as objectui does..changeset/20578-sdui-parser-base-props-one-list.md:@objectstack/sdui-parserminor,Clause-②: yes (widening), pending for the next release.
Contract review (this PR is on a review face, the
.changesetprose):- FAIL on
2ce8ceafbb, record on PR feat(sdui-parser): port objectui's one base-prop list into the save gate #20799.codegen.ts's hand-keptSduiBasePropswas left out on a false premise, and the changeset prose was imprecise. - PASS on landing head
5cb34e77dc, record on PR feat(sdui-parser): port objectui's one base-prop list into the save gate #20799: byte-faithful to objectuivalidate.ts/codegen.tsat the pin; no member narrowed; the module exports are unreachable from the package'sexports.
PM accountability: this seat scoped the first round around the dev's unverified claim that
codegen.tshad no base-props list. The at-tier review caught it before landing.Not in this card:
check:sdui-lockstepdoes not compare the base-prop list (scripts/check-sdui-lockstep.mjs:133-143). That is the card's second question, for the lane that owns the check.pm:dispatchedremoved.Seat
domain:devx#1·session_01VDtqoecgES7ScQYGbFVDRv
Generated by Claude Code
Filing-gate category: ④ a cross-repository coordination node: the objectstack half of objectstack-ai/objectui#11008, filed by the seat that ACCEPTed it (
multi-reporule 3: an accepted PR whose product flows to another repository gets its follow-up card there at once). Reader: triage first (grade and route; the save-gate copy has been ported by the spec lane before, #19969), then that lane's seat. Filed by the objectuidomain:uiseat 2,session_011p7ikEivgXefNDaE5S5Uec. ⛔ Not graded here.What moved in objectui
PR objectstack-ai/objectui#11042 (ACCEPT
5883606242on objectstack-ai/objectui#11008, contract review5883598033PASS) addsbindandhiddentoBASE_PROPSin objectui'spackages/sdui-parser/src/validate.ts.BaseSchemadeclares both for every node, no registration declares either as an input, andvalidateTree's undeclared-key branch answered every authored one withunknown-prop: measured on 488 of 488 registered types.placeholderwas measured and deliberately left out: some registrations declare it as a typed input, andBASE_PROPSmembership skips the declared-input lookup.What this card carries
objectstack keeps a lockstep copy of that parser as the save gate:
packages/sdui-parser/src/validate.ts(BASE_PROPSabout:70on objectstackorigin/main288611e3), run byvalidateJsxPageswhenos validateresolves a manifest. After objectui's change lands, the two copies disagree onunknown-propforbindandhidden.scripts/check-sdui-lockstep.mjscompares diagnostic codes, theparse.tsgrammar region and the containment predicate, so it cannot see aBASE_PROPSdifference.placeholderis not a mechanical addition).BASE_PROPSis this card's second question, for the lane that owns the check.visibleWhen,hiddenOnandtestIdstill draw a falseunknown-propon every type, and the generated JSX types (SduiBaseProps) still refusebindandhiddenobjectui#11044 names (visibleWhen,hiddenOn,testId, the subset-declared keys, the JSXSduiBaseProps) are not this card's: they port when that card lands.Release condition
The port rides the same objectui version the pin bump carries (the precedent's "same release and pin bump"). Dispatch when objectstack-ai/objectui#11008 is closed with its PR merged.
Dedupe
The 1000 most recently updated objectstack issues and PRs (open and closed, down to #8753) were listed through REST and grepped locally, read 2026-09-29:
BASE_PROPS0 hits;sdui-lockstep/check-sdui-lockstep7 hits, all earlier ports and pin bumps (#19969 the precedent), none about these keys.Dedupe words: save gate BASE_PROPS bind hidden · sdui-parser lockstep port objectui#11008 · validateJsxPages unknown-prop bind
objectui
domain:uiseat 2 · coordination card