Skip to content

Commit 4e45246

Browse files
committed
docs(plugin-detail): drop spec version stamps from the new prose; correct the pending objectui#10058 changeset (objectui#10224)
check:installed-pin-claims read "Through 17.4.0" in the gate pin's header as a present-tense claim about the installed spec and failed it. The new prose now names objectstack#18159 instead of a version, in the pin header and in the registration comment, so the next spec bump has nothing to restamp. The pending objectui#10058 changeset says an unheld capability "hides the whole bar" and quotes the contract's retired wording. It ships in the same release as this change, which publishes the notice behaviour, so it gets a dated, append-only correction in the shape objectui#8649 gave the sibling objectui#10155 changeset. Its frontmatter and every earlier byte are unchanged. Claude-Session: https://claude.ai/code/session_01VhxTqosz7wn54ahqyxgERT Co-authored-by: Claude <noreply@anthropic.com>
1 parent 50214f3 commit 4e45246

3 files changed

Lines changed: 27 additions & 14 deletions

File tree

‎.changeset/10058-quick-actions-capability-gate.md‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,16 @@ REPORTED empty array is a real answer and gates strictly.
4242

4343
`perms.can()` itself is untouched: no other caller moves, and the full
4444
before/after truth table of both stock providers is pinned as unchanged.
45+
46+
**Correction, 2026-10-01 (objectui#10224).** The phrase "hides the whole bar"
47+
above is wrong about what the reader sees. When a declared capability is unheld or
48+
unrecognised, no action is drawn and an insufficient-permissions notice
49+
(`role="status"`) renders where the bar would be. That is what the contract's
50+
shared record-block `requiredPermissions` describe says: "this block does not
51+
render its content; wherever it would otherwise render, an
52+
insufficient-permissions notice takes its place". The `record:quick_actions`
53+
registration now publishes that describe verbatim, in place of "Hide the whole
54+
bar unless the user holds these permissions", and the contract wording quoted
55+
in the first paragraph is retired upstream (objectstack#18159). Everything
56+
else above stands: the capabilities the gate asks for, its fail-closed
57+
verdict, and the fail-open when capabilities are unreported.

‎packages/plugin-detail/src/index.tsx‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -876,10 +876,10 @@ ComponentRegistry.register('quick_actions', RecordQuickActionsRenderer, {
876876
// Implementing the fallback would be a behaviour expansion and needs its own
877877
// card; pinned by `recordQuickActionsInputs.actionNamesFallback.test.tsx`.
878878
{ name: 'actionNames', type: 'array', of: 'string', description: 'Action names to expose, in order — resolved from the actions declared on the object. With no names (and no host-supplied actions) nothing is looked up and the bar renders its empty placeholder' },
879-
// The contract's shared record-block describe, verbatim (`@objectstack/spec`
880-
// 17.5.0, objectstack#18159): `record:quick_actions` carries the one text
881-
// `record:details`, `record:highlights` and `record:related_list` share, and
882-
// objectui#8649 already publishes it on those three. This input used to read
879+
// The contract's shared record-block describe, verbatim (objectstack#18159):
880+
// `record:quick_actions` carries the one text `record:details`,
881+
// `record:highlights` and `record:related_list` share, and objectui#8649
882+
// already publishes it on those three. This input used to read
883883
// "Hide the whole bar unless the user holds these permissions", which is not
884884
// what the renderer does: the gate reads the CAPABILITY set
885885
// (`perms.hasCapabilities`, objectui#10058), puts a `role="status"`

‎packages/plugin-detail/src/renderers/__tests__/record-quick-actions.requiredPermissions-gate.test.tsx‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88

99
/**
1010
* `record:quick_actions.requiredPermissions` — the BLOCK-LEVEL gate
11-
* (objectui#8071 slice 4). The installed contract (`@objectstack/spec` 17.5.0,
12-
* objectstack#18159) describes it with the one record-block describe this key
13-
* shares with `record:details`, `record:highlights` and `record:related_list`:
14-
* ALL the named capabilities must be held, and when one is missing "an
15-
* insufficient-permissions notice takes its place". The registration publishes
16-
* that describe verbatim, and the last block below re-reads it off the
17-
* installed spec (objectui#10224). Through 17.4.0 the contract said "Hide the
18-
* whole bar unless the current user holds every named permission on this
19-
* object", and the registration said "Hide the whole bar unless the user holds
20-
* these permissions"; neither named the notice the renderer draws.
11+
* (objectui#8071 slice 4). Since objectstack#18159 the contract describes it
12+
* with the one record-block describe this key shares with `record:details`,
13+
* `record:highlights` and `record:related_list`: ALL the named capabilities
14+
* must be held, and when one is missing "an insufficient-permissions notice
15+
* takes its place". The registration publishes that describe verbatim, and the
16+
* last block below re-reads it off the installed spec (objectui#10224). Before
17+
* objectstack#18159 the contract said "Hide the whole bar unless the current
18+
* user holds every named permission on this object", and the registration said
19+
* "Hide the whole bar unless the user holds these permissions"; neither named
20+
* the notice the renderer draws.
2121
*
2222
* ## What this file pins, and why it was rewritten (objectui#10058)
2323
*

0 commit comments

Comments
 (0)