Siri proof-of-concept test plan

Begin after Phase 2 compiles, tests pass, and the app is installed on a physical iPhone.

Preconditions

  • iPhone runs iOS 26 or newer.
  • Kid Money launches and its actions appear in Shortcuts.
  • Siri and locked-device shortcut access are enabled.
  • Rebecca exists with a $0.00 balance.
  • Xcode is ready to capture device logs.

Physical-device inventory

As of September 26, 2026, the available phones are:

  • personal iPhone SE on iOS 27;
  • managed work iPhone 15 on iOS 27, used as the shared-ledger owner and primary Siri test device; and
  • spouse iPhone 14 on iOS 27, used as the shared-ledger participant, with Siri disabled.

Do not require Siri to be enabled on the participant phone. For Phase 6, create Siri-originated changes on the owner phone and use the participant phone to verify receipt, exact-once history, balance, and relaunch persistence. Reverse participant-to-owner synchronization can use a manual transaction.

Core success test

  1. Terminate or background Kid Money.
  2. Say: “Siri, give Rebecca ten cents in Kid Money.”
  3. Record whether Siri selects the intent and extracts the amount without clarification. A single amount follow-up is an acceptable intermediate result for this checkpoint and should be documented.
  4. Confirm the response reports the adjustment and $0.10 balance.
  5. Open the app and confirm Rebecca shows $0.10.
  6. Terminate and relaunch; confirm $0.10 remains.
  7. Repeat the utterance and confirm $0.20.

Do not proceed to Phase 3 until this path works or the failure is understood.

Utterance matrix

Record each as one-shot success, parameter clarification, wrong routing, failed resolution, or other failure.

Give

  • “Give Rebecca ten cents in Kid Money.”
  • “Give Rebecca a dime in Kid Money.”
  • “Add ten cents to Rebecca in Kid Money.”
  • “Give Rebecca ten cents.”
  • “Give Rebecca a dime.”

Phase 3 actions

  • “Take ten cents from Rebecca in Kid Money.”
  • “Take a dime from Rebecca in Kid Money.”
  • “Subtract a quarter from Rebecca in Kid Money.”
  • “What is Rebecca’s balance in Kid Money?”
  • “How much money does Rebecca have in Kid Money?”
  • “Undo kid money in Kid Money.”

Phase 3 build 4 matrix

Before updating, record the existing build 3 balance ($1.05 on the managed work phone at the end of Phase 2). After installing build 4, confirm that the same children, balance, and history remain; this exercises the lightweight SwiftData migration that adds the optional undo link. Then record the balance after every mutating action:

  1. “Take money from Rebecca in Kid Money.” Say “ten cents” if prompted. Confirm a -$0.10 adjustment and spoken new balance.
  2. “Check Rebecca balance in Kid Money.” Confirm the spoken value agrees with the app and does not create a transaction.
  3. “Undo kid money in Kid Money.” Confirm it reverses the preceding take with a compensating transaction and reports the restored balance.
  4. “Give a dime in Kid Money.” Select Rebecca if prompted. Confirm +$0.10.
  5. “Give Rebecca a dime in Kid Money.” Record whether Siri supplies both parameters or asks a single clarification; confirm +$0.10.
  6. “Take a quarter in Kid Money.” Select Rebecca if prompted. Confirm -$0.25.
  7. Terminate the app, invoke Check Balance and one mutating action, then relaunch and confirm persistence.
  8. Repeat Undo twice after two different transactions and confirm it walks backward without toggling the prior undo.

Xcode’s App Shortcuts Preview resolves representative forms of all six actions, including the combined “Give Rebecca a dime in Kid Money” utterance. That is a development-tool preflight only; record real Siri behavior independently.

Context variants

Test the core phrase with the app open, backgrounded, and terminated, and with the phone unlocked and locked. Record whether the app foregrounds and whether Siri speaks the result.

Diagnostics

Capture the exact phrase, Siri transcript and response, clarification, foreground behavior, balance before/after, timestamped OSLog lines, device model, and iOS version.

Test coin names only after arbitrary amounts work. Add a CoinDenomination fallback only if physical-device evidence justifies it.

