Follow-up card filed at acceptance of objectstack-ai/objectstack#8010's spec half (PR objectstack-ai/objectstack#8324) by the domain:spec seat (session session_01Euoy6wyfzgiWtgCg4s6JK2), per the maintainer's 2026-08-12 option-A ruling ("the objectui renderer/type reconciliation follows with Blocked-by: on this card").
Blocked-by: objectstack-ai/objectstack#8010
What the spec now says (once #8324 merges)
ListView.exportOptions is a strict object: { formats?, maxRecords?, includeHeaders?, fileNamePrefix?, streaming? } — exactly the five keys ObjectGrid.tsx reads (measured at origin/main@878140b, :1596–:1642). The legacy bare format array is still accepted and lifts to { formats: [...] } at parse. 'pdf' left the format enum (#1301 NOT_PLANNED); declaring it is now a loud parse-time refusal with a prescription.
What objectui owes (measured on 878140b — re-verify on current main)
packages/types/src/objectql.ts:783–785 — the local exportOptions object type and its "Aligned with @objectstack/spec ListViewSchema.exportOptions" comment: the comment was false for the old spec and is nearly-true for the new one; align the type to the spec's five keys (or import/derive from the spec type) and make the comment true.
'pdf' in the local type/format handling: remove — the platform refuses it at publish now; the runtime console.warn drop path for it becomes dead.
- The
streaming read (ObjectGrid.tsx ~:1600/:1642, currently through as any): the key is now DECLARED in the spec — type it properly and delete the cast.
- Renderer continues to read
.formats — with the spec's parse-time array lift, a stored bare-array declaration arrives as the object form through any spec-parsing path; confirm whichever path feeds ObjectGrid its schema (spec-parsed vs raw JSON) and keep the renderer's own array tolerance only if raw un-parsed metadata can still reach it (state which in the PR).
Constraints
- No new keys beyond the spec's five — a sixth undeclared-but-read key recreates the defect #8010 closed.
- Re-check commands:
git grep -n "exportOptions" -- packages/plugin-grid/src/ObjectGrid.tsx packages/types/src/objectql.ts; spec side git grep -n "ListViewExportOptionsSchema" -- ../objectstack/packages/spec/src/ui/view.zod.ts (or the published 17.x dist once the pin bumps).
- Business context: unblocks the XLSX half of
steedos-labs/os-project-titanwind-ehr#1161 (§7.7) end-to-end once both halves land.
Follow-up card filed at acceptance of objectstack-ai/objectstack#8010's spec half (PR objectstack-ai/objectstack#8324) by the
domain:specseat (sessionsession_01Euoy6wyfzgiWtgCg4s6JK2), per the maintainer's 2026-08-12 option-A ruling ("the objectui renderer/type reconciliation follows withBlocked-by:on this card").Blocked-by: objectstack-ai/objectstack#8010
What the spec now says (once #8324 merges)
ListView.exportOptionsis a strict object:{ formats?, maxRecords?, includeHeaders?, fileNamePrefix?, streaming? }— exactly the five keysObjectGrid.tsxreads (measured atorigin/main@878140b,:1596–:1642). The legacy bare format array is still accepted and lifts to{ formats: [...] }at parse.'pdf'left the format enum (#1301 NOT_PLANNED); declaring it is now a loud parse-time refusal with a prescription.What objectui owes (measured on
878140b— re-verify on current main)packages/types/src/objectql.ts:783–785— the localexportOptionsobject type and its "Aligned with @objectstack/spec ListViewSchema.exportOptions" comment: the comment was false for the old spec and is nearly-true for the new one; align the type to the spec's five keys (or import/derive from the spec type) and make the comment true.'pdf'in the local type/format handling: remove — the platform refuses it at publish now; the runtimeconsole.warndrop path for it becomes dead.streamingread (ObjectGrid.tsx~:1600/:1642, currently throughas any): the key is now DECLARED in the spec — type it properly and delete the cast..formats— with the spec's parse-time array lift, a stored bare-array declaration arrives as the object form through any spec-parsing path; confirm whichever path feeds ObjectGrid its schema (spec-parsed vs raw JSON) and keep the renderer's own array tolerance only if raw un-parsed metadata can still reach it (state which in the PR).Constraints
git grep -n "exportOptions" -- packages/plugin-grid/src/ObjectGrid.tsx packages/types/src/objectql.ts; spec sidegit grep -n "ListViewExportOptionsSchema" -- ../objectstack/packages/spec/src/ui/view.zod.ts(or the published 17.x dist once the pin bumps).steedos-labs/os-project-titanwind-ehr#1161(§7.7) end-to-end once both halves land.