Voice and system actions¶
The eight shortest actions in DashPilot can be performed without looking at the phone: by voice, from the Shortcuts app, from Spotlight, or from anywhere else iOS offers an App Shortcut. This is the driving-safety case the app is designed around. A start time recorded when the driver says so is more accurate than one recorded three minutes later, once the phone has been picked up, unlocked and tapped.
Nothing here is a new capability. Each action calls the same service the on-screen control calls, and every rule that refuses a tap refuses a sentence.
What can be asked for¶
| Action | What it records | When it is refused |
|---|---|---|
| Start Shift | A shift, starting now | A shift is already running |
| End Shift | The end of the running shift, paused or not | No shift is running, or a delivery on it is still in progress |
| Pause Shift | A pause starting now, so the paused time is not counted as working time | No shift is running, it is already paused, or a delivery on it is still in progress |
| Resume Shift | The end of the pause | No shift is running, or it is not paused |
| Park Vehicle | That the vehicle is parked and the driver is away from it, which stops route recording and subtracts nothing from working time | No shift is running, it is already parked, or it is paused |
| Resume Driving | The end of the parked stretch, after which recording begins again as a new recording | No shift is running, or it is not recorded as parked |
| Start Delivery | One delivery accepted now, in an offer of one, alongside any already running | No shift is running, or the shift is paused |
| Record Delivery Progress | The next event of the delivery in progress: arrived at the pickup, then picked up, then delivered | No shift is running, no delivery is in progress, or more than one delivery is in progress |
Suggested phrases, offered by the system as soon as the app is installed:
- "Start a shift in DashPilot", "Start my DashPilot shift"
- "End my shift in DashPilot"
- "Pause my shift in DashPilot", "Take a break in DashPilot"
- "Resume my shift in DashPilot", "Start working again in DashPilot"
- "Park my vehicle in DashPilot", "I have parked in DashPilot"
- "Resume driving in DashPilot", "I am driving again in DashPilot"
- "Start a delivery in DashPilot"
- "Record delivery progress in DashPilot"
None of them opens the app. An action that put a screen in front of the driver would be slower than the tap it is meant to replace.
The rule that exists only off screen¶
DashPilot supports stacked deliveries, so a driver can be carrying two or three orders at once. On screen that is unambiguous: each delivery has its own card and its own button, and a tap lands on the delivery it was printed under.
A spoken "record the next step" has no card. With two deliveries in progress it names neither of them, and every way of choosing one (the newest, the oldest, the one furthest along) would write a driver's sentence into a record they did not mean. So DashPilot records nothing and says so:
2 deliveries are in progress, so DashPilot cannot tell which one you mean. Open DashPilot and record the step on that delivery.
The refusal lifts by itself. Once one of the two has been delivered or cancelled, the next spoken step reaches the one that is left.
Park Vehicle and Resume Driving are not affected either, and for a different reason: whether the
vehicle is moving is a fact about the driver and their vehicle rather than about any one order. One
driver has one vehicle however many orders are in the car, so neither asks for a delivery, neither is
refused by how many are open, and DashPilot does not infer why the driver parked. See
Parked for a pickup.
Start Delivery is not affected, because it names no existing delivery: it creates one, in an offer
of one. Two deliveries that share an offer are still two deliveries, so a spoken step is refused
over them exactly as it is over two separate offers. Recording an offer that held several deliveries
needs a count, which is a number to get right on a screen rather than a sentence said at a junction:
it is in the app only. See Offers and deliveries.
The shift's Live Activity applies the same rule from the same place in the code, and shows it rather than only saying it: with two deliveries open the card offers no step control at all. See The shift on the Lock Screen.
What the driver hears back¶
There is no screen to glance at afterwards, so the confirmation is the whole report:
- "Shift started at 5:12 PM. Open DashPilot to start recording your route."
- "Shift ended after 4 hours, 12 minutes of working time."
- "Shift paused after 2 hours, 30 minutes of working time. Route recording is stopped until you resume."
- "Shift resumed after 45 minutes paused. Open DashPilot to start recording your route again."
- "Vehicle parked. Route recording is stopped until you resume driving. Your shift is still running and its working time is still counting."
- "Driving again after 25 minutes parked. Open DashPilot to start recording your route again."
- "Delivery 2 started. 2 deliveries in progress."
- "Delivery 1 recorded as picked up."
Four of those carry a caution rather than only a fact, because a driver acting by voice has no screen to notice the difference on. Pausing says recording has stopped; resuming says a recording can only be started with the app open, so a shift resumed from behind another app records nothing until DashPilot is opened. Ending reports the shift's working time, which is the figure the app will go on using.
Parking says both halves, and that is the one confirmation whose wording is load-bearing. The route has stopped, which is what parking is for; the shift has not, which is what parking is not. A driver who heard only the first half could reasonably believe they had recorded a break. The word pause appears in neither parked sentence, and a test sweeps for it.
The event named is read back from the delivery after the write, so a confirmation cannot describe an event the store did not record. A fact DashPilot does not have is left out rather than filled in: a delivery whose number could not be resolved is confirmed as "Delivery", never as "Delivery 1".
No confirmation states an amount, a distance, a rate or a total.
Recording still has to be started with the app open¶
Recording carries on once it is running, in another app or behind a locked screen. It cannot begin there: When In Use authorization continues a session started in the foreground and does not deliver one that did not start there. A shift started by voice therefore records no route until DashPilot is opened, which is why every start says "Open DashPilot to start recording your route" out loud, and why the intent's description in the Shortcuts app says it too. The shift's own times are recorded exactly as they would be from the screen; the recorded mileage is the part that waits.
What is deliberately not offered¶
| Not offered | Why |
|---|---|
| Cancelling a delivery | It cannot be undone, and spoken it could not be aimed at one of several deliveries |
| Reopening a delivery marked delivered by mistake | The same aiming problem in reverse: a correction that names one of several delivered deliveries needs a screen that can list them |
| Recording earnings, per shift or per delivery | An amount is dictated, misheard and then believed. Amounts are typed, afterwards, on a screen |
| Recording an expense | The same, with a category and a date as well |
| Naming a pickup place | A dictated name would create a new place under a spelling the driver never saw |
| Anything about location | Nothing about position is asked for or reported here. Park Vehicle is a statement the driver makes about their vehicle, not a position DashPilot reads |
| Reading back a summary, a rate or a total | A figure heard without its coverage and its wording is a figure misread |
None of the eight intents takes a parameter, so nothing a driver says is stored, and no shortcut, suggestion or tile carries a value.
Privacy¶
- Nothing is donated. DashPilot does not donate performed intents to the system. App Shortcuts are offered from installation, which is all the discovery this needs; a donation would additionally feed the system's prediction of what a driver does and when, and a model of somebody's working pattern is not a side effect worth accepting for eight voice commands.
- The intents run on a locked device, because a phone in a cradle is locked for most of a shift. What they write is a timestamp the driver just witnessed, and what they say back is that same fact.
- The log records which action ran and which rule refused it, and never a timestamp, a count of what was said, or anything else. See Privacy and logging.
The Live Activity's seven controls are these actions again¶
Pause, Resume, End, Start Delivery, the delivery step, Park Vehicle and Resume Driving can also be
pressed on the shift's Lock Screen card. They are declared as separate intents, because a Live
Activity button has to be a LiveActivityIntent and has to exist in the widget extension, and they
are not discoverable: Siri and the Shortcuts app already offer these actions, and two tiles doing
the same thing would be two things to learn. The eight discoverable shortcuts are unchanged by
them.
What they are not is a second implementation. Each one calls IntentLifecycleService, exactly as the
spoken actions do, so a shift paused from the Lock Screen is refused by the same rule with the same
sentence. See The shift on the Lock Screen.
Where the rules live¶
IntentLifecycleService is the only type the eight intents call. It owns no lifecycle logic: it calls
ShiftService and DeliveryService, carries their refusals through word for word, and adds the one
rule above. If a rule there disagreed with the app, the app would be right, so there is no rule there
to disagree with. See Architecture overview.