Recorded results

TestFlight 0.1 (1) — iPhone 15, iOS 26.6.1

  • Installation: managed work iPhone via internal TestFlight; app launched successfully.
  • Initial state: Rebecca existed with a $0.00 balance.
  • Context: app in the background and phone unlocked.
  • Utterance: “Give Rebecca ten cents in Kid Money.”
  • Result: Siri recognized Kid Money but reported that the app had not added support for the request and offered to open the app.
  • Ledger result: no transaction was created; Rebecca remained at $0.00.
  • Follow-up utterance: “Give Rebecca money in Kid Money.”
  • Follow-up result: Siri gave the same unsupported-capability response, asked no question, and left the balance at $0.00.
  • Relaunch diagnostic: after force-quitting and relaunching Kid Money with Rebecca present, the registered phrase produced the same unsupported-capability response and $0.00 balance.
  • Shortcuts discovery: Give Money appeared in Apple’s Shortcuts app. Tapping it prompted for a child and displayed Rebecca as an option.
  • Manual execution: selecting Rebecca ran the intent without collecting an amount, produced “The amount must be greater than zero,” and left the balance at $0.00.
  • Parameter-free Siri phrase: “Give money in Kid Money” produced the same unsupported-capability response without asking for a child.
  • Interpretation: shortcut extraction and import succeeded, so the unsupported Siri responses are a Siri-routing failure. Build 2 explicitly enables the Siri capability, requests a currency amount when Shortcuts supplies its zero-valued placeholder, and refreshes shortcut parameters when a child is added.

TestFlight 0.1 (2)

  • Distribution: uploaded successfully and assigned to the Internal Testing group.
  • Installation: updated successfully on the managed work iPhone.
  • Parameter-free Siri phrase: “Give money in Kid Money” still produced “Kid Money hasn’t added support for that with Siri,” created no transaction, and left the balance unchanged.
  • Xcode phrase diagnostic: Product → App Shortcuts Preview matched the exact utterance “Give money in Kid Money” to GiveMoneyIntent.
  • Interpretation: the compiled phrase matches in Apple’s development tool, while the installed app’s action remains visible and runnable in Shortcuts. The remaining fault is device-side Siri registration/routing or an iOS defect, not phrase syntax or the Siri code-signing entitlement.
  • User-created shortcut: a shortcut named “Test Kid Money Ledger” with Rebecca and $0.10 preset ran successfully when tapped and again when invoked by that exact name through Siri. Rebecca’s balance progressed from $0.00 to $0.20 through two taps, then to $0.30 through Siri.
  • Interpretation: the intent, data mutation, and Siri-to-Shortcuts execution path all work on the managed phone. The failure is isolated to automatic App Shortcut phrase registration or matching.
  • Build 3 diagnostic: add the specifically named AppShortcuts.xcstrings catalog recommended by Apple DTS so the advertised phrases are compiled as localized shortcut resources instead of using the build’s --no-app-shortcuts-localization path.
  • Build 3 preflight: Xcode’s App Shortcuts Preview matched both shipped phrases—“Give money in Kid Money” and “Give Rebecca money in Kid Money”—to GiveMoneyIntent. A third phrase variant that did not match was removed before distribution.

