PetroCheck Siri investigation: minimal source and focused evidence ===== README.md ===== # Siri App Shortcut routing reproduction Environment: iPhone 17 Pro Max (iPhone18,2), iOS 27.2 beta (24B5099f), clean restore without backup. Device and Siri languages: Italian. Standard Siri, no Siri AI. PetroCheck 1.3 (637). Xcode 27.2 (27B5028f), iphoneos 27.2 SDK. ## Minimal project Open SiriRoutingProbe/SiriRoutingProbe.xcodeproj in Xcode, select the SiriRoutingProbe scheme, choose your signing team and a connected iPhone, then Run. The app display name is Prova Petro; the bundle identifier is com.zed.PetroCheck.SiriRoutingProbe. No packages or PetroCheck services are required. 1. Open Prova Petro once. 2. Invoke Siri in Italian: "Verifica Siri con Prova Petro". 3. Return to Prova Petro and tap "Ricarica diario". Capture whether begin, result_ready dialog_only and end success were recorded. 4. For comparison, run "Verifica collegamento Siri" directly in Shortcuts. 5. Optionally save a personal shortcut containing only that action, named "Diagnostica minima", and say "Esegui Diagnostica minima". Expected: Siri invokes RoutingProbeIntent and speaks "Il comando Siri ha raggiunto Prova Petro." Observed: the device owner reports that the minimal app's Siri phrase also fails. Its intent diary and host logs were not captured, so its exact failure stage remains unconfirmed. Direct Shortcuts and named-personal-shortcut success were confirmed for PetroCheck; those comparisons have not been confirmed for the minimal app. The project has one App Shortcut, zero intent parameters, background execution and a dialog-only result. It has no networking, location, custom snippet, App Group or third-party dependency. App initialization calls updateAppShortcutParameters(). Journal events share a run_id. result_ready/end attest result construction and return, not successful Siri presentation. A full unsigned Debug arm64 iphoneos 27.2 build passed without warnings/errors; the device owner subsequently ran a signed build using Xcode. No compiled executable or signing credentials are included. Only the developer-team setting was cleared for sharing; choose your own team. ## PetroCheck evidence The declared phrase "Trova carburanti vicini con PetroCheck" fails. Running the same action directly in Shortcuts succeeds. A saved personal shortcut "Diagnostica Petro" containing that action also succeeds when invoked through Siri as "Esegui Diagnostica Petro" and populates the intent journal. Two macOS Console observations on 2026-10-05 show BackgroundShortcutRunner reporting "Couldn't find shortcut with descriptor: ". The first also reports "unable to resolve workflow reference from descriptor". The device owner reported no new begin journal entry for that failed invocation. A launch-time updateAppShortcutParameters() experiment did not resolve it and was removed from PetroCheck. The attached text excerpts are transcriptions of selected Console UI entries, not complete logarchives. System-redacted fields remain redacted. These errors were captured for PetroCheck, not for Prova Petro. Metadata files describe local compiled device bundles, not the on-device registration database. The PetroCheck file is restricted to the canonical action, provider, shortcut and relevant enum. The Prova Petro metadata contains only the minimal app's declarations. This evidence suggests an App Shortcut invocation/routing issue, but does not establish a confirmed Apple bug, a regression against a stable OS, or behavior on another device, language or runtime. ===== SiriRoutingProbe/Probe.swift ===== import AppIntents import Foundation import OSLog import SwiftUI @main struct SiriRoutingProbeApp: App { init() { ProbeShortcuts.updateAppShortcutParameters() } var body: some Scene { WindowGroup { ProbeScreen() } } } struct RoutingProbeIntent: AppIntent { static let title: LocalizedStringResource = "Verifica collegamento Siri" static let supportedModes: IntentModes = [.background] func perform() async throws -> some IntentResult & ProvidesDialog { let runID = UUID().uuidString await ProbeTrace.record("begin", runID: runID) let result: some IntentResult & ProvidesDialog = .result( dialog: "Il comando Siri ha raggiunto Prova Petro." ) await ProbeTrace.record("result_ready dialog_only", runID: runID) await ProbeTrace.record("end success", runID: runID) return result } } struct ProbeShortcuts: AppShortcutsProvider { static var appShortcuts: [AppShortcut] { AppShortcut( intent: RoutingProbeIntent(), phrases: ["Verifica Siri con \(.applicationName)"], shortTitle: "Verifica collegamento Siri", systemImageName: "checkmark.circle" ) } } nonisolated enum ProbeTrace { private static let logger = Logger( subsystem: "com.zed.PetroCheck.SiriRoutingProbe", category: "RoutingProbe" ) static func record(_ phase: String, runID: String) async { let line = "\(Date().ISO8601Format()) \(phase) run_id=\(runID)" logger.notice("\(line, privacy: .public)") await MainActor.run { let existing = UserDefaults.standard.string(forKey: "probe.history") ?? "" let lines = (existing.split(separator: "\n").map(String.init) + [line]).suffix(60) UserDefaults.standard.set(lines.joined(separator: "\n"), forKey: "probe.history") } } } struct ProbeScreen: View { @Environment(\.scenePhase) private var scenePhase @AppStorage("probe.history") private var history = "" var body: some View { NavigationStack { List { Section("Prova vocale") { Text("Pronuncia: Verifica Siri con Prova Petro") SiriTipView(intent: RoutingProbeIntent()) ShortcutsLink() } Section("Diario dell'intent") { Text(history.isEmpty ? "Nessuna esecuzione registrata." : history) .font(.caption.monospaced()) .textSelection(.enabled) Button("Ricarica diario") { reloadHistory() } ShareLink(item: history) { Label("Condividi diario", systemImage: "square.and.arrow.up") } } Section { Text("begin indica l'ingresso nell'intent. result_ready ed end non confermano l'accettazione del risultato da parte di Siri.") } } .navigationTitle("Prova Petro") .onChange(of: scenePhase) { _, phase in if phase == .active { reloadHistory() } } } } private func reloadHistory() { history = UserDefaults.standard.string(forKey: "probe.history") ?? "" } } ===== SiriRoutingProbe/Info.plist ===== CFBundleDevelopmentRegionit CFBundleDisplayNameProva Petro CFBundleExecutable$(EXECUTABLE_NAME) CFBundleIdentifier$(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion6.0 CFBundleNameProva Petro CFBundlePackageTypeAPPL CFBundleShortVersionString1.0 CFBundleVersion1 CFBundleLocalizationsit LSRequiresIPhoneOS UILaunchScreen UIApplicationSceneManifestUIApplicationSupportsMultipleScenes UISupportedInterfaceOrientations UIInterfaceOrientationPortraitUIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRight ===== PetroCheck-Siri-routing-log-2026-10-05.txt ===== Estratto trascritto dalla UI di Console, sorgente iPhone di prova. Raccolta live locale del 2026-10-05, interrotta dopo la conferma «fatto» dell'utente. Orari Europe/Rome (+0200). I campi sono oscurati dal sistema. Non è un'esportazione completa del logarchive. 22:27:12.556468+0200 assistant_service -[WFWorkflowRunnerClient start] Starting shortcut run from client: , descriptor: , request: 22:27:12.556518+0200 assistant_service -[WFOutOfProcessWorkflowController runWorkflowWithDescriptor:request:error:] Getting runner to run workflow with request: (), environment (3) 22:27:12.628750+0200 BackgroundShortcutRunner [0x4000079730e0a00] 'runWorkflowWithDescriptor:request:inEnvironment:runningContext:completion:': Transaction created 22:27:12.630878+0200 BackgroundShortcutRunner -[WFBackgroundShortcutRunner runWorkflowWithDescriptor:request:inEnvironment:runningContext:completion:] Device is NOT in assessmentMode observing for changes. 22:27:12.643717+0200 BackgroundShortcutRunner (WorkflowKit), livello errore -[WFWorkflowDatabaseRunDescriptor(Conversion) workflowReferenceWithDatabase:error:] Couldn't find shortcut with descriptor: Console mostra anche: com.apple.shortcuts / XPCRunner. 22:27:12.658170+0200 BackgroundShortcutRunner -[WFStateMachine transitionToState:withReason:] Transitioning from to , reason: unable to resolve workflow reference from descriptor 22:27:12.663671+0200 BackgroundShortcutRunner [0x4000079730e0a00] 'runWorkflowWithDescriptor:request:inEnvironment:runningContext:completion:': Transaction released ===== PetroCheck-Siri-routing-second-log-2026-10-05.txt ===== Estratto trascritto dalla UI di Console, sorgente iPhone di prova. Raccolta locale ripetuta dopo l'aggiornamento sperimentale all'avvio. L'utente ha ripetuto la frase e confermato «fatto»; streaming poi fermato. Orari Europe/Rome (+0200); è l'oscuramento del sistema. Non è un logarchive completo. 2026-10-05 22:38:27.614968+0200 assistantd [errore] Found no AppShortcutTargets! 2026-10-05 22:38:27.614993+0200 assistantd [errore] Found no AppShortcutTargets! 2026-10-05 22:38:27.615006+0200 assistantd [informazione] Could not cast to VoiceCommand task to create AppShortcut invocation 2026-10-05 22:38:27.616096+0200 assistantd [debug] AppShortcuts enablement result=false 2026-10-05 22:38:27.616449+0200 assistantd [errore] Found no AppShortcutTargets! 2026-10-05 22:38:27.620419+0200 assistantd [informazione] Dawn AppShortcuts experience enabled=false 2026-10-05 22:38:27.620706+0200 assistantd [informazione] Could not cast to VoiceCommand task to create AppShortcut invocation 2026-10-05 22:38:27.713629+0200 BackgroundShortcutRunner [errore] -[WFWorkflowDatabaseRunDescriptor(Conversion) workflowReferenceWithDatabase:error:] Couldn't find shortcut with descriptor: Nota: enablement/Dawn e gli score di matching non sono sufficienti a dedurre una preferenza utente disattivata o a identificare il candidato PetroCheck. ===== Compiled-Metadata/Prova-Petro-root.ssu.yaml ===== apiVersion: ssu/v1 nlu: shortcuts: bundleIdentifier: com.zed.PetroCheck.SiriRoutingProbe intents: - metadata: name: RoutingProbeIntent_0 title: Verifica collegamento Siri corpuses: training: - locale: it utterances: - '{${+prefix} }Verifica Siri con ${+applicationName}' - metadata: name: +negative corpuses: training: - locale: it utterances: - '{${+prefix} }${+standardAppShortcutNegatives}' variables: - name: +applicationName type: ssu/expansion definitions: - locale: it synomyms: - Prova Petro - name: +prefix type: ssu/expansion definitions: - locale: it synomyms: $ref: ssu://Resources/prefix/it.yaml - name: +standardAppShortcutNegatives type: ssu/expansion definitions: - locale: it synomyms: $ref: ssu://Resources/standardAppShortcutNegatives/it.yaml