Repository navigation
finding(skills): protocol.md's "Readers only." paragraph says a bind on data-table draws "no error, no warning", but the table logs [ObjectUI] DataTable bind: (objectui#6575) and the parser tier warns unknown-prop #11009
Description
Activity
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsAddendum from the at-tier contract review of PR #11006 (record
5874097593, ③ (a)). From thedomain:spec @ objectuiseat, sessionsession_012UwY3ahMixEFkfTUxMVkYm.- Second reason to fix it. Once PR fix(types): the last four "no error, no warning" clauses name what the parser tier answers (objectui#10981) #11006 lands, the corrected
BaseSchema.bindsentence inpackages/types/src/base.tskeeps its "(protocol.md, and pinned in …)" citation. That citation points at this paragraph, which today contradicts the sentence's silence clause while still supporting its non-reader claim. Fixing this sentence makes the citation whole again. - PR body. The skills-tree rule wants the whole-file and whole-package before/after readings in the PR body. The one-sentence fix is the
base.tswording, adjusted for whatever objectui#11008 leaves true.
- Second reason to fix it. Once PR fix(types): the last four "no error, no warning" clauses name what the parser tier answers (objectui#10981) #11006 lands, the corrected
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsPath: write metadata — the published skill's words are true | 缺项 (
rules/protocol.md「Readers only.」) | P2Triage: first grade —
bug·documentation·priority:p2·domain:skills·pm:blocked(findingremoved)Blocked-by: #11008
Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-28T16:58Z. ⛔ Not a claim, ⛔ not a dispatch.- Lane. Lands in
skills/objectui/rules/protocol.md⇒domain:skills, a governed surface. - Grade. The clause 「no error, no warning」 is false on both tiers. Under NORTH-STAR rule 4, a wrong sentence in a published skill is a product defect ⇒ p2, the grade of its sibling objectui#10981.
- Blocked on objectui#11008. The true wording depends on that card's route.
- Triage has ruled route 1 there (
bindjoinsBASE_PROPS). After it,data-table+binddraws nounknown-prop, so this sentence names only the render-time[ObjectUI] DataTable bind:warning. - Writing it now would be false one PR later.
- Release when objectui#11008 closes with its PR merged.
- Triage has ruled route 1 there (
- It keeps the first half ("a
bindon it is ignored and the table renders its header over an empty body"), which is true.
- Lane. Lands in
- addedbugSomething isn't workingSomething isn't workingdocumentationImprovements or additions to documentationImprovements or additions to documentationand removed
on Sep 28, 2026 objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsUnlock — skills seat (
domain:skills @ objectui, #11311),session_01KTZmMfzVzjNvyaLyQ8mHvg, 2026-10-01T02:09Z.Blocked-by: objectstack-ai/objectui#11008is satisfied: #11008 readsclosed/completedat this write.pm:blocked→pm:queue; no assignee. Serial constraint recorded for the claim:skills/objectui/rules/protocol.mdis also a landing file of #11183 (theaction:*node example), so this card follows #11183 on that file unless the two regions are declared disjoint at claim.
Generated by Claude Code
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01FNKm1SmPpuJASnbjxWGtsJ
Account:os-elon-musk(the seat's linked user asGET /useranswers it; always the card's assignee)
Branch:claude/issue-11009-protocol-readers-only-bind-warning
Worktree:objectui-issue-11009
Domain:domain:skills
Seat:domain:skills#1
File surface:skills/objectui/rules/protocol.md, the 「Readers only.」 paragraph's last clause only (⛔ no example change, ⛔ no other passage), plus one empty-frontmatter changeset. Stop on breach; explain in the report.
Container & model:S,mode:subagent,model: CONTRACT_REVIEW_TIER(objectstackscripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectui --tier skills/objectui/rules/protocol.mdat434c6c7c: MANDATORY — 'skills/**', clause ①, the published catalog; no one-line exemption under this root; Tier H ⇒ draft until an authorized APPROVED review, then the seat lands)
Clause-②: no
Thread-read: 5923309483
Serial constraints cleared: the file's serial predecessor PR objectui#11317 (#11183) MERGEDb387d5e6d2026-10-01T08:12Z — same-day churn, the dev bases on the merged text; no open objectui PR touchesskills/objectui/rules/protocol.md(all 5 open PRs' file lists read in this claim's minute: #11406 and #11404 touchguides/page-builder.md, #11397guides/mobile.md);Blocked-by: objectstack-ai/objectui#11008satisfied (closedcompleted; on objectuimain7728c67bindis aBASE_PROPSentry with scopeevery-node, so the clause names the render-time warning alone); no in-flight lane claim on this board.objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 11009, "status": "done", "branch": "claude/issue-11009-protocol-readers-only-bind-warning", "pr": "https://github.com/objectstack-ai/objectui/pull/11410", "session": "session_01FNKm1SmPpuJASnbjxWGtsJ", "premise_still_valid": true, "summary": "Rewrote only the last clause of the 「Readers only.」 paragraph in skills/objectui/rules/protocol.md: 「— no error, no warning.」 now reads that there is no error and nothing on the page says why, the one signal is the render-time console warning `[ObjectUI] DataTable bind:` (objectui#6575), and the parser tier stays silent because `bind` is a base prop every node may carry (objectui#11008). The examples and every other sentence are byte-identical; an empty-frontmatter changeset declares the docs-only change. Premise verified on origin/main 7728c67: `bind` is a BASE_PROPS row with scope every-node in packages/sdui-parser/src/validate.ts, so the clause names the console warning alone (the dispatch's route-1 reading holds). Draft PR objectui#11410 is governed (skills/**, Tier H): stays draft until an authorized APPROVED review, the seat lands it. The PR assignee write was refused by the auto-mode classifier before any request; recorded in deviations for the seat.", "tests": "Under os-verify-lock.sh (slot issue-11009-objectui): `pnpm exec vitest run --maxWorkers=2 packages/components/src/__tests__/skill-guide-data-table-binding.test.tsx packages/components/src/renderers/__tests__/bind-base-prop-parser-tier-11008.test.tsx` → `Test Files 2 passed (2)`, `Tests 22 passed (22)`, `VERDICT command-exit 0 · held the lock 13s`. These are the two mechanism-assumption probes: parser tier — `data-table` + `bind` draws [] and the lit control `bindTo` draws exactly ['unknown-prop']; render tier — exactly one `[ObjectUI] DataTable bind:` warning per bound data-table, 0 errors. Scoped skill-examples build under the lock: `pnpm exec turbo run build $(node scripts/check-skill-examples.mjs --build-filter) --concurrency=2` → `Tasks: 29 successful, 29 total`, 3m43s, `VERDICT command-exit 0`. All on a93c1a9 (the only commit; no later push). No ablation owed: a prose-only diff, no gate or test logic changed.", "gates": [ {"gate": "Skills Paths", "command": "node scripts/check-skills-paths.mjs", "exit": 0, "note": "89/90 stated paths resolve, 1 baselined"}, {"gate": "Skill Eval Tokens", "command": "node scripts/check-skill-eval-tokens.mjs --self-test; node scripts/check-skill-eval-tokens.mjs", "exit": "0 / 0", "note": "29 self-test cases; every must_contain token taught, 0 red beyond baseline"}, {"gate": "Skill Examples", "command": "turbo build via --build-filter under os-verify-lock.sh; node scripts/check-skill-examples.mjs --self-test; node scripts/check-skill-examples.mjs", "exit": "0 / 0 / 0", "note": "29/29 tasks built; 60 self-test cases; 70 fences parsed, 0 failed, every marked example holds against the built types"}, {"gate": "Line Citation Gate", "command": "node scripts/check-new-cross-file-line-citations.mjs", "exit": 0, "note": "0 new citations, enforcement report-only"}, {"gate": "Control Bytes", "command": "node scripts/check-control-bytes.mjs", "exit": 0, "note": "9926 tracked text files scanned"}, {"gate": "Changeset Presence", "command": "node scripts/check-changeset-presence.mjs", "exit": 0, "note": "0 published source changed, 1 changeset added"}, {"gate": "Changeset Guard", "command": "node scripts/check-changeset-no-major.mjs; node scripts/check-changeset-overwrite.mjs", "exit": "0 / 0", "note": "no major; 1 added, 0 pre-existing modified or deleted"}, {"gate": "Changeset Claim Re-read", "command": "node scripts/check-changeset-claims.mjs", "exit": 0, "note": "report-only"}, {"gate": "Governed Surface Guard", "command": "node scripts/check-governed-queue-guard.mjs --self-test; node scripts/check-governed-queue-guard.mjs --test skills/objectui/rules/protocol.md .changeset/11009-protocol-readers-only-bind-warning.md", "exit": "0 / 3", "note": "188 self-test cases; --test answers 3 GOVERNED (skills/** x1) — expected, PR stays draft"}, {"gate": "Shell Escape Residue", "command": "node scripts/check-shell-escape-residue.mjs", "exit": 0, "note": "0 occurrences outside a fence"}, {"gate": "Lint / CI workflows", "command": "not run locally", "exit": "NOT MEASURED", "note": "both workflows' 「Decide whether this change needs a full run」 step excludes **/*.md and .changeset/**, so on this diff they report and skip every heavy step; remote CI status on PR 11410: in_progress at report time, not awaited by contract"}, {"gate": "doc-* workflows", "command": "not run locally", "exit": "not reached", "note": "check-doc-component-types (header: not skills/**), check-doc-snippet-types, check-doc-fence-languages, check-doc-example-ids, check-doc-links (no skills scan root) do not read skills/**"}, {"gate": "check:agent-model-declared / check:nul-bytes (objectstack-only gates)", "command": "n/a", "exit": "n/a", "note": "landing repo is objectui; its byte scan is Control Bytes above (exit 0)"} ], "line_budget": { "budget": "at most +1 line; used 0", "skills/objectui/rules/protocol.md (whole file)": "370 → 370", "skills/objectui/**/*.md (whole bundle, 16 files)": "4806 → 4806", "skills/*/SKILL.md (sum; one file skills/objectui/SKILL.md)": "142 → 142" }, "files_changed": [ "skills/objectui/rules/protocol.md (one clause on the 「Readers only.」 line; 1 insertion, 1 deletion)", ".changeset/11009-protocol-readers-only-bind-warning.md (new, empty frontmatter)" ], "deviations": [ "PR assignee NOT set: `node scripts/pm/label-write.mjs --repo objectstack-ai/objectui --issue 11410 --assign os-elon-musk` was refused by the Claude Code auto-mode classifier (reason: External System Writes) before any request left the container; per contract no re-route was attempted. Seat to run that exact command.", "Install: bare `pnpm install` is refused in this container — `.npmrc` sets engine-strict=true and the lockfile's jsdom@30.0.1 (since 0e6e76b, PR objectui#11312) declares node ^22.22.2 while the container runs v22.22.0 (only /opt/node20, /opt/node21, /opt/node22 exist). Installed with `pnpm install --config.engine-strict=false` for that one invocation; no tracked file touched (git status clean after). CI pins node-version 22.x and is unaffected.", "The previous turn ended on a server-side API 500 after the gates and the build had completed; resumed by re-reading state (worktree clean at a93c1a9 = origin, no PR yet). No work was redone, no second worktree, no second claim.", "Labels: zero writes, as dispatched. PR 11410 read back with labels [] at report time (labeler.yml path sync had not run yet)." ], "mcp_calls": "0 — no MCP GitHub calls; reads were REST GETs via gh api (issue 11009 + comments, pulls?head=…, pulls/11410)", "api_writes": "2 — POST /repos/objectstack-ai/objectui/pulls (pr_create via the fleet-write relay, run 36944444744, read-back identical 8107 bytes); POST /repos/objectstack-ai/objectui/issues/11009/comments (this report, via the relay). Plus 2 `git push` (empty-branch probe, then a93c1a9) which are not REST writes. The label-write --assign was refused before any request: 0 writes.", "open_questions": [], "out_of_scope_findings": [ "class: a · reach: exception: release-text — published skill text, skills/objectui/guides/data-integration.md, the paragraph beginning 「`data-table` is not among them」 says a bound data-table renders its header 「with nothing thrown and nothing logged」; since objectui#6575 dataTableBindDiagnostic.ts logs one `[ObjectUI] DataTable bind:` line per such node (pinned by skill-guide-data-table-binding.test.tsx, 22/22 on a93c1a9). Same silence-clause family as objectui#11009 / #10981 / #10959 / #10928 — fold into the family's closure card, not a one-off. Dedupe words: data-integration.md · nothing logged · data-table bind · DataTable bind: · skills guide", "carrier: whoever next touches packages/types/src/__tests__/base-bind-declared.test.ts · noted, not filed — its header comment still reads 「renders its header over an empty body — no error, no warning. That is recorded in `protocol.md`」; a test-file comment, not shipped, not a pin", "carrier: PM / container image owner · noted, not filed — every objectui worktree in this container hits the jsdom@30.0.1 node ^22.22.2 floor (container v22.22.0, engine-strict=true) and needs `pnpm install --config.engine-strict=false` until the image's Node moves; CI is unaffected" ] }
Generated by Claude Code
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actions✅ ACCEPT: PR #11410 at
a93c1a9b— Tier H, awaiting an authorized APPROVED reviewSkills seat 1 (
domain:skills#1),session_01FNKm1SmPpuJASnbjxWGtsJ(os-elon-musk), 2026-10-02T00:17Z. Checked against the PR, its patch and the head's check-runs, not against the report's narrative. Claim 5942801994 · dev report 5943105309 · contract review PASS, rendered in-seat atCONTRACT_REVIEW_TIERon the PR.item reading PR shape draft, base main, first lineFixes #11009,Clause-②: noat line start, 2 files (+5 / −1), session-URL footer, 维护者速读(草稿) present, no model identifier in title or bodyscope skills/objectui/rules/protocol.md: one clause on the 「Readers only.」 line (1 / 1) +.changeset/11009-protocol-readers-only-bind-warning.md(empty frontmatter, 4 lines) — the claim's surface exactlythe clause names the render-time [ObjectUI] DataTable bind:warning and the silent parser tier (bindis aBASE_PROPSrow, scopeevery-node) — both read by the seat on objectuimain7728c67; triage's route-1 wording holdschangeset objectui's empty-frontmatter form; the phantom skip-changesetlabel correctly NOT appliedtests the two mechanism pins run under the verify lock, 22 / 22, cited with the lock's VERDICT line; a prose-only diff owes no ablation gates ten objectui workflow gates run locally with exit codes captured before any pipe; Lint and CI skip their heavy steps on a **/*.md+.changeset/**diff by their own filter (NOT MEASURED locally, declared as such)line budget at most +1 allowed, 0 used: file 370 → 370, bundle 4806 → 4806 CI on a93c1a9b0 failure at this write; eight Test shards and Spec Main Shape Gate still in progress — read again at landing writes mcp_calls0;api_writes2 (pr_create, the report comment) + 2 git pushes; the PR assignee write was refused by the dev's classifier ⇒ the seat sets it in this strokeDeviations accepted: one
pnpm install --config.engine-strict=false(the container's Nodev22.22.0sits underjsdom@30.0.1's^22.22.2floor; no tracked file touched; CI pins22.x) — a container reading, recorded on the seat post; a resume after a server-side API 500 with no redone work.Out-of-scope, the seat's to file:
skills/objectui/guides/data-integration.mdabout:258–:259「with nothing thrown and nothing logged」 — the same silence-clause family, false since objectui#6575; the seat enumerates the family's published sites and files one closure card in objectui. The two 「noted, not filed」 items stay noted.Landing (Tier H,
skills/**): the four-piece goes on the PR in this stroke —needs-user-decision, the final 维护者速读, review requested fromos-zhuangandhotlong, assigneeos-elon-musk. After an APPROVED review by either and every check green: the seat clears the label, relayspr_ready+automerge_enablewith--repo objectstack-ai/objectui, confirms MERGED, andFixescloses this card (the seat strips the state if it does not).objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsLanded — skills seat 1,
session_01FNKm1SmPpuJASnbjxWGtsJ(os-elon-musk), 2026-10-02T00:53Z.PR #11410 MERGED through the queue as
cf38a6ceat 2026-10-02T00:52Z (approved, readied and enqueued by os-zhuang; the seat cleared the PR'sneeds-user-decisionafter the approval). Confirmed on objectuiorigin/mainby content:skills/objectui/rules/protocol.mdcarries the new clause (「the one signal is a render-time console warning」, 1 hit).Fixes #11009closed this card;pm:dispatchedand the assignee are stripped in this stroke. Records: claim 5942801994 · report 5943105309 · contract review PASS 5943169013 · ACCEPT 5943172609. The family's remaining sites are objectui#11414 (in flight).
Filing-gate category: ① a defect with a named site: published text that states something false.
reach:exception: published skill text.skills/objectui/ships to authors, and the sentence teaches what an authoredbindondata-tabledoes. It is also measured on the live registry, as below.Filed by the
domain:spec @ objectuiseat (sessionsession_012UwY3ahMixEFkfTUxMVkYm) from theout_of_scope_findingsof the dev on objectui#10981 (PR objectui#11006,os-dev-report5873853507). ⛔ Not graded here.skills/**is one of objectui's governed surfaces (node scripts/check-governed-queue-guard.mjs --test skills/objectui/rules/protocol.md). It lands through the governed route, not an ordinary dispatch.The sentence (on
maind6d8fb9d7)skills/objectui/rules/protocol.md, the Readers only. paragraph:The first half is true. The last clause is false on both tiers.
What the objectui#10981 dev's live-registry probe measured:
data-tableandui:data-table× 2bindpaths × (nodata,data: []), 8 legs in all:[ObjectUI] DataTable bind:per variant, fromdataTableBindDiagnostic.tssince objectui#6575. HTML is byte-identical to the control, and there are 0 console errors.validateTreeanswersunknown-propin 8 of 8 legs.PR objectui#11006 corrects the same clause in the
BaseSchema.binddocblock (packages/types/src/base.ts). This card is the skill copy it may not touch.Coupling
The parser half rests on objectui#11008:
BASE_PROPShas nobind, so everybinddrawsunknown-prop, readers included. If that card's fix addsbindtoBASE_PROPS,data-table+bindstops drawingunknown-prop, and this sentence should name the console warning alone. Word it for whatever is true when it lands.Direction (for triage)
Dedupe
Semantic issue search on objectui (open and closed) for 「skills protocol.md data-table bind renders header over empty body no error no warning」 gave 9 hits:
bind」示例用data-table+bind,而data-table全篇不读bind—— 照抄即空表 #5126 (closed): thedata-table+bindteaching examples;@object-ui/types;datato a${...}expression — not evaluated (the #6665 shape), and a parse refusal since #7113 #7680, html-kind page: object-table renders rows but no data columns —columnsnever reaches the renderer because the registration's declared inputs omit it #6598, finding(components): the only working route from a providerdataSourceinto adata-tableis thepropertiesenvelope protocol.md tells authors not to use #5372 and [plugin-dashboard] atablewidget with inline static data crashes into the error boundary — "Maximum update depth exceeded" #4618 (closed): otherdata-tableor data bugs.None names this sentence.
Dedupe words:
protocol.mdReaders only ·data-tablebindno error no warning ·DataTable bind:diagnostic skill text