TestFlight 0.1 (3)

  • Distribution: archived successfully with validated localized App Shortcut resources and generated Siri/NLU training assets, then uploaded and assigned to the Internal Testing group.
  • Managed iPhone verification: both “Give money in Kid Money” and “Give Rebecca money in Kid Money” produced “Kid Money hasn’t added support for that with Siri.” Siri asked no follow-up question and created no transaction.
  • Unmanaged iPhone verification: on an iPhone SE running iOS 26.6.2, a fresh build 3 installation first asked permission to turn on shortcuts for Kid Money. “Give money in Kid Money” then requested the child and amount; Rebecca and ten cents created +$0.10. “Give Rebecca money in Kid Money” offered a Kid Money/Wallet disambiguation, then requested the amount; ten cents created another +$0.10, for a $0.20 balance.
  • Later managed-iPhone retry: after updating from iOS 26.6.1 to 26.6.2, and without deleting the app—the prior $0.30 balance remained—“Give money in Kid Money” routed successfully. Siri offered Kid Money/Wallet disambiguation, requested the amount, accepted twenty cents, and responded “0.20 has been given to Rebecca. Rebecca now has 0.50.” No one-time shortcut authorization prompt appeared.
  • Persistence: force-quitting and relaunching preserved the $0.50 balance.
  • Terminated and unlocked: “Give Rebecca money in Kid Money” routed after Kid Money/Wallet disambiguation. The amount prompt rejected “one cent,” repeated attempts at “one penny,” and “five cents” by asking again. “Ten cents” succeeded and raised the balance to $0.60.
  • Terminated and locked: Siri did not require an unlock. The same sub-ten-cent responses failed, while “ten cents” succeeded and raised the balance to $0.70.
  • App open and unlocked: at the amount prompt, “a dime” and “one dime” were rejected; “ten cents” succeeded and raised the balance to $0.80.
  • App backgrounded and unlocked: “a quarter” was rejected; “twenty-five cents” succeeded and raised the balance to $1.05.
  • Interpretation: automatic App Shortcut routing, background execution, locked-device execution, parameter prompting, spoken confirmation, and persistence work on both phones. The iOS 26.6.2 update preceded the managed phone’s recovery, but the evidence does not distinguish an OS fix from a registration refresh caused by the update. Siri’s IntentCurrencyAmount resolver does not accept the observed sub-ten-cent responses, and the app never receives them.
  • Phase 2 result: complete. The context matrix, persistence, automatic routing, parameter clarification, spoken result, and locked-device behavior all passed on physical hardware. Numeric cent phrases at or above ten cents worked in the observed tests, while penny, dime, and quarter wording did not resolve; this justifies a supplemental denomination path in Phase 3 without replacing arbitrary currency amounts.

TestFlight 0.1 (4) — managed work iPhone, iOS 26.6.2

  • Upgrade migration: updating in place preserved Rebecca and her $1.05 build 3 balance after the optional undo-link field was added to the SwiftData model.
  • Take Money: “Take money from Rebecca in Kid Money” routed successfully, removed $0.10, and reported the correct $0.95 balance.
  • Check Balance: Siri returned the correct $0.95 balance without changing it.
  • Undo: “Undo kid money in Kid Money” correctly compensated for the preceding ten-cent removal and reported the restored $1.05 balance.
  • Give Coin with denomination only: “Give a dime in Kid Money” asked which child should receive money; selecting Rebecca added $0.10 and produced $1.15.
  • Give Coin with child spoken: “Give Rebecca a dime in Kid Money” still asked which child should receive money; selecting Rebecca added $0.10 and produced $1.25. Siri therefore routed the named denomination correctly but did not retain the child from a phrase whose advertised parameter is the denomination.
  • Take Coin: “Take a quarter in Kid Money” asked which child; selecting Rebecca removed $0.25 and produced $1.00.
  • Terminated balance query: with Kid Money terminated, Siri reported “Rebecca has $1.00” without opening the app.
  • Terminated coin mutation: the first “Give a dime in Kid Money” attempt routed to a web result about dimes for children. Repeating with clearer enunciation routed to Kid Money, requested the child, added $0.10, and correctly reported Rebecca’s new $1.10 balance.
  • Repeated undo: two successive invocations reversed the terminated dime addition and then the preceding quarter removal, producing $1.00 and $1.25 as expected.
  • Relaunch persistence: terminating and relaunching preserved $1.25.
  • Exact response transcripts were not captured; repeating these successful cases solely for wording is unnecessary. Functional routing, mutation, read-only querying, spoken balance, and undo correctness are verified.
  • Phase 3 result: complete. Every build 4 matrix capability passed on physical hardware. Named-coin routing had one intermittent web-search miss before succeeding on retry, and combined coin phrases still requested the child separately; retain both findings as reliability inputs rather than treating preview matching as a guarantee.

Build 5 one-shot routing experiment

