What this audit checks
Authentication & access
- Personal access token still valid (auth on /users/me)
- Default project exists, is not archived, and is writable
- Finding-id custom field resolvable in the workspace (round-trip join key present)
- Asana rate-limit headroom > 30% (150/min free, 1500/min premium)
Backlog health
- Open task count vs 30-day baseline (sudden growth = drowning signal)
- Blocked-section task count + change WoW
- Oldest open task age (>90 days = backlog rot)
- Unassigned tasks > 5 (work that nobody owns)
- Section/completion drift - tasks in a Done section never marked complete
VortexIQ findings lifecycle (the stickiness test)
- Abandoned findings - VortexIQ-created tasks, completed=false, modified_at >14d
- Finding resolution rate over rolling 90d (target >75%)
- Avg time-to-fix for completed findings, by priority
- Findings closed Won’t-Do without a comment (silent dismissals)
- Regression rate - findings reopened (completed flipped back to false) after completion
Team capacity
- Assignees with >10 open tasks (overload signal)
- Assignees with zero completed tasks in 14d (parked work)
- Cycle time degradation > 25% week-over-week
- Sprint scope-creep (tasks added after the date-bounded sprint window started)
Cross-connector signals
- Critical findings from sibling connectors (shopify/bigcommerce/adobe/cybersource) older than 7 days with no Asana task - coverage gap
- Asana tasks referencing decommissioned/archived integrations - stale work
Severity thresholds
| Signal | Warn | Critical |
|---|---|---|
vortexiq_findings_abandoned | 5 | 15 |
vortexiq_finding_resolution_rate | 75 | 50 |
blocked_tickets | 3 | 8 |
unassigned_tickets | 5 | 20 |
oldest_open_ticket_age_days | 60 | 90 |
cycle_time_change_pct | 25 | 50 |
rate_limit_headroom_pct | 30 | 10 |
Data sources
GET https://app.asana.com/api/1.0/users/me- Token + account infoGET https://app.asana.com/api/1.0/projects- Default project access + archived/writability checkGET https://app.asana.com/api/1.0/projects/{project_gid}/sections- Section name → status_category mappingGET https://app.asana.com/api/1.0/tasks- Task reads (open count, blocked, abandoned, by-assignee, throughput, cycle/lead time, findings)GET https://app.asana.com/api/1.0/users- Assignee resolution + capacity calc