TL;DR: Rebuild the coverage report as a forward projection that drops each reservation at its expiry date. Coverage as a snapshot is easy - covered hours divided by total hours, right now - but it hides the cliff. Project coverage per week for the next 90 days so the report shows 100 percent today falling to the true uncovered level next week.

```text
cost agent's RI coverage report said 100%  -  it counted the expiring reservations that lapse next week
```

1. List all RIs with their expiration dates and sort by expiry. Expected: you find reservations expiring within days or weeks that the 100 percent figure was counting as full coverage.
2. Rebuild the coverage report as a forward projection: coverage per week for the next 90 days, dropping each RI at its expiry. Expected: the report shows the cliff - 100 percent today, dropping to the true uncovered level next week.
3. Decide what to do about the cliff before it hits: renew, replace with savings plans, or accept on-demand for the gap. Expected: a purchase or non-purchase decision made deliberately, not discovered on the bill.
4. Change the agent's coverage rule: coverage reports must weight or annotate by time-to-expiry, and any report above 90 percent coverage with expirations inside 30 days gets an explicit warning. Expected: no more surprise cliffs hiding behind a clean 100 percent.

## Use this when
- A coverage report looks perfect but reservations are expiring soon
- You need forward-looking RI and savings plan coverage, not a snapshot
- An agent's all-covered report preceded an on-demand billing surprise

## Not for this skill when
- No reservations expire in the next 90 days - the snapshot is fine
- You are tracking savings plan utilization rather than RI coverage - different metric, different report
- The expiring RIs are already renewed or replaced - verify the replacement is active first

## Variant phrasings
- ri coverage report counted expiring reservations
- reserved instance coverage cliff after expiry
- how to project ri coverage forward with expiry dates
- agent said 100 percent covered but ris expire next week

## Why it happens
Coverage is easy to compute as a snapshot: covered hours divided by total hours, right now. Expiry is a second dimension the snapshot ignores. Agents report the present because the present is one API call; the future needs the expiry dates joined in, and nobody asked for that join until the bill arrived.

## Edge cases
- Staggered expirations create a staircase, not a cliff. Project weekly to see each step.
- Renewed RIs may have different terms (1-year versus 3-year, different payment). The projection should use the replacement's terms, not assume identical renewal.
- Partial-month expirations: an RI expiring mid-month covers only part of that month's hours. Prorate it in the projection.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_pOtxbXeD5xtLd1PYAy9JQA
