feat: sub-verb rows end the proxy-verb idiom (#135) #149
No reviewers
Labels
No labels
adr
android
area/calendar
area/design-system
area/i18n
area/jobs
area/offline
area/server
area/testing
bug
ci
duplicate
enhancement
help wanted
invalid
notifications
question
reliability
security
severity/low
severity/medium
tracking
web
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
eagraiclainne/app!149
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/sub-verb-affordances"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #135. PR 11 of the #137 stack, based on #148. Three commits — ADR + server rows first, then each client re-gated, per the issue's ordering.
Server (ADR-0031 amended) — three role-only guard halves become matrix rows the guards themselves consult, so the row is the policy for the server and every client alike:
ItemService/Update.other(Admin, Member) —svc.RequireItemManager's role half; the ownership half (own or unowned passes) stays in the guard, mirrored client-side.RewardService/Claim.other(Admin) — claiming on another's behalf; the Claim handler consults it.SystemService/ExportUserData.other(Admin) — the ADR-0027 admin half, via a newsvc.RequireSubVerbhelper.Web re-gate —
ItemService/Deleteno longer stands for the manager tier on Jobs/Today (nowUpdate.other+ the ownership mirror); the job sheet's points affordances readRewardService/CreateandLinkItem(the cross-service proxy the review called sharpest); ListDetail splits its one flag into Rename/UncheckAll/Delete and gates entry reassignment onAssignUser.otherand convert onSetList+ the manager mirror; Meals gates push-ingredients onPushIngredientsand the time-zone chip onSetTimeZone; Rewards splits grant/edit/delete.Android re-gate — the same, ending the two divergences the review found: the list screen had proxied
Createwhere the web proxiedUpdate(both now read the real verbs), and meal editing had proxiedCreatewhere the web readUpdate.Live-verified:
GetPermissionMatrixserves all five dotted rows; a MEMBER claiming for a CHILD and a MEMBER exporting another member are both denied with the original messages while ADMIN claim-on-behalf still lands; admin affordances render unchanged in a headless-browser pass.make checkgreen.🤖 Generated with Claude Code
Test report
Coverage: 28.0%
Updated by the check workflow · commit
1f68cdf941Android test report
Coverage: 2.4% of lines
Updated by the android workflow · commit
1f68cdf941