Build 5 replaces the advertised coin shortcuts with a single dynamic child-and-amount App Entity. It is an experiment around Apple’s one-parameter-per-App-Shortcut-phrase limit, not a claimed fix until it works on a physical iPhone. The common amounts are 1, 5, 10, 20, 25, 50, and 100 cents; penny, nickel, dime, quarter, half-dollar, and dollar synonyms are included. Arbitrary amounts still use the existing Give Money or Take Money follow-up flow.

Distribution: TestFlight 0.1 (5) was uploaded successfully and verified in the Internal Testing group.

Before updating, record Rebecca’s build 4 balance ($1.25 at the end of the completed matrix). After updating, confirm the child and balance remain. Then test in order and record Siri’s exact route, any Wallet disambiguation, clarification, spoken result, and balance:

  1. “Give Rebecca ten cents in Kid Money.” Expected one-shot adjustment: +$0.10.
  2. “In Kid Money, give Rebecca twenty cents.” Expected one-shot adjustment: +$0.20.
  3. “Give Rebecca a dime in Kid Money.” Expected one-shot adjustment: +$0.10.
  4. “Give Rebecca a dollar in Kid Money.” Expected one-shot adjustment: +$1.00.
  5. “Take twenty cents from Rebecca in Kid Money.” Expected one-shot adjustment: -$0.20.
  6. “Give Rebecca money in Kid Money.” Confirm the arbitrary-amount fallback still asks for an amount and succeeds with “thirty cents.”
  7. Terminate Kid Money and repeat steps 1 and 5; relaunch and confirm both persisted.

If Siri offers Kid Money or Wallet, test the app-name-first form from step 2 as a routing comparison. Do not infer success from the generated catalog: Xcode’s extracted metadata contains the new routes, but the local simulator’s linkd helper failed to refresh the dynamic child-and-amount vocabulary for App Shortcuts Preview.

Recorded build 5 results — managed work iPhone

  • Upgrade persistence: Rebecca began at the expected build 4 balance of $1.25.
  • Numeric give, app name last: “Give Rebecca ten cents in Kid Money” ran without clarification, added $0.10, and reported the correct $1.35 balance.
  • Numeric give, app name first: “In Kid Money, give Rebecca twenty cents” asked the user to choose Kid Money or Wallet. Choosing Kid Money added $0.20 and reported the correct $1.55 balance.
  • Coin synonym: two attempts at “Give Rebecca a dime in Kid Money” produced web results about Nicole Kidman and made no ledger change. Siri therefore failed before the Kid Money intent or entity resolver ran.
  • Dollar synonym: “Give Rebecca a dollar in Kid Money” ran without clarification, added $1.00, and reported the correct $2.55 balance.
  • Take composite: “Take twenty cents from Rebecca in Kid Money” produced “Kid Money hasn’t added support for that with Siri,” offered to open the app, and made no ledger change.
  • Locked numeric give: from the locked screen, “Give Rebecca ten cents in Kid Money” added $0.10, reported the correct $2.65 balance, and the app showed the same value afterward.
  • Wallet controls: turning off Apple Cash did not remove the Kid Money/Wallet disambiguation for the app-name-first twenty-cent phrase. Disabling all Wallet Siri suggestions also did not remove it.
  • Interpretation after the initial matrix: the combined App Entity is physically verified for one-shot numeric-cent and dollar additions, including locked execution. Coin-name recognition remains unreliable before app routing. Wallet disambiguation is unaffected by the tested Apple Cash and suggestion settings.

Follow-up diagnostic results:

  1. “In Kid Money, take Rebecca twenty cents” requested Kid Money/Wallet disambiguation. Choosing Kid Money removed $0.20 and reported the correct $2.45 balance.
  2. “Take Rebecca twenty cents in Kid Money” ran one-shot without clarification, removed $0.20, and reported the correct $2.25 balance.
  3. “Take money from Rebecca in Kid Money” requested Kid Money/Wallet disambiguation, then asked for the child despite Rebecca being spoken. Selecting Rebecca removed $0.20 and reported the correct $2.05 balance, confirming that the arbitrary-amount fallback still works.
  4. “In Kid Money, give Rebecca a dime” requested Wallet/Kid Money disambiguation and then asked for an amount. “A dime” twice produced no response; “ten cents” succeeded, added $0.10, and reported the correct $2.15 balance.

Build 5 result: complete. For the combined entity, the reliable grammar is “Give/Take [child] [numeric amount] in Kid Money.” App-name-first forms can invoke Wallet disambiguation; amount-first take wording can fail routing. Coin language is no longer a product requirement and should not block progress.

Build 6 five-cent increment expansion

Build 6 expands the combined vocabulary to every five-cent increment from $0.05 through $1.00, while retaining the separately supported one-cent value and coin synonyms. The preferred product grammar remains child first, numeric amount second, and app name last. Amounts outside this preset range remain available through the existing prompted arbitrary-amount actions.

Distribution status: archive 0.1 (6) uploaded successfully and was added to the TestFlight Internal Testing group on September 17, 2026.

After installing build 6, confirm Rebecca’s build 5 balance remains $2.15. Lock the phone and test:

  1. “Give Rebecca fifteen cents in Kid Money.” Expected one-shot adjustment: +$0.15 and balance $2.30.
  2. “Take Rebecca twenty-five cents in Kid Money.” Expected one-shot adjustment: -$0.25 and balance $2.05.
  3. “Give Rebecca thirty-five cents in Kid Money.” Expected one-shot adjustment: +$0.35 and balance $2.40.
  4. Relaunch Kid Money and confirm $2.40 persists.

Record any Wallet question, parameter clarification, unsupported-capability response, or web result. Coin-word testing is no longer necessary.

Recorded build 6 results — managed work iPhone, locked

  • Upgrade persistence: Rebecca began at the expected build 5 balance of $2.15.
  • “Give Rebecca fifteen cents in Kid Money” requested Kid Money/Wallet disambiguation. Choosing Kid Money added $0.15; Siri reported “Gave $0.15 in Kid Money. Rebecca now has $2.30.”
  • “Take Rebecca twenty-five cents in Kid Money” requested Kid Money/Wallet disambiguation. Choosing Kid Money removed $0.25; Siri reported “Removed $0.25 in Kid Money. Rebecca now has $2.05.”
  • “Give Rebecca thirty-five cents in Kid Money” requested Kid Money/Wallet disambiguation. Choosing Kid Money added $0.35; Siri reported “Added $0.35 to Rebecca. Rebecca now has $2.40.”
  • Relaunch persistence: terminating and relaunching Kid Money preserved $2.40.
  • Interpretation: all tested five-cent increments supplied both the child and amount from one utterance, executed from the locked screen, produced the exact expected ledger values, and persisted. Siri still required system-level app disambiguation against Wallet, even with the app name last, but asked no child or amount clarification.
  • Build 6 result: complete. Resume Phase 4; retain Wallet disambiguation as a platform-routing limitation rather than an app correctness failure.

Build 11 shared-ledger Siri check on iOS 27

On September 26, 2026, after manual real-ledger synchronization passed in both directions and both phones had been updated to iOS 27, the owner retested the build 6 fifteen-cent phrase on build 11.

  • From the locked screen, “Give Rebecca fifteen cents in Kid Money” required unlocking. Repeating it from the unlocked Home Screen returned “Kid Money hasn’t added support for that with Siri.” No transaction was created.
  • The prompted route “Give money in Kid Money” worked while unlocked. Siri asked Kid Money or Wallet, then child, then amount. Rebecca plus “fifteen cents” created exactly one $0.15 Siri transaction, moved the balance from $2.85 to $3.00, and left one durable change waiting to sync.
  • Interpretation: fifteen-cent conversion, App Intent execution, shared-ledger mutation, and durable queueing work. The failure is limited to one-shot shortcut routing and locked-screen authorization/availability. Because both the app build and OS changed since build 6, this test cannot distinguish an app regression from an iOS 27 routing change. Do not claim build 11 preserves the previously verified locked one-shot grammar.
  • Shared-ledger delivery: after explicit Sync Now on both phones, the Siri-originated $0.15 transaction reached the spouse exactly once and both phones showed $3.00 with matching histories.
  • Shared-ledger relaunch: terminating and relaunching both apps preserved the matching balance and history. A subsequent Sync Now on each phone added no duplicate.

