"If you already know you can't insert the answer, don't ask the question."
Check the Whole Operation Before You Start It
A strike is a small pipeline: capture, infer, insert. The insert step needs Accessibility permission. So the disciplined thing is to check for that permission at the start — before capture even leads to an inference call — because if you can't insert, the whole strike is doomed no matter what the model says. Validating the precondition for a late step before you begin the expensive step is what separates a careful pipeline from one that does costly work only to fail at the finish line.
Don't Spend a Call You Can't Land
Concretely: if Accessibility isn't granted, Flint does not make the model call. It stops immediately, tells the user permission is needed, and opens the Accessibility pane in System Settings. It never runs inference just to discover at the end that it has nowhere to put the result. An inference call costs time, and often money or a rate-limit slot; spending one you already know can't land is pure waste, and it leaves the user staring at a spinner for a result that was never going to arrive anywhere useful.
strike
|
+-- Accessibility granted?
| no -> STOP: explain, open Settings pane. NO inference call.
| yes -> continue
|
+-- capture -> infer -> prove -> insert
The permission gate sits BEFORE inference, not after.
The Cost of a Wasted Call
This is the upstream half of a philosophy whose downstream half you already saw. Downstream (Track 6), when a call already happened and the target went stale, Flint salvages the result to the clipboard rather than waste it. Upstream, Flint refuses to make a call it knows it can't use in the first place. Both come from the same rule: an inference call is a resource with a cost, so don't spend it pointlessly and don't discard what you did spend. Guard the expensive step on the way in, and salvage its output on the way out.