Research: state verification for actions — 'can't archive an archived card' #24
Labels
No labels
needs-info
needs-triage
ready-for-agent
ready-for-human
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wayfinder:task
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ginjiruu/toolbelt#24
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Question
What projects/specs let an app declare state-dependent action availability ("can't archive an archived card", "can't reorder a single column") — and which, if any, fits the toolbelt?
Ticket #11 settled that HATEOAS actions are permission-only: generated
can_*relations answer "may this user do X", and state conditionals are the renderer's job. This ticket reopens the state side as its own decision: is there a declarative, server-enforced way to write "this action is only valid in this state", beyond imperative aggregate guards?Candidates to evaluate:
conditionon tuples, context passed to Check/BatchCheck) — already in-platform:embeddedfgaruns openfga v1.18.1, the model bootstrapper loadsConditions(model_bootstrapper.go:320), andmaxConditionEvaluationCostis set (server.go:232). Butauthz.Check/embeddedfga.ChecktakeTuple{User, Relation, Object}with no condition context today. Verify the exact supported surface and what plumbing the absorbedauthzneeds to pass state context.Deliverable: a recommendation and, if OpenFGA conditions win, the exact model + context plumbing for the post-map rewrite. Resolve via a
/researchsubagent on a throwaway branch.Child of: "Toolbelt glue absorption — map: what the toolbelt absorbs from duplicated consumer glue" (#1).