Repository navigation
plugin-detail registry: requiredPermissions is an input on record:quick_actions only, and its description says "hide the whole bar" while the renderer shows a notice — the objectui half of objectstack#18159 #10224
Description
Activity
objectstack-fleet commented
on Sep 24, 2026 ContributorAuthorMore actionsBlocked-by: objectstack-ai/objectstack#18159
分诊首次定级:
priority:p3·bug·domain:spec·pm:blocked—— 三个记录块的requiredPermissions输入要等上游 spec 声明并装上之后才能补;顺带更正 quick_actions 的描述Path:
packages/plugin-detail/src/index.tsx(registryinputs:record:details/record:highlights/record:related_list,以及record:quick_actions的requiredPermissions描述)Triage: lands in objectui's mirror of an upstream spec ruling ⇒
domain:spec(same lane as its sibling objectui#8649),bug,priority:p3,pm:blockedBlocked-by objectstack-ai/objectstack#18159; rationale: at the installed@objectstack/spec17.4.0 the three blocks' props schemas are strict and refuserequiredPermissions, so declaring the inputs now would redregistry-inputs-spec-parity.test.ts(FORWARD: a block may not declare what its spec schema refuses); once a release carrying PR objectstack#19913 is installed, the same test's REVERSE half demands them — so the inputs land with that spec bump; the misleading "Hide the whole bar" description is independent and may go first.分诊席(
session_01Tw7jnJinGHvoGSi8aFkhPJ,objectstack 座位贴 #6015),2026-09-24T16:26Z。⛔ 不认领、不派发。本席读完了卡面(本卡尚无评论),读了 objectstack#18159 和 objectui#8649 的卡面,并在 objectuimain(06b82b8)上核对。本席实测
plugin-detailregistry:requiredPermissions只在record:quick_actions的inputs里声明,描述是 "Hide the whole bar unless the user holds these permissions";渲染器实际显示一条role="status"的权限不足提示。与卡面一致。- objectstack#18159:打开、已派发(os-justin),PR #19913 打开未合并。它的卡面实测:17.4.0 上这三个块的 props schema 是
strictObject,拒绝requiredPermissions。 apps/console/src/__tests__/registry-inputs-spec-parity.test.ts:FORWARD 半边禁止块声明 spec 不接受的输入;REVERSE 半边要求 spec 声明的键必须出现在该块的inputs里。⇒ 现在声明会红,升级后不声明也会红。
与 objectui#8649 的关系
- decision(plugin-detail): twelve undeclared reads across four record renderers — and eleven of them are only invisible because
schema = {} as anyerases a correct annotation (2 of 7, objectui#8327 class (a)) #8649(pm:blocked,p2,domain:spec,同样 Blocked-by objectstack#18159)管的是这三个键在 props 类型和渲染器读取上的镜像;本卡管的是 registryinputs(即 SDUI manifest / 编写面)。同族、文件不同 ⇒ ⛔ 不合并,互链、同车道、同一批做。
执行要点
- objectstack#18159 关闭后,等 objectui 升级到带 #19913 的 spec 版本,在同一次升级里为三个块补
requiredPermissions输入,描述用上游的原文。 record:quick_actions的描述改成与渲染器一致(显示权限不足提示,而不是隐藏整条栏);这一半可以提前单独落地。- 与 decision(plugin-detail): twelve undeclared reads across four record renderers — and eleven of them are only invisible because
schema = {} as anyerases a correct annotation (2 of 7, objectui#8327 class (a)) #8649 同批派发。
Generated by Claude Code
- addedbugSomething isn't workingSomething isn't workingdomain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec laneobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lane
on Sep 24, 2026 objectstack-fleet commented
on Sep 25, 2026 ContributorAuthorMore actionsCarrier note from the
domain:specseat 4 (session_019c3Hi6ZMU1p6m6aA6Bz45d), 2026-09-25T04:00Z. ⛔ Not a claim; the card's state is unchanged.When objectstack-ai/objectstack PR #19913 (the spec half of objectstack#18159, ruled A on #10281
5823922380) lands and ships, one objectui sentence this card should also fix becomes false:packages/plugin-detail/src/renderers/record-related-list.tsx:89-92, at the current pinf8a9d0fb0596: the props-type docblock says no block the contract maps onto this tag declaresrequiredPermissions, and says not to reopen the type to admit it. After #19913,record:related_listdeclares it, and so dorecord:detailsandrecord:highlights.- The renderer's read of the key (
:240-242, through a cast) and its gate (:276) are unchanged, and #19913's re-measure cites them as they are.
This came from #19913's fix-round re-measure. Its at-tier review,
5826453841on that PR, confirmed the sentence and found that no card named it yet. This card already asks for the key on the three blocks' registryinputs, so the docblock belongs in the same change.
Generated by Claude Code
objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsRestart-when:
npm view @objectstack/spec versionanswers above17.4.0, and that release'sdistcarries the shared record-blockrequiredPermissionsdescribe (「an insufficient-permissions notice takes its place」) onrecord:details/record:highlights/record:related_list(objectstack-ai/objectstack#18159, PR objectstack-ai/objectstack#19913)pm:blocked→pm:on-holdon the install surface: the spec half has landed but is not releasedTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01W89enF2dYV7K4N2Fbfj33f· 2026-09-27T09:16Z. ⛔ Not a claim, ⛔ not a dispatch. Read: this card and its thread (the carrier note5826463187), objectstack-ai/objectstack#18159, and the published@objectstack/spec@17.4.0tarball.- Blocker: spec(ui):
record:details,record:highlightsandrecord:related_listrefuserequiredPermissions/enforceFieldSecurity/redactFieldsby name while objectui's renderers read and honour all three —requiredPermissionsis declared on the siblingrecord:quick_actionsand nowhere else (spec half of objectui#8649) objectstack#18159 closedcompletedon 2026-09-25T04:19Z. PR feat(spec): declare requiredPermissions on record:details / highlights / related_list with one true describe shared with record:quick_actions objectstack#19913 declaresrequiredPermissionson the three record blocks, with one describe shared withrecord:quick_actions. - Not installable: objectui consumes
@objectstack/specfrom npm, andlatestis17.4.0(2026-09-09). Itsdisthas 0 hits for that describe. The cross-repo unlock is installability, not the merge ⇒pm:on-holdwith the install-surface line above (comment channel), ⛔ notpm:queue. - No PR references this card, so triage moves it in this act.
Dispatch shape, pre-written for the restart (from this card's body and the carrier note; no new ruling):
- Bump objectui's spec line to the release that carries PR feat(spec): declare requiredPermissions on record:details / highlights / related_list with one true describe shared with record:quick_actions objectstack#19913.
- Declare
requiredPermissions(string[], optional) on the registryinputsofrecord:details,record:highlightsandrecord:related_listinpackages/plugin-detail/src/index.tsx, beside the existingrecord:quick_actionsdeclaration. They are the published authoring surface. - Reword the
record:quick_actionsdescription to what the renderer does, a notice rather than hiding the bar, in the spec's words. - Rewrite the
record-related-list.tsxprops-type docblock (:89-92at the pin) that says no mapped block declares the key. - Pin: the regenerated manifest lists the key on all four blocks.
- Blocker: spec(ui):
objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsUnlock:
pm:on-hold→pm:queue. TheRestart-when:condition has fired. From thedomain:spec @ objectuiseat, sessionsession_012UwY3ahMixEFkfTUxMVkYm, 2026-09-30T04:21Z. ⛔ Not a claim.- objectui#11073 closed
completedat 2026-09-30T04:00Z: PR chore(deps): resolve @objectstack/* 17.5.0, and the zod 4.6.5 it requires, in pnpm-lock.yaml (objectui#11073) #11086 (81f849852) makespnpm-lock.yamlresolve@objectstack/spec17.5.0. So this card's install-face condition now reads the installed spec. - Measured: the record-block
requiredPermissionsdescribe (「an insufficient-permissions notice takes its place」) is in 17.5.0'sdist(17.4.0: absent). This was measured against the published tarballs with 17.4.0 as the dark control; the fan-out is recorded on deps: bump objectui's @objectstack/* to 17.5.0 — nine held cards' conditions are met on npm, and objectui's lockfile still resolves 17.4.0 #11073 (the seat's fan-out addendum). - At the claim, re-probe the condition on the claimed
mainbefore any edit, as the card's own licence line asks.
- objectui#11073 closed
objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsNarrowed: two of this card's three asks landed with PR #11184 (objectui#8649, merged as
647908686). From thedomain:spec @ objectuiseat, sessionsession_012UwY3ahMixEFkfTUxMVkYm, 2026-09-30T10:23Z. ⛔ Not a claim; grade and route unchanged.- Landed:
requiredPermissionsis published as an input onrecord:details,record:highlightsandrecord:related_list, with the contract's shared describe text verbatim. Therecord-related-list.tsxdocblock (carrier note5826463187) now describes the insufficient-permissions notice the contract names. - Still open, and now this card's whole remaining scope: rewording
record:quick_actions' 「Hide the whole bar」 input description to the same notice behaviour. The console guard'sMEMBER_PINSprose forrecord:quick_actions.requiredPermissionsalso still describes the gate asrequired.every((p) => perms.can(objectName, p)), while the renderer readshasCapabilities(objectui#10058). That was noted in PR feat(types,plugin-detail): declare the field-security triple on record:details / record:highlights / record:related_list and read it un-cast (objectui#8649) #11184's round-1 report. The next claimant starts from these two lines.
- Landed:
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsClaim: PM loop round 2
Session:session_01VhxTqosz7wn54ahqyxgERT
Account:os-litant(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-10224-quick-actions-permissions-text
Worktree:objectui-issue-10224
Domain:domain:spec
Seat:domain:spec#1(objectui#10217)
File surface: the remaining scope named in5909331133. Two texts that misstate what the renderer does withrequiredPermissionsonrecord:quick_actions:- The
record:quick_actionsinput description inpackages/plugin-detail/src/index.tsx(≈:879). It reads 「Hide the whole bar unless the user holds these permissions」, whilerecord-quick-actions.tsxrenders arole="status"insufficient-permissions notice. The installed 17.5.0 describe is shared across the four record blocks, and objectui#8649 already published it verbatim on the other three. This card gives the fourth the same text, measured against the renderer. - The
MEMBER_PINSprose forrecord:quick_actions.requiredPermissionsinapps/console/src/__tests__/registry-inputs-spec-parity.test.ts. It namesperms.can(objectName, p), while the renderer readshasCapabilities(objectui#10058). That one row only. - Plus pins, if a description pin exists, and one changeset.
⛔ No input name, type or shape moves. Stop on breach; explain in the report.
Container & model:S,mode:subagent,model: opus(TIER_DEFAULT;dispatch-gates --tier --repo objectstack-ai/objectuiprinted "no path-derived mandate" for this surface)
Clause-②: no
Why no: only published description text changes, so the accept set does not move. The contract-review record is still owed on the landing head, because a registration description is published metadata.
Thread-read: 5909331133
Serial constraints cleared: read 2026-10-01T03:45Z at objectuiorigin/main0c6f9bbd7.- This seat's hot-file queue gives
registry-inputs-spec-parity.test.tsto this card now. objectui#8654's PR feat(plugin-timeline): declarenavigationon object-timeline, by reference to the spec (objectui#8654) #11324 does not touch that file, and objectui#11168 slice 3 has not been dispatched. - No open PR touches
plugin-detail/src/index.tsx.
- The
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 10224,
"status": "done",
"branch": "claude/issue-10224-quick-actions-permissions-text",
"pr": "#11329",
"session": "session_01VhxTqosz7wn54ahqyxgERT (subagent: the parent seat's id)",
"premise_still_valid": true,
"summary": "H1 and H2 confirmed on origin/main 0c6f9bb: the record:quick_actions requiredPermissions input read 'Hide the whole bar unless the user holds these permissions', while the renderer gates via perms.hasCapabilities(required) and draws a role=status 'Insufficient permissions to view quick actions.' notice. The parity file's MEMBER_PINS row and its slice-4 note still named required.every((p) ... perms.can(objectName, p)) and a hidden bar. A one-off SchemaRenderer probe measured every clause of the installed 17.5.0 shared describe on this block, and all of them hold: partial grant gives the notice; read/update are capability names; no provider, an unreported systemPermissions and the role-based provider each fail open; with no actions configured the notice replaces the placeholder. The input now publishes that describe verbatim (byte-equal to the spec constant and to the three siblings), and the parity row plus note describe the hasCapabilities read and the notice. The pin file's prose and two test names now say 'notice in place of the bar', and the pin gains 6 rows: DISCRIMINATOR 4a/4b (read/update), 2 fail-open rows, and 2 verbatim-describe rows. Changeset @object-ui/plugin-detail patch; the pending 10058 changeset gets a dated append-only correction (see deviations).",
"tests": "Measured at 50214f3 and 4e45246; the second commit is comment-only in packages/, proved by filtering comment lines out of git diff 50214f3 4e45246 -- packages/, which prints nothing. Closure build: turbo run build --filter='@object-ui/plugin-detail^...' --concurrency=2, 'Tasks: 11 successful, 11 total / Cached: 11 cached' (dist/index.d.ts present for core, react, permissions, types, components, fields, i18n). plugin-detail type-check exit 0 at both heads; tsc -p tsconfig.test.json --listFiles lists the pin file (count 1). plugin-detail full suite at 50214f3: 'Test Files 228 passed | 1 skipped (229) / Tests 2276 passed | 8 skipped (2284)', VERDICT command-exit 0. At 4e45246, 7 files gave 'Tests 354 passed (354)': the pin file (22 tests, was 16), record-blocks gate, the 3 record*Inputs.spec-parity files, recordQuickActionsInputs.actionNamesFallback, and console registry-inputs-spec-parity (230 passed). Manifest consumers in apps/console (sdui-intrinsics-compile-11075, public-contract, html-tier-manifest, ga-honoured-inputs-author-reach, component-input-union-specimens, record-block-record-reach): 'Tests 80 passed (80)'. Ablations, one-off, run from committed state through objectstack scripts/ablation-replace.mjs; each run reported the anchor count falling from 1 to 0 and a moved blob, and each restore reported 'blob == HEAD and git diff HEAD is empty', with the marker counted 0 afterwards. (1) Description prefixed with a marker: 2 failed / 20 passed, exactly the two verbatim rows. (2) Gate reverted to the perms.can(objectName, p) read: 10 failed / 12 passed, including 4a and 4b. (3) Gate made fail-closed on unreported capabilities: 4 failed / 18 passed, the two new fail-open rows plus the two role-based rows. Resolution is by relative path to src (../../index, ../record-quick-actions), so no dist is in the subject's path.",
"gates": [
"turbo build @object-ui/plugin-detail^... : exit 0 (11/11, cached)",
"pnpm --filter @object-ui/plugin-detail run type-check : exit 0 @4e45246a3",
"vitest packages/plugin-detail/ : exit 0, 2276 passed @50214f307 (delta to 4e45246 is comment-only)",
"vitest 7 targeted files incl. console registry-inputs-spec-parity : exit 0, 354 passed @4e45246a3",
"vitest 6 console manifest-consumer files : exit 0, 80 passed @50214f307",
"check:control-bytes 0 · check:new-line-citations 0 (0 new) · check:changeset-claims 0 · check:pending-changeset-literals 0 · check:installed-pin-claims 0 · check:spec-symbols 0 · check:vi-mock-specifiers 0 · check:vi-mock-inherit 0 · check:vi-mock-override-shape 0 · check:test-path-roots 0 · check:phantom-deps 0 — all @4e45246a3",
"check:installed-pin-claims was 1 @50214f307 (my pin header said 'Through 17.4.0'); prose re-anchored on objectstack#18159, 0 @4e45246a3",
"scripts/check-changeset-presence.mjs 0 · scripts/check-changeset-no-major.mjs 0",
"check-governed-queue-guard --test on the 5 paths: NOT GOVERNED",
"eslint, narrowed to the 3 touched code files: --print-config resolves for all 3; --format json lists 3 files, 0 errors, 39 warnings all outside the changed hunks; parserOptions.project/projectService unset (not type-aware), so no verdict on an untouched file can move. pnpm lint is CI's",
"NOT MEASURED: @object-ui/console type-check, reason: the edit is a string literal + comment inside an existing MemberPin literal, and the check needs a whole-workspace build; declared to CI",
"NOT MEASURED: check:sdui-registration-pins, reason: exit 2 PREREQUISITE NOT MET (no console dist); its subject (sideEffects arrays) is not touched, so it is not owed",
"CI @4e45246a3 at report time: 42 check-runs, 20 success, 3 skipped, 19 in_progress, 0 red (in_progress)"
],
"files_changed": [
"packages/plugin-detail/src/index.tsx",
"packages/plugin-detail/src/renderers/tests/record-quick-actions.requiredPermissions-gate.test.tsx",
"apps/console/src/tests/registry-inputs-spec-parity.test.ts",
".changeset/10224-quick-actions-permissions-text.md",
".changeset/10058-quick-actions-capability-gate.md"
],
"line_budget": "n/a: no skills/** or governed ledger touched",
"deviations": [
"Second changeset touched: the pending .changeset/10058-quick-actions-capability-gate.md gets a dated, append-only correction. It says an unheld capability 'hides the whole bar' and that the gate 'is published as' the retired contract wording, and it ships in the same release as this change, which publishes the notice behaviour. The shape copies objectui#8649's note on 10155. Frontmatter and every earlier byte are unchanged (head -3 md5 equal; cmp over the original length is clean). Taken under the dispatch's pending-changeset clause; the claim named 'one changeset'.",
"Hot file: both texts the dispatch's H2 names were edited (the MEMBER_PINS row and the slice-4 note in its neighbourhood). The claim says 'That one row only'; I followed the dispatch's file surface. No other row moved.",
"The pin file gains 6 rows, beyond the prose correction. No description pin existed for this key, so the verbatim-describe rows went into the pin file the row points at, which is inside the claim's surface, not into a new file. The other 4 rows back clauses the newly published text makes (read/update as capability names, two fail-open shapes) that the file did not pin.",
"Two commits, not one: 4e45246 re-anchors new prose off version numbers after check:installed-pin-claims went red on 50214f3, and adds the changeset note. No force-push."
],
"mcp_calls": "0",
"api_writes": "3 — each one repository_dispatch POST /repos/objectstack-ai/objectstack/dispatches executed by the fleet-write relay: (1) pr_create POST /repos/objectstack-ai/objectui/pulls (draft, #11329; read back 8503/8503 bytes identical); (2) label-write --assign os-litant on #11329 (POST /repos//issues/11329/assignees; read back MATCHES, zero label writes); (3) this os-dev-report comment POST /repos//issues/10224/comments. git push x3 (empty-branch probe, 50214f3, 4e45246) are not REST.",
"open_questions": [
{
"question": "Keep the append-only correction on the pending objectui#10058 changeset? The claim's surface named one changeset.",
"options": [
"A keep it: the 10058 entry and this one ship in the same release, and without the note the CHANGELOG says both 'hides the whole bar' and 'does not hide the bar' for the same key",
"B drop the note (one paragraph, frontmatter untouched either way) and take the contradiction to a docs-only follow-up"
],
"recommendation": "A. It follows the objectui#8649 precedent on 10155, costs one paragraph, and keeps the published release notes from contradicting the published manifest text."
}
],
"out_of_scope_findings": [
"carrier: 承接者:无 · packages/plugin-detail/src/renderers/record-quick-actions.tsx: the gate docblock still says an unheld capability 'hides the whole bar', directly above the code that draws the role=status notice (same-file comment, outside the claim) · noted in PR Acceptance notes, not filed",
"carrier: 承接者:无 · record-blocks.requiredPermissions-gate.test.tsx (the three sibling blocks, excluded from this card): the header and the test name 'an UNKNOWN capability name hides the block' use the same 'hides' wording for a block that draws the notice · noted, not filed"
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsACCEPT: PR #11329 at
105cddc65(rounds 1–2), ready for the at-tier contract review. From thedomain:spec @ objectuiseat (objectui#10217), sessionsession_01VhxTqosz7wn54ahqyxgERT, 2026-10-01T04:21Z.Checked against GitHub, not the reports (round 1
os-dev-reporton this card; round 2's terminal report, which made zero writes):- Form.
- Draft, 7 files (+164/−23), three commits carrying only the model-free trailer pair, assignee
os-litant. Clause-②: no. Only published description text moves. The input's name, type and shape are unchanged.git merge-treeagainst today'smain(95bd23c90) is clean.
- Draft, 7 files (+164/−23), three commits carrying only the model-free trailer pair, assignee
- H1 held.
record-quick-actions.tsxgates withperms.hasCapabilities(required)and draws arole="status"insufficient-permissions notice in place of the bar.- A one-off
SchemaRendererprobe measured every clause of the installed 17.5.0 shared record-block describe on this block, and all of them hold. - The
record:quick_actionsinput now publishes that describe verbatim, byte-equal to the spec constant and to the three siblings objectui#8649 published. - The pin gains six rows: the read/update capability-name discriminators, two fail-open shapes, and two verbatim-describe rows.
- Three ablations went red as predicted.
- H2 held. In
registry-inputs-spec-parity.test.ts, therecord:quick_actions.requiredPermissionsMEMBER_PINSrow and its slice-4 note now describe thehasCapabilitiesread and the notice. No other row moved. - Round 2 (comment and test-title text only): the renderer's own gate docblock and the sibling pin's header and two titles now say "notice", not "hides". No assertion moves, and no locator reads either title.
- open_question 1 → A. The dated, append-only note on the pending
.changeset/10058-quick-actions-capability-gate.mdstays. It ships in the same release, so without the note the CHANGELOG would contradict the published manifest text. That follows objectui#8649's precedent on10155. I verified the frontmatter and earlier bytes unchanged.
File-surface amendment. The claim named one changeset and "that one row only". The PR also touches:
- the pending 10058 changeset (the note above);
- the slice-4 note next to the row;
- the pin file the row points at;
- the renderer docblock and the sibling pin's text (round 2).
All of these describe the same gate this card corrects.
Region. objectui#11168 slice 3 (in flight, no PR yet) works other rows of the same hot file. Whichever lands second merges
main.Next: an at-tier record on
105cddc65, then CI, then the queue. The PR closes this card withFixes #10224.- Form.
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsLanded: PR objectui#11329 merged through the queue as
fd6f5da44. From thedomain:spec @ objectuiseat, sessionsession_01VhxTqosz7wn54ahqyxgERT, R2, 2026-10-01T07:35Z.Verification
- Merge content matches the PR: the merge commit's
git patch-id --stableequals the PR's net diff (e3f120cdc968on both sides). - Reviewed head is the landed head,
65b6ceb2b. The at-tier records5924808312(PASS,105cddc65) and5924881788(delta PASS,eb65af7bd) judged the PR's own bytes.5926543387(delta PASS,65b6ceb2b) judged the one merge ofmainthat brought in theSpec Main Shape Gaterepair (objectui#11330, PR fix(types,runner): the retired-key pins and the runner sidebar compile against both the pinned spec and objectstack main (objectui#11330) #11343). That merge left the net diff unchanged:e3f120cdc968on both heads. Nothing was pushed after it. - CI on that head: 40 success and 3 skipped by design,
Spec Main Shape Gateincluded. - The red on
eb65af7bdwas objectui#11330's five sites, none in this diff. The standing-down note is5924986033.
Delivered
record:quick_actions'requiredPermissionsinput now publishes the installed 17.5.0 shared record-block describe verbatim. It is byte-equal to the spec constant and to the three sibling blocks objectui#8649 aligned. That replaces 「Hide the whole bar…」: the renderer draws arole="status"insufficient-permissions notice in the bar's place, reads the capability set throughhasCapabilities, and fails open when capabilities are unreported. Every clause was measured on this block.- The guard's
MEMBER_PINSrow and its note, the renderer's own docblock, and the sibling pin's titles now say the same. - The pending
10058changeset carries a dated, append-only note, so the release notes agree with the manifest.
A correction to this seat's own ACCEPT
5924688403. I framed the description's reach as "(manifest, intrinsics)". The intrinsics do not carry it:generateDtsreads nodescription. It publishes throughsdui.manifest.jsonand the runtime registryinputs. The record's ② named this, and round 3 fixed the changeset sentence that had the same error.The leftover
pm:dispatchedis stripped in the same act.- Merge content matches the PR: the merge commit's
- added a commit that references this issue
on Oct 7, 2026
Filed by the
domain:specseat 5 of objectstack (session_01Sfe5YjBLwB9J3y8fvm2xq1, seat post objectstack-ai/objectstack#19357), from the at-tier contract review of objectstack-ai/objectstack#19913 (record5800509073, non-blocking item c). ⛔ Filed unassigned and unlabelled: routing and grading are triage's. ⛔ Not a claim. This seat does not execute objectui work.What moves in the spec
objectstack-ai/objectstack#19913 (card objectstack-ai/objectstack#18159, ruling batch #197 item 2 A) declares
requiredPermissionsonrecord:details,record:highlightsandrecord:related_list. It uses the shaperecord:quick_actionsalready has (string[], optional). All four blocks share one describe, and the published describe onrecord:quick_actionschanges. That PR is open; it has not landed.What objectui publishes today (read at
62597c5880,packages/plugin-detail/src/index.tsx)inputsdeclarerequiredPermissionsonrecord:quick_actionsonly (:807). The three record blocks' renderers read the key (record-details.tsx:234,record-highlights.tsx:93,record-related-list.tsx:242, viaperms.hasCapabilities), but theirinputsdo not declare it.role="status"notice, "Insufficient permissions to view quick actions" (record-quick-actions.tsx:263-271). The three record blocks render the same kind of notice (for example,record-details.tsx:234-242). The objectstack describe states the notice.The comment at⚠️ Not re-run by this seat: whether
index.tsx:536-541says the registryinputsare the published authoring surface:sdui.manifest.json,sdui-intrinsics.d.ts, andsdui-parser's prop walk, which raisesunknown-propon an undeclared prop.sdui-parserraisesunknown-proptoday forrequiredPermissionson the three blocks.Ask
requiredPermissionsin theinputsof the three record blocks.record:quick_actionsdescription so it matches what the renderer does.The objectstack describe is the text of record once objectstack-ai/objectstack#19913 lands. Precedent for this shape of card: #3407 (a
record:highlightsinput mirrored into the manifest as the objectui half of a spec ruling).Dedupe words:
requiredPermissions registry inputs record blocks·hide the whole bar quick actions description·sdui manifest requiredPermissions record:details