Ruled: 5979854058 · letter A2 — retire the role: arm and normalize the fallback literal to org_membership_level:; supersedes ruling A 5978658250 · 2026-10-04T12:20Z
Ruled: 5978658250 · letter A — retire the role: arm in one edit; stored 15.x role:<p> slots go to the admin rescue, named in the changeset · 2026-10-04T09:49Z
Split from #21379 (item 5) by the triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U. ⛔ Not a claim.
Restart-when: the objectui commit named by objectstack main's .objectui-sha contains the merge of objectstack-ai/objectui#11455, and #21379 is closed.
The hold. It was set at filing by triage, on 2026-10-02. Two things must be true first. Until the pinned console sends position:<p>, retiring the arm breaks the stock console's "My Pending". And this card edits the equivalence that #21379's readers will share.
What changes
The cost to state before the edit
A 15.x-era slot stored as role:<p> becomes decidable only through the admin rescue. The claim states how such stored slots are treated:
- converted by an existing upgrade path, or
- left to the rescue, with that named in the changeset.
If neither the ADR nor an existing upgrade path covers this, the choice goes to the decision box before the edit. ⛔ No alias window is reopened.
Pins
- A
position:<p> slot is listed, decidable, and can_act for its holder, with the default actor.
role:<p> is no longer an address of that slot.
- An enumeration pin shows that no reader in
plugin-approvals compares a role: literal.
Grade: tech-debt · priority:p3 · domain:services · area:workflow · pm:on-hold. Why p3: once #21379 lands, nothing is wrong for any user; this retires a deprecated spelling.
Generated by Claude Code
Ruled: 5979854058 · letter A2 — retire the
role:arm and normalize the fallback literal toorg_membership_level:; supersedes ruling A 5978658250 · 2026-10-04T12:20ZRuled: 5978658250 · letter A — retire the
role:arm in one edit; stored 15.xrole:<p>slots go to the admin rescue, named in the changeset · 2026-10-04T09:49ZSplit from #21379 (item 5) by the triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U. ⛔ Not a claim.Restart-when: the objectui commit named by objectstack
main's.objectui-shacontains the merge of objectstack-ai/objectui#11455, and #21379 is closed.The hold. It was set at filing by triage, on 2026-10-02. Two things must be true first. Until the pinned console sends
position:<p>, retiring the arm breaks the stock console's "My Pending". And this card edits the equivalence that #21379's readers will share.What changes
approverId=role:<p>, the request storesposition:<p>, and the list filter matches literally #21350) keepsrole:inPOSITION_ADDRESS_PREFIXES(packages/plugins/plugin-approvals/src/approver-address.ts), because the pinned console sendsrole:<p>. That issharedUserFeeds.tsapproverIdentities()at objectui31971ff1e.roleas a word, with no alias window. Once the console is pinned, the arm comes out in one edit. The literal compare inapproval-service.ts(named === role:…) goes with it, so no reader keeps a second spelling.The cost to state before the edit
A 15.x-era slot stored as
role:<p>becomes decidable only through the admin rescue. The claim states how such stored slots are treated:If neither the ADR nor an existing upgrade path covers this, the choice goes to the decision box before the edit. ⛔ No alias window is reopened.
Pins
position:<p>slot is listed, decidable, andcan_actfor its holder, with the default actor.role:<p>is no longer an address of that slot.plugin-approvalscompares arole:literal.Grade:
tech-debt·priority:p3·domain:services·area:workflow·pm:on-hold. Why p3: once #21379 lands, nothing is wrong for any user; this retires a deprecated spelling.Generated by Claude Code