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
[finding] spec(report): a type: 'joined' report whose blocks bind no dataset parses and passes objectstack validate, while ReportSchema's own refinement comment and reports.mdx say "each block dataset-bound" #21702
Filed by the director seat, summon #32 (session_016tKoy8NJa35Yih1FdzrVmn), holder of #21464's S-objectui-held claim 5976829576, from that stage's dev report 5977481177 (out-of-scope finding 1; PR #21699). ⛔ Not a claim. Routing and grading are triage's.
The gap
Declared:packages/spec/src/ui/report.zod.ts, the ReportSchemasuperRefine comment: "A joined report carries its data on blocks (each block dataset-bound)". content/docs/ui/reports.mdx's type table says the same: "blocks[] (each block dataset-bound)".
Enforced: the joined branch of the refinement only requires blocks to be non-empty. JoinedReportBlockSchema.dataset is optional, and nothing requires it. Read on main1db5322ba2.
Effect (class b: accepted, then silently not drawn)
plugin-reportReportRenderer.tsx (about :92, isDatasetReport; DatasetReportRenderer.tsx about :208–:214) falls through to the pre-9.0 presentation bridge (about :108), which issues no query.
plugin-dashboardDrillDownDrawer.tsx (about :92, isDatasetBoundReport) lists the records instead of drawing the report.
The author gets no error at authoring, validate or publish.
Why it matters now
#21464's fork on object-metricdrillDown.report (dev open question 1 in 5977481177) recommends typing report by reference to ReportSchemaafter this refinement, so that "admitted" implies "drawn". This card is that prerequisite; the fork itself is the maintainer's decision.
Dedupe words: joined report block dataset optional, ReportSchema joined block unbound dataset validate, each block dataset-bound not enforced. MCP search_issues, scoped to this repo, for 「ReportSchema joined report block dataset optional, each block dataset-bound not enforced」 → 4 hits, all closed (#19822, #19856, #20161, #5013). None names a block with no dataset.
Filed by the director seat, summon #32 (
session_016tKoy8NJa35Yih1FdzrVmn), holder of #21464's S-objectui-held claim5976829576, from that stage's dev report5977481177(out-of-scope finding 1; PR #21699). ⛔ Not a claim. Routing and grading are triage's.The gap
packages/spec/src/ui/report.zod.ts, theReportSchemasuperRefinecomment: "Ajoinedreport carries its data onblocks(each block dataset-bound)".content/docs/ui/reports.mdx's type table says the same: "blocks[](each block dataset-bound)".blocksto be non-empty.JoinedReportBlockSchema.datasetis optional, and nothing requires it. Read onmain1db5322ba2.objectstack validateexits 0 on a stack whose report is{ name, label, type: 'joined', blocks: [{ name, label }, { name, label }] }. Control: the same report with a block bound to an undeclared dataset is refused (chart-dataset-unknownatreports[0].blocks[0].dataset), so the validator walks blocks but does not require the binding.Effect (class b: accepted, then silently not drawn)
plugin-reportReportRenderer.tsx(about:92,isDatasetReport;DatasetReportRenderer.tsxabout:208–:214) falls through to the pre-9.0 presentation bridge (about:108), which issues no query.plugin-dashboardDrillDownDrawer.tsx(about:92,isDatasetBoundReport) lists the records instead of drawing the report.Why it matters now
#21464's fork on
object-metricdrillDown.report(dev open question 1 in5977481177) recommends typingreportby reference toReportSchemaafter this refinement, so that "admitted" implies "drawn". This card is that prerequisite; the fork itself is the maintainer's decision.Direction to judge
ReportSchema's refinement refuse a block with nodataset(a narrowing, soClause-②: yes (narrowing)and the registered-narrowing path, as earlier report narrowings [finding] atype: 'joined'report accepts top-leveldataset/rows/columns/values, and the renderer never reads them; the refinement refuses onlyorder#19856 and [finding] a joined report'schart— container andblocks[].chart— parses and is never drawn, while the liveness ledger names the joined branch as its reader #20161 went).examples/**, objectui fixtures, hotcrm and cloud. Measured so far by the spec(ui): theComponentPropsMaprows 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 dev: objectstack's only joined report (examples/app-showcase/src/ui/reports/index.ts,TaskOverviewReport) binds a dataset in every block. hotcrm and cloud are not yet measured.Related
#21464 · PR #21699 · #19856 and #20161 (earlier joined-report narrowings) · ADR-0021 (single-form) · ADR-0049 (enforce-or-remove).
Dedupe words:
joined report block dataset optional,ReportSchema joined block unbound dataset validate,each block dataset-bound not enforced. MCPsearch_issues, scoped to this repo, for 「ReportSchema joined report block dataset optional, each block dataset-bound not enforced」 → 4 hits, all closed (#19822, #19856, #20161, #5013). None names a block with nodataset.Generated by Claude Code