๐ Debugging Quickstart
Start from the observable state, then inspect the owning boundary.
Decision treeโ
Log locationsโ
| Layer | Check |
|---|---|
| Flutter | flutter logs or browser DevTools |
| Functions | firebase functions:log --project acesense-prod |
| One function | firebase functions:log --only requestUploadPath |
| Firestore | jobs/{jobId} and audit collections |
| Storage | Owner-scoped videos/ and results/ paths |
| Admin/web | Browser 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โ
pendingolder than two hours: abandoned upload.uploadedolder than two hours: finalize/gate path failed.processingolder 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.
Relatedโ
Was this page helpful?