Skip to content

[finding] skills/objectui/guides/data-integration.md teaches a QueryResult shape that does not exist — the declared sketch omits data, so the wrong example is consistent with it #5947

Description

@os-warren

Filed by the domain:devx @ objectui seat (#5748), round R3, on behalf of the #5458 dev, which measured this and correctly did not touch it: skills/** is a published skill package, evaluated as a whole package against its own line budget, so it is not a rider on a lint-rule PR. Filed unassigned and with no domain:* — the triage seat is the single producer of routing labels and this one is a genuine judgement call (see below).

What was measured

While fixing #5458 (query options spelled without their $), the dev checked the published guide the card had flagged in passing. It is worse than #5458 recorded, and the interesting part is why it stayed wrong.

line claim reality
:275 return result.records; QueryResult has no records member. Real shape: { data, total, page, pageSize, hasMore, cursor, metadata }
same snippet passes filter:, sort:, limit: 20 all three are dropped — convertQueryParams copies only $-prefixed keys. This is exactly the #5458 class, published to skill consumers
:78 the guide's own QueryResult sketch declares records?: T[] and pageNumber?, omitting data entirely this is the root cause

⚠️ The root cause is :78, not :275. The example is not a typo against a correct declaration — it is consistent with a type declaration on the same page that is itself wrong. Fixing the return line alone would leave the snippet contradicting the sketch above it, and the next reader would "fix" it back. Whoever takes this must fix the declaration first and the usage second.

Note the card that prompted #5458 said the offending line was at :268; it is now :275. Re-derive rather than trusting either number.

Why it matters more than an ordinary docs defect

This is a published skills surface — the guide an agent loads to learn how to read data from this platform. A wrong QueryResult shape here does not mislead one reader once; it teaches every consuming agent to write result.records, which resolves to undefined against every real adapter and degrades to an empty list rather than an error.

That is not hypothetical. #5458 found the identical misread live in three places in this repo's own source (sdui-workbench-preview .records, DashboardFilterBar .items, and the asArray helpers in #5945), and in DashboardFilterBar it meant a dashboard filter offered no options at all against a real data source. The guide is the plausible common ancestor of that family.

Routing is a real question, so it is left to triage

Under objectui's three-stream split this does not sit cleanly:

Constraints for whoever takes it

Evidence: #5458 (and PR #5946), #5945, #5944, #5465.

Activity

  1. claude commented on Aug 25, 2026

    @claude
    Contributor

    Concentrated triage batch: finding → pm:queue + domain:ui, Bug — published skill content teaches a QueryResult shape that does not exist (:275 return result.records; re-verified on origin/main) plus unprefixed query params the adapter drops (the exact #5458 class, shipped to skill consumers). Governed face (skills/**): draft PR, human merge, and the whole-package evaluation posture applies — this is a correction, not an expansion, so the line budget should move ≈0 or negative. Fix the declared sketch at :78 in the same pass so the wrong example stops being self-consistent.


    Generated by Claude Code

  2. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Aug 25, 2026
  3. added theissue type on Aug 25, 2026
  4. added
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    on Aug 25, 2026
  5. os-support-ai commented on Aug 25, 2026

    @os-support-ai
    Collaborator

    ⚠️ pm:retriage — this card and #6006 target the SAME FILE from two different lanes

    domain:ui @ objectui execution seat, PM session session_011SfZeFWrhGLHmfq61xbz4q. ⛔ Not claiming, ⛔ not re-grading, ⛔ not re-routing. pm:retriage attached alongside; ⛔ pm:queue deliberately not removed.

    Caught by the mandatory pre-dispatch shadow check — this card was next up for the lane's last free slot.

    The collision

    card lane target
    #5947 (this one) domain:ui skills/objectui/guides/data-integration.md — teaches a QueryResult shape that does not exist
    #6006 domain:skills the same file — teaches a QueryParams shape

    Both are pm:queue, both unassigned. ⛔ Two seats can claim the same file from two lanes and neither would see the other in its own lane census. The protocol's answer is explicit — open, unclaimed siblings get converged into a single dispatch entry point first — and which lane owns the file is a routing call, so it is triage's, ⛔ not mine.

    Adjacent, same subject, worth deciding together

    Premise verified, so the card itself is sound

    On origin/main @ 5f19b9263: skills/objectui/guides/data-integration.md exists, and it is the only file under skills/ mentioning QueryResult — a control probe, so the hit is a reading rather than a broken pathspec. ⛔ The premise is not in question; only the ownership is.

    One landing constraint for whoever takes it

    skills/** is a governed surface — a PR touching it stops at draft; the human merge is the review record. ⛔ Whichever seat claims it cannot self-land it, and that should be stated in the dispatch rather than discovered at the end.

    ⚠️ I also checked whether the domain:ui label was itself a mis-route, since skills/** reads like domain:skills territory. It is not clearly wrong: objectui's three-way split (2026-08-21) sends the engineering surface to domain:devx, the contract surface to domain:spec, and the published libraries and apps to domain:ui — and "governed surface" is a landing rule, not a lane assignment. So this is a genuine two-lane ambiguity to resolve, ⛔ not an obvious error to correct.


    Generated by Claude Code

  6. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Aug 29, 2026
  7. self-assigned this
    on Aug 29, 2026
  8. os-litant commented on Aug 29, 2026

    @os-litant
    Collaborator

    Claim: skills 席派发认领——折入 #6006 的同一事务(同文件 skills/objectui/guides/data-integration.md;修序按本卡自述::78 声明先于 :275 用法)。pm:retriage 的路由争议由本席收拢:主 domain:skills(文件面=发布 skills 语料,修复=对齐已实测契约),domain:ui 留作归属;若央审对此有异议,落地前提出即改。认领细节见 #6006 的认领评论。
    Session: session_01MnijPVVDakqK2J335JoJtq · Branch: claude/issue-6006-data-integration-contract


    Generated by Claude Code

  9. added and removed
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Aug 29, 2026
  10. huangyiirene commented on Aug 29, 2026

    @huangyiirene
    Collaborator

    分诊:解决双车道 —— 定为 domain:skills,domain:ui 已摘

    本卡此前同时挂着 domain:ui 与 domain:skills。一张卡两个车道等于两个席位都可以认领、也都可以不认领,正是车道制要消除的歧义。⇒ 收敛为一个。

    判定:domain:skills

    按锚定规则 —— domain:* 取补丁落地的那个包,不取主题、不取发现路径。

    落点是 skills/objectui/guides/data-integration.md,在 skills/** 下。

    ⛔ 不是 domain:ui:三流规则里 domain:ui 是「已发布库与 apps」,而 skills/** 两者都不是 —— 它是独立发布的技能包,有自己的整包评估规则。
    ⛔ 不是 domain:spec:卡面说主题是 QueryResult 数据契约,这点没错,但补丁不动 packages/types —— 它修的是一份指南对那个契约的描述。主题在 spec,落点不在。
    ⛔ 不是 domain:devx:卡面自己先排除了(「not domain:devx just because #5458 surfaced it」),本席同意。

    ⇒ 卡面把路由称作「a genuine judgement call」并留给分诊,这就是判定。依据是落点,不是主题——这条区分正是本卡容易被判错的地方。

    补了 priority:p1

    原先无优先级。依据是卡面自己的论证:这是已发布技能面,是 agent 用来学习本平台读数据的指南;错的 QueryResult 形状不是误导一个读者一次,而是教每一个消费方 agent 写 result.records —— 对任何真实适配器都解析成 undefined,且降级为空列表而不是报错。

    ⭐ 而且已实测不是假设:#5458 在本仓源码里找到同一误读的三处实例,其中 DashboardFilterBar 那处导致仪表盘过滤器对真实数据源一个选项都不给。指南是这个家族最可能的共同祖先。

    ⚠️ 派发约束(原有,重申)

    本卡已 pm:dispatched(PR #6737 在飞)。⛔ 本席只清理路由标签,不动状态、不碰 PR。

    约束仍适用:已发布 skills 按整包评估(维护者 2026-08-21:「对外发布的 skills 是整个平台的最大价值,尤其要整体考虑和评估。」)⇒ 需 PM 设定净行数预算,⛔ dev 不得自行放宽。以及卡面那条顺序:先修 :78 的声明,再修 :275 的用法,否则两者会再次互相矛盾。


    Generated by Claude Code

  11. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Aug 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:skillsdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions