**TL;DR:** Symptom: operations fail on a just-created index. Creation is async; poll describe_index until status.ready is true before writing or querying. Confirm it Call pc.describe_index(name) in a loop and read status.ready. Log the state transitions so you can see stuck vs slow.

## The fix

# Diagnosis

## Symptom

`create_index` returned, but upserts or queries fail, or `describe_index` shows the index not ready.

## Likely cause

Index creation submits a job to a queue; the call returns before the index can serve traffic. Control plane and data plane are separate, so the create call succeeding says nothing about readiness.

## Confirm it

Call `pc.describe_index(name)` in a loop and read `status.ready`. While false, the index is still provisioning. Log the state transitions so you can see stuck vs slow.

## Fix

Poll with backoff until ready, then proceed:

```
import time
while True:
    desc = pc.describe_index(name)
    if desc.status.ready:
        break
    time.sleep(5)
```

Put this wait in every script that creates an index, including tests and seed scripts.

## Verify the fix

After the loop exits, upsert one probe vector and query it back. If provisioning never completes (many minutes), check the console and contact support with the index name and timestamps.

## When to use this

- This covers exactly what the title says: Pinecone diagnosis.
- You are setting this up for the first time, or auditing an existing setup.
- You want the key gotchas in one place before you start.

## When not to use this

- You are doing a different workflow with Pinecone; these steps are specific to the title above.
- You need the full reference docs; this is the short path, not the manual.

## Compatibility

- Not pinned to a specific version; follows current Pinecone behavior.