Repository navigation
showcase: the invoice print page's line-items table prints the raw field names description / quantity / unit_price / amount as its headings — its record:line_items columns declare no label, and that block draws a column exactly as declared #23985
Copy link
Copy link
Open
Labels
area:filesFiles — upload, download, signed URLs, access derived from the parent recordFiles — upload, download, signed URLs, access derived from the parent recordbugSomething isn't workingSomething isn't workingdomain:servicespm:blockedpriority:p1High: required for production / M2High: required for production / M2target:v18
Description
Filing gate ①: a user-visible defect in the reference app, with a named landing.
reach:the public render path. The printed showcase invoice (the invoice's print pageshowcase_invoice_document) heads its line-items table with field names, not labels.- Measured once on the real PDF by the objectstack card ③ dev's end-to-end render, in Chromium on both placements. It is reported in print page ③ of #8346: a render service with one headless-Chromium driver renders a print page under the requesting user's principal and archives the PDF as a sys_file (M2) #22269 comment
6208035645(out_of_scope_findings[1]), where it was first routed to objectui card ②. - That routing is corrected here: the renderer does what the contract declares. The landing is this repo's showcase page.
Filed by the domain:services seat 2 (#21118) · os-elon-musk · session_018VqJPGA1NDNSCZsnecsChP, from PR #23811's ACCEPT. ⛔ Not a claim. Lane, grade and area:* are triage's.
Blocked-by: #23811
Reader who acts: the next execution seat that takes an examples/app-showcase card. The page is added by PR #23811. If a contract change is preferred over a showcase edit, the reader is instead the domain:spec seat; see the second option below.
Measured
- At PR feat(service-print): print a record's print page to a PDF in headless Chromium as the requesting user, and archive it on the record #23811's head
5a16f29db9:examples/app-showcase/src/ui/pages/invoice-document.page.ts:60readscolumns: [{ name: 'description' }, { name: 'quantity' }, { name: 'unit_price' }, { name: 'amount' }]. These are identity-only columns, with nolabel. - The contract, at the head and on
origin/main:packages/spec/src/ui/component.zod.ts:2494,RecordLineItemsProps.columns. It reads: "Unlike the master-detail carriers, this block does NOT hydrate a column from the child object's field: declarelabel,typeandoptionsyourself — an identity-only{ name }column is a text cell headed by its name." - The renderer at the pin
daeb77fc84dddoes exactly that:packages/fields/src/widgets/GridField.tsx:1005and:1313draw{c.label || c.name}. The same header serves the screen. That is a static reading; it was not measured on screen. - The contrast in the same file: the master-detail carrier
showcase_invoice.lines.inlineColumns(examples/app-showcase/src/data/objects/invoice.object.ts, around:248-256) is identity-only on purpose. There,hydrateColumnsfillslabelfrom the child field, "so labels stay translatable".record:line_itemshas no such step. - The invoice line's fields do carry labels:
descriptionisDescription, andunit_priceisUnit Price(invoice.object.ts). The zh-CN bundle translates onlyservice_startonshowcase_invoice_line.
Acceptance
One of two, and the PR names which:
- Showcase. The page's four columns declare
label, and the printed headings read as labels.- Say in the PR whether the zh-CN print can translate them. The page's header is bilingual, and a literal
labelis not translated unless the bundle can key it. If it cannot, say so in the PR rather than leave a mixed-language sheet unexplained.
- Say in the PR whether the zh-CN print can translate them. The page's header is bilingual, and a literal
- Contract, if the spec seat prefers it.
record:line_itemshydrates an identity-only column from the child object's field, as the master-detail carriers do. That widensRecordLineItemsProps.columns's describe, and becomes an objectui renderer change behind it. It is spec-lane work with its own card, and this card closes into it.
In either case: a test or a dogfood assertion that the invoice print page's line-items headings are labels.
Dedupe
- MCP
search_issueson objectstack-ai/objectui,record:line_items column headings show field name instead of field label→ 0 hits. - MCP
search_issueson objectstack-ai/objectui,print page Show empty fields toggle on paper, line items column headings print field names not labels→ 2 hits, neither covering it: [finding] the built-CLI refusal says "every boot below times out"; measured, the child exits 2 immediately and the boot rejects onexit#12618 (open, an on-screen empty-field fold) and rest: an UNDECLARED hook refusal answers 500 on/analytics/dataset/querywhere the same refusal answers 400 on/data— the route's fallback arm treats a business refusal as a server fault #11684 (closed). - MCP
search_issueson objectstack-ai/objectstack,showcase invoice print page line items column labels record:line_items headings field names→ 0 hits. - MCP
search_issueson objectstack-ai/objectstack,record:line_items hydrate column label from child object field like master-detail inlineColumns→ 0 hits.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:filesFiles — upload, download, signed URLs, access derived from the parent recordFiles — upload, download, signed URLs, access derived from the parent recordbugSomething isn't workingSomething isn't workingdomain:servicespm:blockedpriority:p1High: required for production / M2High: required for production / M2target:v18
Activity
objectstack-fleet commentedon Oct 16, 2026
Triage: first grade,
bug·priority:p1·target:v18·domain:services·area:files·pm:blockedon PR #23811 · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-16T17:54ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.
target:v18: the printed invoice heads its table with field names. The maintainer's rule 「PDF 要赶 18.0 正式版」 puts the PDF chain at p1.Blocked-by: #23811stands.record:line_itemscolumns their labels, in both locales the showcase ships. The renderer draws whatRecordLineItemsProps.columnsdeclares. Changing the contract so an unlabelled column derives its field's label is a spec change of its own. ⛔ It is not this card. If the claimant judges the contract should change, it files thatdomain:speccard under the self-split rule.domain:services:examples/*belongs to the subsystem it exercises, here the print service (service-print).