feat(jobs): the restricted sheets for a child reader (§7) #231
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!231
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/restricted-job-sheets"
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 #178. The last piece of the job sheet.
Which shape a reader gets comes from the per-verb matrix, not a role bucket, so
a Child gets one of two: §7a when they own the job, §7b when they do not. Every
control is gated on the specific verb it performs, and where a verb is denied the
control is absent, never disabled and greyed.
A live permission leak, found while building it. The shared
jobOptions()gated
Make it part of another joboncanSetParent— which a Child has — andnever on manager. So a Child owning a repeat-free, sub-job-free job with a
destination available got exactly the one-entry
⋯menu §7a exists to prevent.Fixed on both surfaces.
Two more gating faults went with it: the sub-job expansion chevron rendered
unconditionally, so §7b could open an expansion it may not use, and the footer's
Waiting on Aliline showed for readers whose footer §7b closes to two states.It also found two Android tests synthesising an impossible caps object — a Child
holding
canDeleteItemandcanSetRepeat— to isolate an unrelated condition.Those verbs never co-occur with a non-manager in the real matrix, so the tests
were asserting against a state that cannot exist. Rebased onto a manager base.
One capability goes with §7a's blessing, and it is worth naming. The Who
chevron was a child-owner's only route to putting a job back to
Anyone. §7asays subtract it, so it is gone from this sheet. The server still allows the
put-back (
assignuser.go), and the design offers no other affordance for anowned job — take-and-put-back is scoped to the up-for-grabs pool in §11.C. So a
child who no longer wants their own job now has nowhere to say so. Either §7
gains an exception or the pool's put-back widens; flagged rather than invented.
One ambiguity deferred rather than guessed. §5's "the doer sheet, §7" could
be read as denying a Child reader the progress block. The shipped conformance
fixtures already pin it present for Child readers, and tested shipped behaviour
is the stronger authority than a possibly-stale cross-reference. Reported, not
changed.
Eight new golden cases ride with the code; no existing case moved.
🤖 Generated with Claude Code
Test report
Coverage: 27.0%
Updated by the check workflow · commit
ed14823165Android test report
Coverage:
Updated by the android workflow · commit
ed148231654a0a36fb74ed14823165