Skip to main content

๐Ÿ› Debugging Quickstart

Start from the observable state, then inspect the owning boundary.

Decision treeโ€‹

Log locationsโ€‹

LayerCheck
Flutterflutter logs or browser DevTools
Functionsfirebase functions:log --project acesense-prod
One functionfirebase functions:log --only requestUploadPath
Firestorejobs/{jobId} and audit collections
StorageOwner-scoped videos/ and results/ paths
Admin/webBrowser DevTools plus callable logs

High-signal checksโ€‹

Wrong Functions regionโ€‹

Flutter must use FirebaseFunctions.instanceFor(region: 'europe-west1'); admin must use getFunctions(app, 'europe-west1').

Upload denied before a job existsโ€‹

Inspect requestUploadPath logs. Common server-owned gates are:

  • missing durable aiConsent
  • no active trial/paid entitlement
  • monthly analysis cap
  • daily or concurrent upload quota
  • invalid metadata, extension, duration, or size

Job stuckโ€‹

  • pending older than two hours: abandoned upload.
  • uploaded older than two hours: finalize/gate path failed.
  • processing older than six hours: backend reconciliation should fail it.

The hourly reconcileStuckJobs sweep releases quota and refunds API-job cost through the idempotent failure path. Use adminRetryJob for an eligible retry; do not directly forge status in Firestore.

Private docs/launchpad unavailableโ€‹

Confirm both the Hosting rewrite and the corresponding Function were deployed, and that functions/site contains the current build. A missing bundle returns 503; a missing/expired session returns the sign-in page.