Skip to content

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

@objectstack-fleet

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 authored bind on data-table does. It is also measured on the live registry, as below.

Filed by the domain:spec @ objectui seat (session session_012UwY3ahMixEFkfTUxMVkYm) from the out_of_scope_findings of the dev on objectui#10981 (PR objectui#11006, os-dev-report 5873853507). ⛔ Not graded here.

⚠️ Governed surface. 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 main d6d8fb9d7)

skills/objectui/rules/protocol.md, the Readers only. paragraph:

data-table does NOT: it reads its rows from an inline data array on the node, so a bind on it is ignored and the table renders its header over an empty body — no error, no warning.

The first half is true. The last clause is false on both tiers.

What the objectui#10981 dev's live-registry probe measured: data-table and ui:data-table × 2 bind paths × (no data, data: []), 8 legs in all:

  • Render: exactly one console warning [ObjectUI] DataTable bind: per variant, from dataTableBindDiagnostic.ts since objectui#6575. HTML is byte-identical to the control, and there are 0 console errors.
  • Parser: validateTree answers unknown-prop in 8 of 8 legs.

PR objectui#11006 corrects the same clause in the BaseSchema.bind docblock (packages/types/src/base.ts). This card is the skill copy it may not touch.

Coupling

The parser half rests on objectui#11008: BASE_PROPS has no bind, so every bind draws unknown-prop, readers included. If that card's fix adds bind to BASE_PROPS, data-table + bind stops drawing unknown-prop, and this sentence should name the console warning alone. Word it for whatever is true when it lands.

Direction (for triage)

  • Change only the false clause.
  • No example change: the objectui#5337 repair already stands.

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:

None names this sentence.

Dedupe words: protocol.md Readers only · data-table bind no error no warning · DataTable bind: diagnostic skill text

Activity

  1. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Addendum from the at-tier contract review of PR #11006 (record 5874097593, ③ (a)). From the domain:spec @ objectui seat, session session_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.bind sentence in packages/types/src/base.ts keeps 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.ts wording, adjusted for whatever objectui#11008 leaves true.
  2. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Path: write metadata — the published skill's words are true | 缺项 (rules/protocol.md 「Readers only.」) | P2

    Triage: first grade — bug · documentation · priority:p2 · domain:skills · pm:blocked (finding removed)

    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 (bind joins BASE_PROPS). After it, data-table + bind draws no unknown-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.
    • It keeps the first half ("a bind on it is ignored and the table renders its header over an empty body"), which is true.
  3. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock — skills seat (domain:skills @ objectui, #11311), session_01KTZmMfzVzjNvyaLyQ8mHvg, 2026-10-01T02:09Z.

    Blocked-by: objectstack-ai/objectui#11008 is satisfied: #11008 reads closed / completed at this write. pm:blocked → pm:queue; no assignee. Serial constraint recorded for the claim: skills/objectui/rules/protocol.md is also a landing file of #11183 (the action:* node example), so this card follows #11183 on that file unless the two regions are declared disjoint at claim.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01FNKm1SmPpuJASnbjxWGtsJ
    Account: os-elon-musk (the seat's linked user as GET /user answers 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 (objectstack scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectui --tier skills/objectui/rules/protocol.md at 434c6c7c: 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) MERGED b387d5e6d 2026-10-01T08:12Z — same-day churn, the dev bases on the merged text; no open objectui PR touches skills/objectui/rules/protocol.md (all 5 open PRs' file lists read in this claim's minute: #11406 and #11404 touch guides/page-builder.md, #11397 guides/mobile.md); Blocked-by: objectstack-ai/objectui#11008 satisfied (closed completed; on objectui main 7728c67 bind is a BASE_PROPS entry with scope every-node, so the clause names the render-time warning alone); no in-flight lane claim on this board.

  5. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    os-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

  6. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    ✅ ACCEPT: PR #11410 at a93c1a9b — Tier H, awaiting an authorized APPROVED review

    Skills 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 at CONTRACT_REVIEW_TIER on the PR.

    item reading
    PR shape draft, base main, first line Fixes #11009, Clause-②: no at line start, 2 files (+5 / −1), session-URL footer, 维护者速读(草稿) present, no model identifier in title or body
    scope 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 exactly
    the clause names the render-time [ObjectUI] DataTable bind: warning and the silent parser tier (bind is a BASE_PROPS row, scope every-node) — both read by the seat on objectui main 7728c67; triage's route-1 wording holds
    changeset objectui's empty-frontmatter form; the phantom skip-changeset label correctly NOT applied
    tests 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 a93c1a9b 0 failure at this write; eight Test shards and Spec Main Shape Gate still in progress — read again at landing
    writes mcp_calls 0; api_writes 2 (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 stroke

    Deviations accepted: one pnpm install --config.engine-strict=false (the container's Node v22.22.0 sits under jsdom@30.0.1's ^22.22.2 floor; no tracked file touched; CI pins 22.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.md about :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 from os-zhuang and hotlong, assignee os-elon-musk. After an APPROVED review by either and every check green: the seat clears the label, relays pr_ready + automerge_enable with --repo objectstack-ai/objectui, confirms MERGED, and Fixes closes this card (the seat strips the state if it does not).

  7. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed — skills seat 1, session_01FNKm1SmPpuJASnbjxWGtsJ (os-elon-musk), 2026-10-02T00:53Z.

    PR #11410 MERGED through the queue as cf38a6ce at 2026-10-02T00:52Z (approved, readied and enqueued by os-zhuang; the seat cleared the PR's needs-user-decision after the approval). Confirmed on objectui origin/main by content: skills/objectui/rules/protocol.md carries the new clause (「the one signal is a render-time console warning」, 1 hit). Fixes #11009 closed this card; pm:dispatched and 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).

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions