feat: sub-verb matrix rows, child standalone jobs, pinned sheet errors (ADR-0031) #89
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!89
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/matrix-sub-verbs"
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?
Stacked on #88 (merge that first; Forgejo retargets this to main).
A child testing the Android app saw the New job button, pressed Save, and got "Not authorized to create an item outside a list". The button read the
ItemService/Creatematrix row, but the standalone-vs-in-list rule lived only as a hard-coded role check inside the handler — invisible toGetPermissionMatrix, so web and Android both showed an affordance the server refused.ADR-0031: sub-verb matrix entries. A role-only resource guard inside a handler now gets a dotted matrix row. The handler consults it via
roles.CheckPermission,GetPermissionMatrixserves it, and clients gate the affordance on it — one row, no drift. Two rows land here:ItemService/Create.standalone(Admin, Member, Child) — who may mint a job outside a list. Policy change: children may now create standalone jobs.ItemService/AssignUser.other(Admin, Member) — who may set a job's owner to someone other than themselves.AssignUserreads it in place of its hard-coded check, andCreatenow enforces it whenowner_uidrides the request. That closes a real hole: with standalone create open to children, the owner riding the create bypassed the ADR-0014 take-only guard entirely — a child could mint a job assigned to anyone.Clients follow the rows: New job appears exactly when
Create.standaloneallows it, and the owner picker offers only Me to takers, so the form can never stage a create the server refuses.Pinned sheet errors. The same testing session showed failure banners clipping off the top of scrolled sheets. The web
Sheetgrew anerrorslot rendered with the footer, and 18 sheet forms hand their banner there (three needed error state hoisted out of child components). Android movedErrorLinebeside the action row in 14 bottom-sheet forms. The message now appears next to the buttons that caused it.Verified:
make checkgreen, AndroidassembleDebuggreen, deployed to the kind cluster and exercised — the live server serves both sub-verb rows, and the child flow was retested on-device.🤖 Generated with Claude Code
Test report
Coverage: 27.6%
Updated by the check workflow · commit
8b66ab9746Android test report
Updated by the android workflow · commit
8b66ab97461261818adc8b66ab97468b66ab97464d347ee624