Repository navigation
docs: show the permission gate and the decision receipts in the README - #100
Merged
Merged
Conversation
Two screenshots from a running build, near the top, because the thing this project is actually about is easier to see than to read about. The first is the approval card: the tool, the exact arguments it will be passed, the WRITE risk tier, the pattern offered for "always allow", and the four decisions. The second is the receipts page for the same call, showing both halves written to the signed chain: the gate asking, with basis=default outcome=ask, and the owner allowing, with basis=approval outcome=allow. `scripts/dev_demo_approval.sh` is the script that produces them, added here so the assets can be regenerated rather than being screenshots nobody can reproduce. It is the slice 021 screenshot script with two changes: the tool timeout is raised from the suite's 2s, which no person can answer an approval inside, and migrations run before the application starts rather than after, because Oban is a supervised child whose tables must exist by the time it boots. The old ordering only appeared to work because a previous run had left a migrated file behind; on a fresh database it fails outright. No GIF yet. Capturing the full sequence needs the approval to resume the call reliably, and it does not: see slice 126. Signed-off-by: Ayla Croft <aylacroft@proton.me>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two screenshots from a running build, near the top of the README, because what this project is about is easier to see than to read about. Deliberately two, not a gallery.
The approval card. The tool, the exact arguments it will be passed, the
WRITErisk tier, the pattern offered for "always allow", and the four decisions.The receipts page for that same call. Both halves on the signed chain: the gate asking (
basis=default outcome=ask) and the owner allowing (basis=approval outcome=allow).Together they are the whole argument in two images: it asks before it acts, and the answer is evidence afterwards.
The script is included so the assets can be regenerated
scripts/dev_demo_approval.shis the slice 021 screenshot script with two changes, both found by it failing:failed to start child: Oban.No GIF, and why
A GIF of the full sequence is what was wanted, and it is not in this PR because the sequence does not reliably complete. Driving the real browser, the session intermittently never leaves
tool_waitafter the approval is requested, so the decision that follows is postponed forever and the call ends at the tool timeout reportingerror: the tool timed outfor something the owner explicitly allowed:That is slice 126, opened with the reproduction. The suite is green on it because every approval test calls
collect(id, &match?({:state, :approval_wait}, &1))before clicking, which is a synchronisation the product does not have. Clicking on the:requestedbroadcast instead, which is what the card actually renders on, the approval row ends as{"allowed", "once", consumed_at: nil}: granted, never consumed.The GIF follows once that is fixed. Shipping one now would mean either filming a broken flow or cutting away before it breaks.