You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
skills/objectstack-ui: the kind: 'html' page example writes <object-metric aggregate="count">, a string the html tier only warns on and the tile cannot draw #21627
Filing gate: ① a defect, class (c), an authoring trap in a published skill.reach: a named producer, the published skill skills/objectstack-ui (it ships to customer projects via npx skills add), plus the public door the dev measured: the html-tier compile that objectstack build wires. Filed by the domain:spec seat 1 (session_01T9u38rswFp5Rw8DswRUReJ, seat post #6017) from the #21464 stage-4 dev report (5972873924, out_of_scope_findings[0]), re-read by the seat on origin/main. ⛔ Filed bare: grading and routing are triage's. ⛔ Not a claim.
Reader who acts: triage grades and routes it. The fix is one line in skills/**, a Tier H surface, so it lands by the maintainer's hand or an authorized approval.
The trap
skills/objectstack-ui/rules/pages.md:160 (on origin/main), in the kind: 'html' example, reads verbatim: <object-metric objectName="ticket" aggregate="count" label="Open tickets" />.
The tile reads aggregate as an object (aggregate.field, aggregate.function). At the objectui pin 89cad75d557, ObjectMetricWidget.tsxcomputeOne (about :403–:443) asks the server for a measure built from those two members. A bare string gives both as undefined.
Measured by the dev through the html tier's own compile with the committed component manifest (the path objectstack build wires at packages/cli/src/commands/compile.ts:543): one warning (type-mismatch, "prop "aggregate" expected an object"). The compiled node still carries aggregate: "count". The same tag with aggregate={{"function":"count"}} compiles clean.
So the published skill teaches an AI author a value that builds green (a warning only), renders no number, and that the skill presents as the canonical example.
The sibling surfaces are spelled correctly: skills/objectstack-ui/rules/dashboards.md:125 (aggregate={{ field: 'total', function: 'sum', groupBy: 'status' }}) and the analytics-inline-vs-dataset eval (aggregate={{ function: 'count', groupBy: 'status' }}).
Landing site
skills/objectstack-ui/rules/pages.md:160: aggregate={{"function":"count"}}, in the html tier's own expression spelling as the other attributes in that example use (style={{…}}, gap={6}).
Filing gate: ① a defect, class (c), an authoring trap in a published skill.
reach:a named producer, the published skillskills/objectstack-ui(it ships to customer projects vianpx skills add), plus the public door the dev measured: the html-tier compile thatobjectstack buildwires. Filed by thedomain:specseat 1 (session_01T9u38rswFp5Rw8DswRUReJ, seat post #6017) from the #21464 stage-4 dev report (5972873924,out_of_scope_findings[0]), re-read by the seat onorigin/main. ⛔ Filed bare: grading and routing are triage's. ⛔ Not a claim.Reader who acts: triage grades and routes it. The fix is one line in
skills/**, a Tier H surface, so it lands by the maintainer's hand or an authorized approval.The trap
skills/objectstack-ui/rules/pages.md:160(onorigin/main), in thekind: 'html'example, reads verbatim:<object-metric objectName="ticket" aggregate="count" label="Open tickets" />.aggregateas an object (aggregate.field,aggregate.function). At the objectui pin89cad75d557,ObjectMetricWidget.tsxcomputeOne(about:403–:443) asks the server for a measure built from those two members. A bare string gives both as undefined.objectstack buildwires atpackages/cli/src/commands/compile.ts:543): onewarning(type-mismatch, "prop "aggregate" expected an object"). The compiled node still carriesaggregate: "count". The same tag withaggregate={{"function":"count"}}compiles clean.skills/objectstack-ui/rules/dashboards.md:125(aggregate={{ field: 'total', function: 'sum', groupBy: 'status' }}) and theanalytics-inline-vs-dataseteval (aggregate={{ function: 'count', groupBy: 'status' }}).Landing site
skills/objectstack-ui/rules/pages.md:160:aggregate={{"function":"count"}}, in the html tier's own expression spelling as the other attributes in that example use (style={{…}},gap={6}).ComponentPropsMaprows still type renderer-read members asz.unknown()—navigationon object-map / object-gantt / object-tree andconditionalFormattingon object-kanban accept42— the family close-out after #21445 #21464 (PR feat(spec)!: object-metric aggregate and trend take the shape the tile reads; drillDown, compareTo held for a ruling (#21464, stage 4) #21622) now typesobject-metric'saggregateat the schema door, so the JSX / React tiers refuse the string loudly. Whether the html tier'stype-mismatchshould stay a warning is a separate question this card does not ask.Dedupe
MCP
search_issues, repo-scoped, open and closed together:skills/objectstack-query/SKILL.mdtells an agent that engineaggregaterefusessearch/searchFields— false since PR #20487 #20500, service-analytics: the object-form analyticswhereskips the shared comparand-TYPE face, so a plain-object / Map / oversized-bigint comparand is bound as JSON text on the native path while the FilterArray spelling and the engine refuse 400 #20035, Published skills: every objectstack skill ships ≥ 3 evals in the objectui fixture shape, replacing the 「Not yet implemented」 placeholders (maintainer direct dispatch, batch #213 item 2) #19714 and Skills optimization flight — skills/objectstack-query: RESTRUCTURE (≈ −4,088 tok, −33%) — seven rules stated twice across SKILL.md and rules/, 27% of tokens on an aggregation surface with zero app-author call sites,context(74 real usages) taught nowhere, and the canonicalexpandexample expands nothing #14302, all closed and about other skills or services).Dedupe words: object-metric aggregate count skill pages.md · html tier type-mismatch warning aggregate · kind html object-metric example