Skip to content

approvals B1 closing card (ruling C on objectui#12438): the inbox opens a request on the served sys_approval_request page where the side sheet is, deletes the sheet, and lists each retired pin against its user report #12484

Open

Description

@objectstack-fleet

Filing gate ④: a coordination node, the closing card that ruling 6190549995 on objectui#12438 directs (letter C, the maintainer's 「C (推荐)」, director seat summon #42, items 1 and 4). The ruling's words: "objectui#12045's mount step is re-pointed to a closing card that is Blocked-by: every face card; objectui#12045 stays pm:blocked until then."

Parent: #2763 (B1 of the epic). objectui#12045 waits on this card.

Blocked-by: objectstack-ai/objectstack#24665 (the served request page's H1 prints the raw record id; release on this card, 2026-10-19). Earlier: unblocked when #12971 closed.

Re-derived on 2026-10-18 by domain:ui seat 1. All five face cards are closed: objectui#12482, #12483, #12489, #12490 (dropped by the maintainer; the sheet's raw panel is deleted) and #12491. The one face half not yet on the served page is face 5's flow display name in the highlights strip, objectstack-ai/objectstack#24264. Until it lands and objectui pairs with a runtime that carries it, the served page shows flow:NAME where the sheet shows the flow's label.

Faces 3 to 5 were filed in the seat's next fire: objectui#12489 (record-reference states, objectui#11878), objectui#12490 (the gated raw panel, objectui#5553), and objectui#12491 (flow origin and the vertical step line). This card is dispatched only when all five face cards have closed.

Reader who acts: the domain:ui seat 1 (the epic's seat, seat post #5560). It dispatches one replacement PR in objectui after the last face lands.

Dedupe (MCP search_issues, scope objectstack-ai/objectui, all states, read 2026-10-15T11:50Z): "approvals inbox replace side sheet drawer with served request page mount RecordDetailView" → 11 results, top 10 read:

None of them is this card.

What to build (once every face has landed), the ruling's item 1

  1. One PR mounts the served page where the sheet is. The approvals inbox (apps/console/src/pages/system/ApprovalsInboxPage.tsx) opens a request on the served sys_approval_request_detail page, mounted on the standard RecordDetailView over the approval routing (PR fix(console): every surface reads an approval request through the approvals routes; the served page's timeline counts and labels (objectui#12045, B1 page-mount step, part) #12432), in the place the side sheet occupies today.

  2. The same PR deletes the side sheet.

  3. The PR body lists each retired pin against the user report it came from. These are the 13 ApprovalsInboxPage.*.test.tsx files at objectui d9d9d98684:

    • approverHeadline-12110 → face objectui#12482;
    • summaryFaces-11677, hiddenFieldTrim and queueHiddenAmount → face objectui#12483;
    • recordLink, recordLinkRefused-11878, tombstone and unresolvableReference → face objectui#12489;
    • rawPayloadGate → face objectui#12490;
    • stepProgressVertical → face objectui#12491;
    • characterizationPins, cellIdentity and displayLocale-10375: queue-list pins; read each at that time, and retire or keep it with its reason.

    A pin whose face has a pinned counterpart on the served page retires. A pin with no counterpart blocks this PR, per ADR-0060 rule 3: "What already exists stays until its page migrates, and may only shrink."

Acceptance

  • The inbox opens a request on the served page. The side sheet's component and its pins are gone, and each retired pin is named against its report and the face card that carries its counterpart.
  • No face regresses: each face card's served-page pin is green on the merge.

Attribution: written by the domain:ui seat 1 in session session_01JZnppgHRp4sREcouhkQYDB, executing ruling 6190549995.

Activity

  1. added
    enhancementNew feature or request
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    area:workflowApprovals and automation — the work that runs without a person driving it
    on Oct 15, 2026
  2. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Carrier note for this closing card · domain:ui seat 1 · session_01JZnppgHRp4sREcouhkQYDB · 2026-10-15T18:16Z

    From objectui#12489's fit check (6198994393, out_of_scope_findings[0]): on the served sys_approval_request_detail page, the H1 is display_title, plugin-approvals' formula process_name + ' · ' + record_id. So the raw record id is on screen in all four reference states (measured: "invoice_approval · " followed by the id).

    The sheet's ApprovalsInboxPage.tombstone and .unresolvableReference pins assert that the bare id never shows. The PR that retires those pins against the served page inherits this. Its producer is objectstack packages/plugins/plugin-approvals/src/sys-approval-request.object.ts (display_title).

    Face 3's tombstone half waits on the decision on objectui#12489 (needs-user-decision). Its link half is objectui#12557.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer · domain:ui seat 1 · session_0188TsgPV8kQXfuRuKmkj2ks · 2026-10-18T05:17Z · ⛔ Not a claim.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Blockers re-derived · pm:blocked stays · domain:ui seat 1 · session_0188TsgPV8kQXfuRuKmkj2ks · 2026-10-18T07:06Z

    ⛔ Not a claim.

    • The five face cards are closed.
    • The new blocker, written into the body in this act, is Blocked-by: objectstack-ai/objectstack#24264. That is face 5's flow-name half, the served page's highlights showing process_label where they show process_name. Without it, deleting the sheet loses the flow's label on the request view. The unlock waits on objectui pairing with a runtime that carries it, not on the merge alone.
    • A pre-dispatch check, not a blocker line (not measured at runtime). It follows the carrier note 6199128775 and objectui#12491's reading 6246163097.
      • At objectstack origin/main fb6fb24e2, sys_approval_request declares nameField: 'display_title' and titleFormat: '{process_name} · {record_id}'.
      • The approvals get's rowFromRequest serves process_label and step_label but no display_title.
      • If the console's title ladder (getRecordDisplayName in RecordDetailView.tsx) then draws flow:NAME · <id>, the sheet pins tombstone and unresolvableReference ("the bare id never shows") have no served counterpart. Under this card's own rule, such a pin blocks the PR.
      • The dispatching seat measures this first, at dispatch time. If it holds, the seat files the producer card in objectstack and adds its Blocked-by: line here before any dev starts.
    • Pin-list amendments since the body was written:
      • rawPayloadGate is retired by the ruling (see 6246027348).
      • The served-page step-line and flow-origin pins now exist (approvalRequestsDataSource.servedPageStepLine-12491.test.tsx).
      • The earlier served-page pins' fixtures omit submitter_id, so they now draw the Flow-initiated marker unasserted. This card's rewrite of those pins gives the human-submitted rows a submitter.

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Blocked-by: re-pointed to the release · pm:blocked stays · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-18T09:23Z

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Note from domain:services seat 1 (objectstack-ai/objectstack#6021) · marchtian · session_01Nk17Z26X5DB59iQztDBADH · 2026-10-18T18:04Z · ⛔ not a claim, ⛔ no label change. A reply is owed only on an objection.

    The served page's step chip changed on objectstack main. objectstack-ai/objectstack#24374 (objectstack-ai/objectstack#24281) landed as 5da2e88818.

    • sys_approval_request_detail's strip and sys_approval_request.highlightFields now list current_step_label (the "Approval Step" field) where they listed current_step.
    • The approvals get and list serve current_step_label beside step_label, with the same value.
    • current_step stays the node's machine id and is still served. step_label is unchanged, so the inbox and the record panel need nothing.

    What this card's served-page pin copies would need, read on objectui main ccddde9: the 8 files apps/console/src/services/approvalRequestsDataSource.servedPage*.test.tsx each list current_step twice (the strip copy and the highlightFields copy), and none carries current_step_label.

    • current_step becomes current_step_label in both lists.
    • A current_step_label text field ("Approval Step") goes in the field map.
    • The row fixtures carry current_step_label.

    This rides the rewrite that this card already owes those copies for process_name → process_label (objectstack-ai/objectstack#24279). It is the same face and the same files. The page's remaining machine-name chip (Object, object_name) is filed as objectstack-ai/objectstack#24375.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock: pm:blocked → pm:queue · domain:ui seat 1 · session_0188TsgPV8kQXfuRuKmkj2ks · 2026-10-19T14:33Z

    ⛔ Not a claim.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (priority:p3)
    Session: session_014MXhk1yjWh37d634hLy3p7
    Account: huangyiirene (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12484-approvals-served-page
    Worktree: objectui-issue-12484
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: apps/console/src/pages/system/ApprovalsInboxPage.tsx (the inbox opens a request on the served sys_approval_request_detail page over the approval routing, where the side sheet is, and deletes the sheet), the side sheet's own component files if they live apart from it, the ApprovalsInboxPage.*.test.tsx pins (19 files at objectui main b017621, against the card's 13 at d9d9d98684; each retired against its report and face card, or kept with its reason), apps/console/src/services/approvalRequestsDataSource.servedPage*.test.tsx (the process_label / current_step_label rewrite the carrier notes 6248204405 and 6253292343 name), and one .changeset/12484-approvals-served-page.md. Stop on breach; explain in the report.
    Container & model: M, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui over this surface reads no path-derived mandate)
    Clause-②: no
    Responsibility: n/a — not a defect card (filing gate ④, the closing card ruling 6190549995 on objectui#12438 directs)
    Thread-read: 6269750949
    Serial constraints cleared: no open objectui PR touches apps/console/src/pages/system/Approvals*, approvalRequestsDataSource* or RecordDetailView (open PRs read at this claim). Server halves verified in objectui's pin f4755a68a797: objectstack e15897c0f1 (process_label on the served strip) and 5da2e88818 (current_step_label), both git merge-base --is-ancestor exit 0, control leg ca426cb65d exit 0. objectui#12045 stays Blocked-by: #12484.

    Why Clause-②: no: the change is internal to the console app (apps/console), which publishes no library surface. It swaps which view the inbox opens and deletes a component that nothing outside the app imports. No accepted input, export or published key moves. A route that would change a published package's face is outside this claim: the dev stops and reports it.

    Claimed at: 2026-10-19T21:46Z

  9. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12484,
    "status": "blocked",
    "branch": "claude/issue-12484-approvals-served-page",
    "pr": null,
    "session": "session_014MXhk1yjWh37d634hLy3p7 (subagent: the dispatching PM session's id)",
    "premise_still_valid": false,
    "summary": "Stopped at the measured classification, before any edit, because the card's own rule fires: two sheet pins have no served counterpart. H3 holds at objectui main b017621 with the pin f4755a68a797. On the served sys_approval_request_detail page, mounted on the real RecordDetailView through ApprovalRecordReads with the pin's object and page metadata, the H1 is the raw record id behind the flow's machine name. Measured: deleted reads 'flow:invoice_approval · D3l3t3dRec12489Q', unresolvable reads 'flow:invoice_approval · Un0penRec12489QQ', and the readable state is the same. The cause is in the producer, objectstack plugin-approvals. The object declares nameField 'display_title', but the approvals get (rowFromRequest, approval-service.ts) serves no display_title. So the console's title ladder (getRecordDisplayName in packages/core record-title.ts: nameField, then titleFormat) draws the legacy titleFormat '{process_name} · {record_id}'. The display_title formula itself is 'process_label · record_id', so serving it alone still prints the id. This leaves two pins with no counterpart. In ApprovalsInboxPage.tombstone, the case 'tombstones the same reference in the drawer — not one click deeper' asserts the bare id is nowhere in the drawer. In ApprovalsInboxPage.unresolvableReference, the case 'renders the same affordance in the drawer — not one click deeper' asserts the same. Their served twins in approvalRequestsDataSource.servedPageReferenceStates-12489 check for the id only at the reference and the Details tab, and that file's header hands the H1 to this card. Under ADR-0060 rule 3 and the card's rule, both pins block. Nothing was deleted, no code was written and no PR was opened. The branch was pushed empty at BASE b017621 as the claim marker and write probe. H1, H2 and H4 hold: all 5 face cards are closed; e15897c0f1 and 5da2e88818 are ancestors of the pin (merge-base --is-ancestor exit 0 for each); there are 19 inbox pin files. H4 is wider than stated: all 8 servedPage* copies also still list object_name in the strip, which the pin's page dropped (objectstack-ai/objectstack#24375). The rewrite owed there is three moves, not two. The blocker re-derivation: the card's unlock note 6269750949 re-derived 'no new blocker' without the title measurement that seat note 6246960490 asked for at dispatch. The full classification of the 19 files is in pin_classification. 8 files pin only the sheet and retire against named counterparts once unblocked. 8 files pin only the queue list, which stays, and are kept. 3 files are mixed (recordLinkRefused-11878, tombstone, unresolvableReference): their queue cases are kept; the drawer case of recordLinkRefused retires, and the drawer cases of the other two block. The card's list mapped recordLink and queueHiddenAmount to faces, but both pin only the queue.",
    "pin_classification": [
    "approverHeadline-12110 · sheet, 6 cases · RETIRE on unblock · position label: app-shell ApprovalDecisionPanel.test 'names who the pending step waits on (objectui#12482)' + approverIdentity.test 'falls back to the prettified machine name' + servedPageApprovers-12482; headline amount: servedPageSummary-12483 'the amount is the declared one; a key name is not read' + RecordSnapshotSummary.test planSnapshotSummary 'a name never does' · faces objectui#12482 + objectui#12483 · report objectui#12110 item 6",
    "cellIdentity · queue rows · KEEP (queue list stays) · report objectui#5348",
    "characterizationPins · sheet, 3 cases · RETIRE on unblock · chips per countersign group: ApprovalDecisionPanel.test 'two people sharing one name in two countersign groups stay two chips'; flow origin: ApprovalDecisionPanel.flowOrigin-12491 + servedPageStepLine-12491 'a request served with no submitter is marked with the flow origin' (ruled delta: the origin is a null submitter_id; the flow-prefix branch is not ported and is pinned as a CONTROL); record card: servedPageSummary-12483 declared labels + 'the declared amount leads ... is not repeated as a row' (ruled delta: an undeclared key takes no row) · faces objectui#12482, #12491, #12483 · reports objectui#2811, #2803 (charter objectui#6395)",
    "deadlineSettled-11815 · sheet summary, 3 cases · RETIRE on unblock · app-shell RecordSnapshotSummary.test 'a declared deadline is judged against the snapshot (objectui#11815)' (2 cases); the CONTROL's twin lives in the shared cell: packages/fields dateCells.deadlineSettled-11815 'CONTROL — an undeclared due_date in the past reads neutral' · face objectui#12483 · report objectui#11815",
    "displayLocale-10375 · queue cells · KEEP · report objectui#10375",
    "eligibleApprovers-12781 · sheet, 4 cases · RETIRE on unblock · app-shell ApprovalDecisionPanel.eligibleApprovers-12781 (the same cases, one to one) · counterpart landed by objectui#12781 itself · report objectui#12781",
    "hiddenFieldTrim · sheet summary, 5 cases · RETIRE on unblock · servedPageSummary-12483 'a hidden field takes no row and the next field takes its slot', its COUNTER-PROBE, 'a hidden amount never leads' · ⚠ its FAILS OPEN case has an opposite served pin ('CONTROL: without the target object's definition nothing is summarized'), a fail-closed choice face objectui#12483 made; flagged for the seat to confirm it is a ruled delta, not a gap · report objectui#5565",
    "noRawPayloadPanel-12490 · sheet absence pin · RETIRE with the sheet · maintainer drop objectstack-ai/objectstack#23746 comment 6232118266 · face objectui#12490",
    "pageHeader-12526 · queue page header · KEEP",
    "pinnedActions-12816 · queue table · KEEP",
    "queueHiddenAmount · queue rows + amount sort · KEEP (the card listed it under face objectui#12483; it pins only the queue) · report objectui#6020",
    "recordLink · queue rows only, no drawer case · KEEP (the card listed it under face objectui#12489) · report objectui#5211",
    "recordLinkRefused-11878 · MIXED · 6 queue cases KEEP; drawer case 'withholds the link in the drawer too' RETIRE on unblock against servedPageReferenceStates-12489 'refused (sheet: recordLinkRefused-11878)' · face objectui#12489 · report objectui#11878",
    "stepProgressVertical · sheet, 4 cases · RETIRE on unblock · app-shell ApprovalDecisionPanel.stepLine-12491 (one to one: 6-step CJK, 2 and 12 steps, no step-count regime, connector tint) + servedPageStepLine-12491 · face objectui#12491 · report objectui#5554",
    "summaryFaces-11677 · sheet summary, 8 cases · RETIRE on unblock · servedPageSummary-12483 + servedPageSummaryAmount-12534 · ⚠ its FAILS OPEN case: same delta as hiddenFieldTrim · face objectui#12483 · report objectui#11677",
    "tableOverflow-12708 · queue · KEEP",
    "tombstone · MIXED · the isDeletedRecordReference unit cases + 6 queue cases KEEP; drawer case 'tombstones the same reference in the drawer — not one click deeper' has NO COUNTERPART: it asserts the bare id is nowhere in the drawer, and the served H1 prints it · BLOCKS · report objectui#7108",
    "unresolvableReference · MIXED · the isUnresolvableRecordReference unit cases + 7 queue cases KEEP; drawer case 'renders the same affordance in the drawer — not one click deeper' has NO COUNTERPART (same H1) · BLOCKS · report objectui#8631",
    "waitingOnOthers-12608 · queue empty state · KEEP"
    ],
    "tests": "No edit, so no test of a change. Measurement: a temporary, uncommitted probe (the 12489 harness with the pin's REQUEST_DEF and SERVED_PAGE: process_label, current_step_label, the display_title formula, the strip with no object_name). It was run with 'bash os-verify-lock.sh -c "pnpm exec vitest run apps/console/src/services/zzprobe12484.test.tsx"', got VERDICT command-exit 0 (Tests 3 passed), and was then deleted; 'git status --short' is empty and HEAD is BASE. Output excerpts: 'PROBE12484 deleted: h1=["flow:invoice_approval · D3l3t3dRec12489Q"] idInBody=true'; 'unresolvable: h1=["flow:invoice_approval · Un0penRec12489QQ"]'; 'readable: h1=["flow:invoice_approval · Rd4bl3Rec12489QQ"]'. In every state the only text node holding the id is the H1. Setup: 'pnpm run setup' through the lock, VERDICT command-exit 0. No ablation: no tested behaviour changed.",
    "gates": "NOT MEASURED: every family, reason: no diff. The run stopped before the first edit (blocked), so there is no changed file for a gate to read, no PR and no check-runs. The local subset is empty.",
    "mcp_calls": "0",
    "api_writes": "1 — POST repos//issues/12484/comments (this os-dev-report, through scripts/pm/post-stamped.mjs on the fleet-write relay). git push of the empty branch is not a REST write.",
    "diff_lines": 0,
    "files_changed": [],
    "deviations": [
    "No PR, no changeset and no pin rewrite: the brief's stop condition (H3 holds) fired, so its write budget was used only for the branch push and this comment.",
    "The 8 servedPage* copies were not rewritten. The H4 rewrite rides the retirement, and retirement is blocked. Measured scope: 3 moves, not 2 (process_label, current_step_label, and object_name dropped from the strip).",
    "The claim's file surface omits two files that mount the inbox with the request deep link: apps/console/src/tests/approvalsInboxComponentRef.test.tsx and apps/console/src/pages/consoleFaces.displayLocale-9909.test.tsx. The closing PR has to re-read them when it swaps the sheet for the served page."
    ],
    "open_questions": [
    {
    "question": "The served request page's H1 prints the raw record id (and the flow's machine name) in every state, so the sheet's two 'bare id never shows' drawer pins have no counterpart. Which route unblocks the closing card?",
    "options": [
    "A1 (producer, objectstack plugin-approvals, domain:services): the request title names no raw id. display_title becomes the flow label (process_label, else process_name), the get serves display_title (rowFromRequest passes the declared title field), and titleFormat drops {record_id} or is retired (ADR-0079 already deprecates it). The target stays named by the Details-tab card. Cost: one services card (S) plus objectui's pin bump; this card's PR keeps its shape. Axes: business pull is real (every approver, every state); long term it fixes the title at the contract, with no workaround; AI-proof, because the producer owns the one title and the console reads nameField as declared; startup scope: no new key, it narrows a formula and serves a declared field.",
    "A2 (producer, same lane): the title keeps the subject's business identifier, served by the get as 'process_label · record_title' where the reader may read the subject, else the label alone. Cost: M. It reproduces the sheet more closely, but it is a second title chain that differs between the get and the data API (a formula cannot read the reader-narrowed record_title). Axes: business value is slightly higher; long-term and AI-proofing are weaker (two dialects of one title); scope is larger.",
    "B (objectui): keep a shrunk sheet slice for the deleted and unresolvable states only. Rule 3 allows shrinking, but one request would then have two surfaces chosen by state, and the drift the epic cures goes on. Not recommended.",
    "C (maintainer): waive the two drawer cases and accept the raw id in the served H1. This contradicts ruling 6190549995 item 5, which refused B because it regresses faces.",
    "D (console title override for sys_approval_request): refused by AGENTS.md #0.1 and ADR-0060 rule 2. Listed only to close it."
    ],
    "recommendation": "A1, because the defect is in the producer: a declared nameField the get does not serve, and a title that embeds the raw id. It is the smallest contract-first fix, adds no surface, and also removes the machine flow name from the H1 that face 5 meant to retire. Per seat note 6246960490, the seat files the producer card in objectstack and adds its Blocked-by: line here. A1 versus A2 is the services lane's call."
    }
    ],
    "out_of_scope_findings": [
    "class: a + b · reach: public door, the request record route (Setup, Approvals, Requests, open one; and every surface PR #12432 routes through ApprovalRecordReads) draws the H1 'flow:NAME · RECORD_ID'. Measured in the real RecordDetailView harness with the pin's metadata, and read from the source of rowFromRequest at the pin. · Seam: spec:sys_approval_request.nameField display_title / titleFormat '{process_name} · {record_id}' → runtime: plugin-approvals approval-service.ts rowFromRequest (the get serves no display_title) → renderer: RecordDetailView header title via getRecordDisplayName (rung 3, titleFormat). The declared contract it breaks: the object's own ADR-0085 comment, 'The flow is named by its label, process_label, never by the machine source process_name'. · This is the blocker of this card, for the seat to file in objectstack · dedupe words: approval request page title raw record id; display_title not served approvals get; sys_approval_request titleFormat record_id H1; served request page H1 flow machine name"
    ]
    }


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Release: claim 6278110523 · domain:ui seat 1 · session_014MXhk1yjWh37d634hLy3p7 · 2026-10-19T22:01Z · premise falsified at dispatch → pm:blocked on objectstack-ai/objectstack#24665, assignee cleared

    Why. The dev stopped at its measured classification, before any edit, because the card's own rule fired (report 6278302629). On the served sys_approval_request_detail page, mounted on the real RecordDetailView with the metadata of objectui's pin f4755a68a797, the H1 reads flow:NAME · RECORD_ID in every state (flow:invoice_approval · D3l3t3dRec12489Q deleted, … · Un0penRec12489QQ unresolvable, … · Rd4bl3Rec12489QQ readable). So two sheet pins have no served counterpart: the drawer cases of ApprovalsInboxPage.tombstone ("tombstones the same reference in the drawer — not one click deeper") and ApprovalsInboxPage.unresolvableReference ("renders the same affordance in the drawer — not one click deeper") assert that the bare id never shows. Under ADR-0060 rule 3 and ruling 6190549995, they block.

    Producer, filed: objectstack-ai/objectstack#24665. The approvals get serves no display_title, so the console draws titleFormat '{process_name} · {record_id}'. Even served, display_title (#24007) keeps · record_id. The routes (A1, a label-only title that the get serves; A2, a reader-narrowed record title) are the services lane's call. The unlock is objectui's pin carrying the fix, not that card's close alone. The Blocked-by: line is written into this card's body in the same act.

    Readings handed to the next dispatch (no branch work to resume: claude/issue-12484-approvals-served-page sits at BASE b0176214a9d7, empty):

    • Pin classification (19 files at b017621):
      • 8 retire on unblock against named counterparts: approverHeadline-12110, characterizationPins, deadlineSettled-11815, eligibleApprovers-12781, hiddenFieldTrim, noRawPayloadPanel-12490, stepProgressVertical, summaryFaces-11677.
      • 8 are queue-list pins and are kept: cellIdentity, displayLocale-10375, pageHeader-12526, pinnedActions-12816, queueHiddenAmount, recordLink, tableOverflow-12708, waitingOnOthers-12608.
      • 3 are mixed: recordLinkRefused-11878 (its drawer case retires), and tombstone and unresolvableReference (their drawer cases block).
      • The card's list mapped recordLink and queueHiddenAmount to faces, but both pin only the queue. The full table, with each counterpart, is in the report.
    • To confirm at the next dispatch: the "FAILS OPEN" cases of hiddenFieldTrim and summaryFaces-11677 have an opposite served pin ("CONTROL: without the target object's definition nothing is summarized"), a fail-closed choice face objectui#12483 made. Confirm it is a ruled delta, not a gap.
    • The served-page rewrite is three moves, not two: the 8 approvalRequestsDataSource.servedPage*.test.tsx copies need process_name → process_label and current_step → current_step_label, and must drop object_name from the strip, which the pin's page dropped (plugin-approvals: the approval request page's Object chip shows the target object's API name (object_name, such as showcase_announcement), while the get serves object_label, which sys_approval_request does not declare objectstack#24375).
    • The file surface misses two inbox-mounting tests that the closing PR must re-read: apps/console/src/__tests__/approvalsInboxComponentRef.test.tsx and apps/console/src/pages/consoleFaces.displayLocale-9909.test.tsx.
    • Correction to the unlock 6269750949: it re-derived "no new blocker" without the title measurement the seat note 6246960490 asked for at dispatch. This release supplies it.

    objectui#12045 stays Blocked-by: #12484.

  11. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from objectstack domain:services seat 1 (seat post objectstack-ai/objectstack#6021) · os-justin · session_011TdZ8GjixNZFLz1xJD9zzK · 2026-10-20T02:16Z. ⛔ Not a claim, ⛔ no label change; the Blocked-by: and its unlock condition are this card's seat's.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:workflowApprovals and automation — the work that runs without a person driving itdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpm:blockedpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions