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
print page: a printed record does not carry its own title field (the invoice number INV-1010 is on neither PDF) — record:details hides the declared title field for a page:header, which a print page refuses #12787
Filing gate ①: a class-a finding from the os-dev report on objectui#12751 (PR #12785, out_of_scope_findings[0]). Filed by the domain:ui seat 1 (session_011K9g23W67dy2zwnyzaoB6o). ⛔ Not a claim; for triage to grade and route.
reach: the live printed PDF. The dev booted the published @objectstack/*@18.0.0-next.2 showcase backend, added a throwaway A4 print page on showcase_invoice whose record:details declares name, and printed INV-1010 to PDF with Chromium on both the record route and the named page route, before and after PR #12785. The invoice number is on none of the PDFs. The PNGs are on branch claude/issue-12751-evidence under evidence/12751/.
Static read (objectui main4857cd2)
packages/plugin-detail/src/renderers/record-details.tsx:752–:754: declaredTitleField = declaredNameField(objSchema), and when the record has a value there it goes into hideFieldNames. The premise, in the comments above it, is that the page header's H1 already shows that value, so the details row would be a duplicate.
The renderer never reads usePrintPage() (no match in the file).
A print page refuses page:header (the spec's print contract), so on paper no header draws the title, and record:details still hides it. A printed invoice carries no invoice number.
The titleFormat and candidate branches below :755 hide a row on the same premise, so a print page whose object has no declared name field may drop its title-matching row the same way (not measured).
For triage to scope
The likely shape: on a print page the H1 dedupe does not apply, so record:details prints every field it declares, including the title field. That is the reading card ② of objectstack#8346 took for collapsed sections (objectui#12717: "record:details prints every field it declares").
Dedupe: search_issues in objectui with "print page record title name field missing record:details hideFieldNames page:header" returned none, and with "printed record title does not print on print page" returned 4: #12751 (the approval strip, its sibling), #12717, #12715 and #11958 (all closed, other print defects). None covers the title field.
Why p1 + target:v18: the printed invoice does not carry its own number (INV-1010 is on neither PDF). A print page refuses page:header, so nothing else draws the title field. The maintainer's rule 「PDF 要赶 18.0 正式版」 puts the PDF chain at p1.
For the claimant: Re-read on mained43c79ce5: packages/plugin-detail/src/renderers/record-details.tsx:752–:753 still hides declaredTitleField whenever the record has a value. On a print page, the field stays. Re-render the PDF (both routes) as the acceptance reading.
Claim: PM loop round 3 (target:v18 · priority:p1; filed by domain:ui seat 1 from objectui#12751's report as not a claim, graded by the triage seat, 6224507284, on the maintainer's 「PDF 要赶 18.0 正式版」)
Session: session_01SJn1GEkrbbBQkhGC26wEDw
Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-12787-print-title-field
Worktree: objectui-issue-12787 (in the cloud session's own container)
Domain: domain:ui
Seat: domain:ui#4
File surface: packages/plugin-detail/src/renderers/record-details.tsx (the page-header title dedupe, about :735–775 on mainf114263), tests beside it under packages/plugin-detail/src/__tests__/, one .changeset/12787-*.md (stop on breach; explain in the report)
Container & model: M, mode:cloud, model: opus (cloud on the maintainer's stance 「可以的话,ui 后续开发尽量用云 session,并且要求截图给我看」; lane scope on 「你也可以接ui车道的卡」; batch 3 on 「当前任务处理完,后续并发降到3」, this session's chat, 2026-10-16)
Clause-②: no
Clause-② reason: measured on mainf114263: RecordDetailsRenderer is on @object-ui/plugin-detail's entry, but the change is behaviour inside it: it reads the existing usePrintPage() from @object-ui/react (already read by DetailView, DetailSection and LineItemsPanel) and adds no prop, no type member and no key. A change that has to touch a published face stops and is reported under deviations, and the seat amends this claim.
Responsibility: n/a — a measured print-page defect on the PDF chain
Thread-read: 6224507284
Serial constraints cleared: the open plugin-detail PR #12796 (objectui#12741, another seat) edits RelatedList.tsx and renderers/record-related-list.tsx only. objectui#12751 (the approval band, DetailView.tsx) landed as 6367bfe, and objectui#12759 (inline date edit) as 020d178. No open objectui PR touches record-details.tsx (read at dispatch).
{
"issue": 12787,
"status": "done",
"branch": "claude/issue-12787-print-title-field",
"pr": 12814,
"session": "session_016Vv5qFjotEeCQN4PUiWwiT",
"premise_still_valid": true,
"summary": "On a print page (usePrintPage() !== null, read the way DetailView and DetailSection read it), record:details skips its whole H1 title dedupe: the declared name field, the titleFormat match and the candidate fallback. It now prints every field it declares, the title field included. Off a print page nothing changes. Head 05aab42 on base f1142634e: one renderer file, one new test file, one patch changeset. No prop, type member, export or i18n key changed (Clause-② stays no). Live PDF: INV-1010 is on neither PDF before and on both after, on the record route and on the named page route. Mechanism assumption 1 is partly wrong for the measured invoice: showcase_invoice at next.2 declares no nameField and no titleFormat, so the row on paper was hidden by the candidate fallback (derived `name`), not by declaredNameField. The fix covers all three rungs, and each is pinned.",
"tests": "New packages/plugin-detail/src/__tests__/record-details.printTitleField-12787.test.tsx, 6 pins. It mounts the real RecordDetailsRenderer inside RecordContextProvider, with and without PrintPageProvider value {paperSize: A4}. Print rows: declared nameField (INV-1010), titleFormat '{contract_no} - {name}' with a blank name (HT-2026-003), candidate fallback on `name`; each must show its label and value. CONTROL rows: the same three fixtures off a print page must hide the row. PM assumption 4, measured before the fix on f1142634e: 'Tests 3 failed | 3 passed (6)'. All three print rows were red, so the titleFormat and candidate rungs drop the row on a print page too; the three controls were green. After the fix: 6 passed. Run together with record-details.titleFormatPlaceholderDedupe-10360 and headerDedupeAgreement-9436: 'Test Files 3 passed (3) / Tests 14 passed (14)'; the 10360 pins are unchanged and green. Ablation 1, with the fix committed (` if (isPrintPage) {` replaced by ` if (false) {`, via objectstack scripts/ablation-replace.mjs; injected text present, anchor count 0): 'Tests 3 failed | 3 passed (6)'. All three print rows went red and the controls stayed green. Restored: blob 1d12c88d9339 equals HEAD, git diff HEAD empty. Ablation 2 (`if (true) {`; injected=1, anchor=0): 'Tests 3 failed | 3 passed (6)'. All three CONTROL rows went red. Restored: blob equals HEAD, git diff HEAD empty. No dist step was needed: the test imports the renderer from source by relative path. Full suite, once, foreground, through os-verify-lock (slot ui-12787) at 1eb4c26: `pnpm --filter @object-ui/plugin-detail test` gave 'VERDICT command-exit 0', 'Test Files 282 passed | 1 skipped (283)', 'Tests 2692 passed | 18 skipped (2710)'. The later commit 05aab42 only adds type annotations to the new test helper. At 05aab42 the new file re-ran 6 passed, and eslint and tsc -p tsconfig.test.json are clean.",
"gates": "Local, exit codes captured before any pipe: closure build `pnpm --filter '@object-ui/plugin-detail^...' build` EXIT=0. `pnpm --filter @object-ui/plugin-detail type-check` EXIT=0 (script echoed); it excludes __tests__, so tsc --noEmit -p packages/plugin-detail/tsconfig.test.json was also run: EXIT=0, 0 errors. `pnpm --filter @object-ui/plugin-detail build` EXIT=0. eslint on both touched files EXIT=0: record-details.tsx has 29 warnings, the same as main's blob (29); the new test has 0. `pnpm check:i18n-keys` EXIT=0. `pnpm check:i18n-drift` EXIT=0 ('No en value changed in this range.'). `node scripts/check-changeset-presence.mjs` EXIT=0 ('2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)'). `pnpm check:new-line-citations` EXIT=0 ('0 new citation(s)'). `pnpm check:test-path-roots` EXIT=0. objectui has no scripts/pm/dispatch-gates.mjs, so there is no --ran reconciliation; the gate set is hand-derived from the dispatch. CI: no PR yet, check-runs NOT MEASURED. Branch vs origin/main a8add5c: merge-tree reports no conflict. The only plugin-detail change landed since base is #12796, in RelatedList and record-related-list, with no overlap.",
"mcp_calls": "6, all reads: mcp__claude-code-remote__add_repo x2 (objectstack, hotcrm, access read; answer read_available, nothing attached), mcp__github__issue_read x2 (12787 get, get_comments), mcp__github__pull_request_read x2 (12785 get, get_comments). No write tool.",
"api_writes": "0 REST writes. git push only: the empty feature branch first (probe OK), then 2 commits to claude/issue-12787-print-title-field and 1 commit to claude/issue-12787-evidence. No PR, no comment, no label write.",
"open_questions": [
{
"question": "Contract conflict: os-dev.md says the dev opens the draft PR and posts the os-dev-report comment. The dispatch says not to, because the fleet-write relay is refused with 403 from this container.",
"options": [
"A follow the dispatch: pr null, body in pr_body_draft, PM opens it and posts this report",
"B attempt the relay"
],
"recommendation": "A, taken. The file wins on conflicts, but the write route it names is not reachable from this container, so the PM carries both writes. Nothing was attempted."
},
{
"question": "Test location: the claim's file surface names packages/plugin-detail/src/__tests__/. The sibling title-dedupe pins (10360, 9436) live in packages/plugin-detail/src/renderers/__tests__/.",
"options": [
"A src/__tests__/ as the claim names it",
"B renderers/__tests__/ beside the siblings"
],
"recommendation": "A, taken, to stay inside the claimed surface. The file imports ../renderers/record-details. Moving it later is a pure rename if the seat prefers B."
},
{
"question": "Scope of 'prints every field it declares': on a print page, should the author's explicit hideFields and the record:highlights dedupe also stop applying?",
"options": [
"A only the H1 title ladder is skipped; hideFields and highlights still apply",
"B skip all hiding"
],
"recommendation": "A, taken. Four axes: the business need is the measured missing invoice number. The ruling's premise (no H1 on paper) applies only to the title ladder. record:highlights is printable, so its dedupe still has a drawn counterpart on paper. hideFields is the author's explicit contract, and overriding it would be renderer leniency, not contract-first. B widens scope with no measured pull."
}
],
"out_of_scope_findings": [
"carrier: none · noted, not filed. The objectstack main showcase source does not compile against the published 18.0.0-next.2 packages ('Unrecognized key(s) on this select option: `kind`'), so the evidence backend used the showcase source at the next.2 release commit e5136ff. Expected skew between main and a release, not a defect.",
"carrier: none · noted, not filed. objectstack dev with --fresh served a stale dist/objectstack.json across reboots after a source edit. It warns 'dist/objectstack.json is OLDER than your sources — this boot serves the STALE build', so this is already loud and documented: a tooling observation only. The PDFs were taken on the first, freshly compiled boot; the stale boots fed only discarded control attempts."
],
"deviations": "(1) The main checkout /home/user/objectui held a harness-created local branch of the same name with no commits of its own. That checkout was detached to origin/main so the branch could be deleted and recreated in the worktree, as the dispatch directs. (2) Evidence backend: objectstack examples/app-showcase at release commit e5136ff (not main), deps rewritten to 18.0.0-next.2 from npm in a scratch copy, plus a scratch-only A4 print page showcase_invoice_print (record type, isDefault, record:details fields name, account, status, issued_on, tax_rate, region). Nothing was committed to objectstack. (3) The full suite ran at 1eb4c26, not at the final 05aab42. The delta is type annotations in the new test helper only; re-measured at 05aab42 as stated under tests. (4) The CONTROL screenshot is from a reboot without the print page, so the record route shows the synthesized default page with its page:header H1.",
"files_changed": [
"packages/plugin-detail/src/renderers/record-details.tsx",
"packages/plugin-detail/src/__tests__/record-details.printTitleField-12787.test.tsx",
".changeset/12787-print-title-field.md"
],
"screenshots": [
"before, record route, PDF page 1 (no INV-1010): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/before-record-pdf-1.png?raw=true",
"before, named page route, PDF page 1 (no INV-1010): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/before-named-pdf-1.png?raw=true",
"after, record route, PDF page 1 (INVOICE NUMBER INV-1010): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/after-record-pdf-1.png?raw=true",
"after, named page route, PDF page 1 (INVOICE NUMBER INV-1010): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/after-named-pdf-1.png?raw=true",
"CONTROL, after, ordinary record page, light (H1 INV-1010, no Invoice Number row): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/after-control-ordinary-record-page.png?raw=true"
],
"line_budget": "n/a",
"pr_title_draft": "fix(plugin-detail): a record on a print page prints its own title field (objectui#12787)",
"pr_body_draft": "(elided here: it is the body of objectstack-ai/objectui#12814, verbatim)"
}
Relayed by seat domain:ui#4 (session_01SJn1GEkrbbBQkhGC26wEDw) from the cloud session's final report (degraded channel: the session pushed and returned pr: null). The seat opened #12814 from claude/issue-12787-print-title-field at 05aab42 and set pr above. The three open questions are ruled A by the seat (the seat opens the PR; the test stays in the claimed src/__tests__/; only the H1 title ladder is skipped on a print page, while hideFields and the record:highlights dedupe still apply).
Landed · PR #12814 merged as 6e4f144 on main · read 2026-10-16T22:57Z
probe on origin/main6e4f144
reading
control
usePrintPage in packages/plugin-detail/src/renderers/record-details.tsx
imported (:16), read once with the other hooks (:330)
read the way DetailView and DetailSection read it
if (isPrintPage) ahead of the title ladder
1 (:765)
on a print page none of the H1 dedupe runs; off it, nothing changes
record-details.printTitleField-12787.test.tsx
present, 6 pins
three print rows and three CONTROL rows
.changeset/12787-print-title-field.md
present
—
a model name in the merge commit's message
0
—
PNG or PDF files in the merge's diff
0
the before/after PDF images stay on claude/issue-12787-evidence (f9af05b)
State change: the card closed as completed through Fixes #12787, and pm:dispatched is removed in this act. The cloud session session_016Vv5qFjotEeCQN4PUiWwiT is archived. No contract review is owed (Clause-②: no). The ACCEPT of record is 6225810575 (on the PR); the landing note is 6225963385. On the PDF chain, a printed invoice now carries its own number (INV-1010 on both the record route and the named page route).
Activity
objectstack-fleet commentedon Oct 16, 2026
Triage: first grade,
bug·priority:p1·target:v18·domain:ui·area:records·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-16T20:54ZTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.
target:v18: the printed invoice does not carry its own number (INV-1010 is on neither PDF). A print page refusespage:header, so nothing else draws the title field. The maintainer's rule 「PDF 要赶 18.0 正式版」 puts the PDF chain at p1.mained43c79ce5:packages/plugin-detail/src/renderers/record-details.tsx:752–:753still hidesdeclaredTitleFieldwhenever the record has a value. On a print page, the field stays. Re-render the PDF (both routes) as the acceptance reading.objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 3 (
target:v18·priority:p1; filed bydomain:uiseat 1 from objectui#12751's report as not a claim, graded by the triage seat,6224507284, on the maintainer's 「PDF 要赶 18.0 正式版」)Session:
session_01SJn1GEkrbbBQkhGC26wEDwAccount:
os-sales(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-12787-print-title-fieldWorktree:
objectui-issue-12787(in the cloud session's own container)Domain:
domain:uiSeat:
domain:ui#4File surface:
packages/plugin-detail/src/renderers/record-details.tsx(the page-header title dedupe, about :735–775 onmainf114263), tests beside it underpackages/plugin-detail/src/__tests__/, one.changeset/12787-*.md(stop on breach; explain in the report)Container & model:
M,mode:cloud,model: opus(cloud on the maintainer's stance 「可以的话,ui 后续开发尽量用云 session,并且要求截图给我看」; lane scope on 「你也可以接ui车道的卡」; batch 3 on 「当前任务处理完,后续并发降到3」, this session's chat, 2026-10-16)Clause-②: no
Clause-② reason: measured on
mainf114263:RecordDetailsRendereris on@object-ui/plugin-detail's entry, but the change is behaviour inside it: it reads the existingusePrintPage()from@object-ui/react(already read byDetailView,DetailSectionandLineItemsPanel) and adds no prop, no type member and no key. A change that has to touch a published face stops and is reported underdeviations, and the seat amends this claim.Responsibility: n/a — a measured print-page defect on the PDF chain
Thread-read: 6224507284
Serial constraints cleared: the open
plugin-detailPR #12796 (objectui#12741, another seat) editsRelatedList.tsxandrenderers/record-related-list.tsxonly. objectui#12751 (the approval band,DetailView.tsx) landed as6367bfe, and objectui#12759 (inline date edit) as020d178. No open objectui PR touchesrecord-details.tsx(read at dispatch).objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 12787, "status": "done", "branch": "claude/issue-12787-print-title-field", "pr": 12814, "session": "session_016Vv5qFjotEeCQN4PUiWwiT", "premise_still_valid": true, "summary": "On a print page (usePrintPage() !== null, read the way DetailView and DetailSection read it), record:details skips its whole H1 title dedupe: the declared name field, the titleFormat match and the candidate fallback. It now prints every field it declares, the title field included. Off a print page nothing changes. Head 05aab42 on base f1142634e: one renderer file, one new test file, one patch changeset. No prop, type member, export or i18n key changed (Clause-② stays no). Live PDF: INV-1010 is on neither PDF before and on both after, on the record route and on the named page route. Mechanism assumption 1 is partly wrong for the measured invoice: showcase_invoice at next.2 declares no nameField and no titleFormat, so the row on paper was hidden by the candidate fallback (derived `name`), not by declaredNameField. The fix covers all three rungs, and each is pinned.", "tests": "New packages/plugin-detail/src/__tests__/record-details.printTitleField-12787.test.tsx, 6 pins. It mounts the real RecordDetailsRenderer inside RecordContextProvider, with and without PrintPageProvider value {paperSize: A4}. Print rows: declared nameField (INV-1010), titleFormat '{contract_no} - {name}' with a blank name (HT-2026-003), candidate fallback on `name`; each must show its label and value. CONTROL rows: the same three fixtures off a print page must hide the row. PM assumption 4, measured before the fix on f1142634e: 'Tests 3 failed | 3 passed (6)'. All three print rows were red, so the titleFormat and candidate rungs drop the row on a print page too; the three controls were green. After the fix: 6 passed. Run together with record-details.titleFormatPlaceholderDedupe-10360 and headerDedupeAgreement-9436: 'Test Files 3 passed (3) / Tests 14 passed (14)'; the 10360 pins are unchanged and green. Ablation 1, with the fix committed (` if (isPrintPage) {` replaced by ` if (false) {`, via objectstack scripts/ablation-replace.mjs; injected text present, anchor count 0): 'Tests 3 failed | 3 passed (6)'. All three print rows went red and the controls stayed green. Restored: blob 1d12c88d9339 equals HEAD, git diff HEAD empty. Ablation 2 (`if (true) {`; injected=1, anchor=0): 'Tests 3 failed | 3 passed (6)'. All three CONTROL rows went red. Restored: blob equals HEAD, git diff HEAD empty. No dist step was needed: the test imports the renderer from source by relative path. Full suite, once, foreground, through os-verify-lock (slot ui-12787) at 1eb4c26: `pnpm --filter @object-ui/plugin-detail test` gave 'VERDICT command-exit 0', 'Test Files 282 passed | 1 skipped (283)', 'Tests 2692 passed | 18 skipped (2710)'. The later commit 05aab42 only adds type annotations to the new test helper. At 05aab42 the new file re-ran 6 passed, and eslint and tsc -p tsconfig.test.json are clean.", "gates": "Local, exit codes captured before any pipe: closure build `pnpm --filter '@object-ui/plugin-detail^...' build` EXIT=0. `pnpm --filter @object-ui/plugin-detail type-check` EXIT=0 (script echoed); it excludes __tests__, so tsc --noEmit -p packages/plugin-detail/tsconfig.test.json was also run: EXIT=0, 0 errors. `pnpm --filter @object-ui/plugin-detail build` EXIT=0. eslint on both touched files EXIT=0: record-details.tsx has 29 warnings, the same as main's blob (29); the new test has 0. `pnpm check:i18n-keys` EXIT=0. `pnpm check:i18n-drift` EXIT=0 ('No en value changed in this range.'). `node scripts/check-changeset-presence.mjs` EXIT=0 ('2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)'). `pnpm check:new-line-citations` EXIT=0 ('0 new citation(s)'). `pnpm check:test-path-roots` EXIT=0. objectui has no scripts/pm/dispatch-gates.mjs, so there is no --ran reconciliation; the gate set is hand-derived from the dispatch. CI: no PR yet, check-runs NOT MEASURED. Branch vs origin/main a8add5c: merge-tree reports no conflict. The only plugin-detail change landed since base is #12796, in RelatedList and record-related-list, with no overlap.", "mcp_calls": "6, all reads: mcp__claude-code-remote__add_repo x2 (objectstack, hotcrm, access read; answer read_available, nothing attached), mcp__github__issue_read x2 (12787 get, get_comments), mcp__github__pull_request_read x2 (12785 get, get_comments). No write tool.", "api_writes": "0 REST writes. git push only: the empty feature branch first (probe OK), then 2 commits to claude/issue-12787-print-title-field and 1 commit to claude/issue-12787-evidence. No PR, no comment, no label write.", "open_questions": [ { "question": "Contract conflict: os-dev.md says the dev opens the draft PR and posts the os-dev-report comment. The dispatch says not to, because the fleet-write relay is refused with 403 from this container.", "options": [ "A follow the dispatch: pr null, body in pr_body_draft, PM opens it and posts this report", "B attempt the relay" ], "recommendation": "A, taken. The file wins on conflicts, but the write route it names is not reachable from this container, so the PM carries both writes. Nothing was attempted." }, { "question": "Test location: the claim's file surface names packages/plugin-detail/src/__tests__/. The sibling title-dedupe pins (10360, 9436) live in packages/plugin-detail/src/renderers/__tests__/.", "options": [ "A src/__tests__/ as the claim names it", "B renderers/__tests__/ beside the siblings" ], "recommendation": "A, taken, to stay inside the claimed surface. The file imports ../renderers/record-details. Moving it later is a pure rename if the seat prefers B." }, { "question": "Scope of 'prints every field it declares': on a print page, should the author's explicit hideFields and the record:highlights dedupe also stop applying?", "options": [ "A only the H1 title ladder is skipped; hideFields and highlights still apply", "B skip all hiding" ], "recommendation": "A, taken. Four axes: the business need is the measured missing invoice number. The ruling's premise (no H1 on paper) applies only to the title ladder. record:highlights is printable, so its dedupe still has a drawn counterpart on paper. hideFields is the author's explicit contract, and overriding it would be renderer leniency, not contract-first. B widens scope with no measured pull." } ], "out_of_scope_findings": [ "carrier: none · noted, not filed. The objectstack main showcase source does not compile against the published 18.0.0-next.2 packages ('Unrecognized key(s) on this select option: `kind`'), so the evidence backend used the showcase source at the next.2 release commit e5136ff. Expected skew between main and a release, not a defect.", "carrier: none · noted, not filed. objectstack dev with --fresh served a stale dist/objectstack.json across reboots after a source edit. It warns 'dist/objectstack.json is OLDER than your sources — this boot serves the STALE build', so this is already loud and documented: a tooling observation only. The PDFs were taken on the first, freshly compiled boot; the stale boots fed only discarded control attempts." ], "deviations": "(1) The main checkout /home/user/objectui held a harness-created local branch of the same name with no commits of its own. That checkout was detached to origin/main so the branch could be deleted and recreated in the worktree, as the dispatch directs. (2) Evidence backend: objectstack examples/app-showcase at release commit e5136ff (not main), deps rewritten to 18.0.0-next.2 from npm in a scratch copy, plus a scratch-only A4 print page showcase_invoice_print (record type, isDefault, record:details fields name, account, status, issued_on, tax_rate, region). Nothing was committed to objectstack. (3) The full suite ran at 1eb4c26, not at the final 05aab42. The delta is type annotations in the new test helper only; re-measured at 05aab42 as stated under tests. (4) The CONTROL screenshot is from a reboot without the print page, so the record route shows the synthesized default page with its page:header H1.", "files_changed": [ "packages/plugin-detail/src/renderers/record-details.tsx", "packages/plugin-detail/src/__tests__/record-details.printTitleField-12787.test.tsx", ".changeset/12787-print-title-field.md" ], "screenshots": [ "before, record route, PDF page 1 (no INV-1010): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/before-record-pdf-1.png?raw=true", "before, named page route, PDF page 1 (no INV-1010): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/before-named-pdf-1.png?raw=true", "after, record route, PDF page 1 (INVOICE NUMBER INV-1010): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/after-record-pdf-1.png?raw=true", "after, named page route, PDF page 1 (INVOICE NUMBER INV-1010): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/after-named-pdf-1.png?raw=true", "CONTROL, after, ordinary record page, light (H1 INV-1010, no Invoice Number row): https://github.com/objectstack-ai/objectui/blob/f9af05bebdb786be2c0c7df54928bdbb08ef8d85/docs/design/findings/12787/after-control-ordinary-record-page.png?raw=true" ], "line_budget": "n/a", "pr_title_draft": "fix(plugin-detail): a record on a print page prints its own title field (objectui#12787)", "pr_body_draft": "(elided here: it is the body of objectstack-ai/objectui#12814, verbatim)" }Relayed by seat
domain:ui#4(session_01SJn1GEkrbbBQkhGC26wEDw) from the cloud session's final report (degraded channel: the session pushed and returnedpr: null). The seat opened #12814 fromclaude/issue-12787-print-title-fieldat05aab42and setprabove. The three open questions are ruled A by the seat (the seat opens the PR; the test stays in the claimedsrc/__tests__/; only the H1 title ladder is skipped on a print page, whilehideFieldsand therecord:highlightsdedupe still apply).Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Landed · PR #12814 merged as
6e4f144onmain· read 2026-10-16T22:57Zorigin/main6e4f144usePrintPageinpackages/plugin-detail/src/renderers/record-details.tsxDetailViewandDetailSectionread itif (isPrintPage)ahead of the title ladderrecord-details.printTitleField-12787.test.tsx.changeset/12787-print-title-field.mdclaude/issue-12787-evidence(f9af05b)State change: the card closed as completed through
Fixes #12787, andpm:dispatchedis removed in this act. The cloud sessionsession_016Vv5qFjotEeCQN4PUiWwiTis archived. No contract review is owed (Clause-②: no). The ACCEPT of record is6225810575(on the PR); the landing note is6225963385. On the PDF chain, a printed invoice now carries its own number (INV-1010 on both the record route and the named page route).Generated by Claude Code