Xcode 27 App Intents integration preflight

On September 26, 2026, the full suite passed under Xcode 27 on an iOS 27 simulator: 89 Swift Testing tests plus one App Intents integration test. The integration runner launches Kid Money to register metadata, resolves a unique dynamic child-and-fifteen-cent entity through the app process, executes GivePresetMoneyIntent out of process, and reads back exactly 15 cents through a debug-only inspection intent.

This confirms that iOS 27 can discover and execute the app-side preset intent and dynamic entity query. It does not exercise Siri’s speech recognition, natural-language phrase matching, Wallet disambiguation, lock-screen policy, or TestFlight registration. The next physical check must therefore use a build compiled with Xcode 27 and repeat the exact one-shot phrase on the owner iPhone.

Build 0.1 (12) was compiled with Xcode 27, uploaded successfully, and added to Internal Testing on September 26, 2026. On the owner iPhone 15, first verify TestFlight shows build 12, then run this narrow matrix without changing the ledger manually between attempts:

  1. While unlocked, say “Siri, give Rebecca fifteen cents in Kid Money.”
  2. From the locked screen, repeat the exact phrase.
  3. If either one-shot attempt fails, while unlocked say “Siri, give money in Kid Money,” select Rebecca if asked, and answer “fifteen cents.”

Record the exact Siri response, whether Wallet/app/child/amount clarification appeared, and Rebecca’s balance after each attempt. Do not infer locked-screen success from the simulator integration test.

Build 12 physical result

  • The first unlocked one-shot attempt returned “Kid Money hasn’t added support for that with Siri” and made no change from $3.35.
  • From the locked screen, the exact same one-shot phrase routed successfully. Siri asked Kid Money or Wallet; after Kid Money was selected, it added $0.15 to Rebecca and reported the correct $3.50 balance. Siri did not ask for the child or amount, and the phone did not require unlocking.
  • The unlocked prompted fallback asked Kid Money or Wallet, which child, and how much. Rebecca plus “fifteen cents” added another exact $0.15; the app confirmed the resulting $3.65 balance.
  • A subsequent unlocked one-shot retry of the original phrase then worked. Siri asked only Kid Money or Wallet and, after Kid Money was selected, added another exact $0.15 without child or amount follow-up; Rebecca reached the correct $3.80 balance.
  • After Kid Money was explicitly terminated, the same unlocked one-shot phrase again asked only Kid Money or Wallet and added the exact $0.15 without child or amount follow-up. Rebecca reached the correct $3.95 balance.
  • Interpretation: Xcode 27 build 12 preserves the complete one-shot entity route and locked-screen execution, so build 11’s failure was not removal of the capability. The initial failure followed by successful locked and unlocked attempts is consistent with a post-update Siri registration/cache warm-up, although one sequence does not prove the cause. The warmed route also survives app termination. The app-side intent, entity resolution, exact mutation, spoken result, and persistence all worked when Siri selected the route. Stop repeating the automatic-routing matrix; next validate a fixed personal Shortcut as the deterministic, user-configurable voice path.

Personal and Vocal Shortcut result — September 27, 2026

  • A fixed Shortcut action worked when run directly, but asking Siri for its exact name, “Rebecca Ledger Fifteen,” produced web-search results despite the shortcut’s Allow Running When Locked setting.
  • A Vocal Shortcut trained as “Rebecca allowance fifteen” did execute the fixed action from the locked screen and added the exact 15 cents.
  • The owner then created 36 fixed combinations: give/take, six five-cent-step amounts, and Rebecca/David/Daniel. Real use exposed speech-recognition collisions including Daniel versus David and fifty versus fifteen.
  • Product decision: stop expanding and retesting the voice phrase matrix. Preserve App Intents and Shortcuts as optional integrations, but make the visual home screen the primary fast path. Do not add an in-app guide asking users to train dozens of Vocal Shortcuts.

These findings do not invalidate the earlier successful Siri executions. They show that app-side correctness is insufficient for a dependable primary interaction when speech recognition and system route selection remain outside the app’s control.