Repository navigation
[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
Activity
Concentrated triage batch:
finding→pm:queue+domain:ui, Bug — published skill content teaches aQueryResultshape that does not exist (:275return result.records;re-verified onorigin/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:78in the same pass so the wrong example stops being self-consistent.
Generated by Claude Code
- addeddomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removed
on Aug 25, 2026 - addedpm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatchQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
on Aug 25, 2026 os-support-ai commented
on Aug 25, 2026 CollaboratorMore actions⚠️ pm:retriage— this card and #6006 target the SAME FILE from two different lanesdomain:ui@ objectui execution seat, PM sessionsession_011SfZeFWrhGLHmfq61xbz4q. ⛔ Not claiming, ⛔ not re-grading, ⛔ not re-routing.pm:retriageattached alongside; ⛔pm:queuedeliberately 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:uiskills/objectui/guides/data-integration.md— teaches aQueryResultshape that does not exist#6006 domain:skillsthe same file — teaches a QueryParamsshapeBoth 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
asArrayhelpers read three result shapes, two of which are notQueryResultmembers — a tolerant reader standing in for the contract #5945 (domain:ui,pm:queue) — "asArrayhelpers read three result shapes, two of which are notQueryResultmembers". Same type, same misunderstanding, different surface. If [finding]skills/objectui/guides/data-integration.mdteaches aQueryResultshape that does not exist — the declared sketch omitsdata, so the wrong example is consistent with it #5947's fix states the trueQueryResultshape,asArrayhelpers read three result shapes, two of which are notQueryResultmembers — a tolerant reader standing in for the contract #5945 is where the code that tolerates the false ones lives.- The published skills corpus still presents the row-predicate three-way binding as peers, with no sign that two of the three now warn (Phase 1 shipped) #5759 and The published skills corpus teaches the retired
tablecolumn aliases — prose documents thenamefallback and the example authorslabel#5473 — the published skills corpus teaching other stale shapes. Same corpus, same class. - ⭐ check-doc-snippet-types 的扫描面不含
skills/—— agent 复制进用户仓的代码样例,没有任何 typechecker 编译过 #5465 —check-doc-snippet-types' scan surface excludesskills/, so agent-copied examples in the published corpus are typechecked by nothing. That is the gate gap that lets every card in this list exist, and it is alreadypm:dispatched.
Premise verified, so the card itself is sound
On
origin/main@5f19b9263:skills/objectui/guides/data-integration.mdexists, and it is the only file underskills/mentioningQueryResult— 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 thedomain:uilabel was itself a mis-route, sinceskills/**reads likedomain:skillsterritory. It is not clearly wrong: objectui's three-way split (2026-08-21) sends the engineering surface todomain:devx, the contract surface todomain:spec, and the published libraries and apps todomain: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
- addeddomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removed
on Aug 29, 2026 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
- added and removeddomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seat
on Aug 29, 2026 huangyiirene commented
on Aug 29, 2026 CollaboratorMore actions分诊:解决双车道 —— 定为
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:卡面自己先排除了(「notdomain:devxjust 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
- addeddomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removed
on Aug 29, 2026
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 nodomain:*— 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.:275return result.records;QueryResulthas norecordsmember. Real shape:{ data, total, page, pageSize, hasMore, cursor, metadata }filter:,sort:,limit: 20convertQueryParamscopies only$-prefixed keys. This is exactly the #5458 class, published to skill consumers:78QueryResultsketch declaresrecords?: T[]andpageNumber?, omittingdataentirely: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 thereturnline 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
QueryResultshape here does not mislead one reader once; it teaches every consuming agent to writeresult.records, which resolves toundefinedagainst 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 theasArrayhelpers in #5945), and inDashboardFilterBarit 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:
QueryResult), which arguesdomain:spec;domain:devxjust because Four liveadapter.findcalls pass an unprefixed query option — andno-query-params-under-optionsgates only the sibling half of the class #5458 surfaced it.Constraints for whoever takes it
:78(the declaration) before:275(the usage), or the two will disagree again.adapter.findcalls pass an unprefixed query option — andno-query-params-under-optionsgates only the sibling half of the class #5458 class;object-ui/no-unprefixed-query-paramsnow rejects that shape in source, but ⛔ no gate reaches a fenced snippet insideskills/**— related: check-doc-snippet-types 的扫描面不含skills/—— agent 复制进用户仓的代码样例,没有任何 typechecker 编译过 #5465 (the doc-snippet gate's scan surface excludesskills/).Evidence: #5458 (and PR #5946), #5945, #5944, #5465.