> ## Documentation Index
> Fetch the complete documentation index at: https://docs.attensira.com/llms.txt
> Use this file to discover all available pages before exploring further.

# What the win plan remembers

> How the agents avoid repeating a move that did not work: every attempt per prompt and target, the 60-day block after a final no-change, and the skip while a check is still to come.

The [win plan](https://docs.attensira.com/measure/win-this-answer.md) names one next action per model. Before it does, it reads what was already tried for that prompt, so a page fix that came back with no change is not proposed again the next morning with the same tactic.

## An attempt

Every piece of work the agents file records the **tactic** it carries out and the **target** it was aimed at:

* the tactic is the win plan's action kind: `fix_page`, `write_asset`, `get_listed`, `answer_thread` or `pitch`;
* the target is the deciding page or domain, written one way (lowercase host without `www.`, path without a trailing slash, no query). A bare domain covers every page on it, so a listing filed for `g2.com` matches the category page the answers cited.

An **attempt** is one change and one prompt it was filed for, with:

| Field | What it says |
| - | - |
| `tactic`, `target` | What was tried, and where. `tactic_recorded` is `false` for work filed before tactics were recorded; its tactic is read off the work itself (a page rewrite is `fix_page`, a listing `get_listed`, a community reply `answer_thread`). |
| `change_id`, `shipped_at` | The change, and when it took effect. `shipped_at` is null until it is live. |
| `stage` | How far it got: `planned`, `drafted`, `shipping`, `live`, `checked`, `stopped`, `reverted`, `failed` or `declined`. |
| `verdict` | The change's current verdict for this prompt, the same one its [receipt](https://docs.attensira.com/measure/receipts.md) shows. |
| `final_verdict`, `final_at` | The +30-day [check](https://docs.attensira.com/measure/before-and-after.md)'s verdict alone, and when it was read. Null until that check has run. |
| `blocked_until` | Set when the final verdict keeps this tactic off this target. |

The verdict is computed the way the change's receipt computes it, from the same checks, so an attempt and a receipt can never give one change two verdicts.

> [!NOTE]
>
> Only work filed for a prompt is remembered: a page fix, a page rewrite, an article, a listing or a community reply, each of which names the prompts it is for. An outreach draft names no prompt yet, so a pitch sent as an email is not an attempt and does not block anything.

## The rules

1. **A change still being checked holds its target.** While a shipped change on a target still has a check to come, the plan skips that target with the reason **`waiting for re-read`**. Anything new shipped there now would land inside the first change's measured window, and neither could be read.
2. **Only the final check judges a tactic.** A `no_change` or `inside_noise` verdict at the +30-day check (or a measured drop, `dropped`) blocks that tactic on that target for **60 days** from the day the check was read. The +3-day early look and the +7 and +14 checks never block anything.
3. **The next move is a different one.** A blocked action escalates: first to another tactic on the same target (a page fix that did nothing becomes a new page written for the prompt; a listing becomes a pitch to the same directory), then to the next deciding source this model's answers leaned on. The action says what it moved away from in `escalated_from`. When every move on every deciding source is blocked or waiting, the model gets no action that day, and the reason says until when.
4. **Not live is unfinished work, not a verdict.** A shipped change the check did not find on the live page is proposed again as its own ship step (`decision: reship`), and nothing new is drafted for that target.
5. **Too few answers waits.** A check with too few answers to judge (`insufficient`) blocks no tactic. The target waits 60 days for answers to accumulate, then the same tactic may be tried again.

A `moved` verdict blocks nothing. A change you stopped, reverted or declined neither blocks a tactic nor holds its target, whatever its last check said: its checks are called off, so it is never re-shipped and never waited on. A decline has its own rules on the change.

## On each next action

Every model's next action in the plan carries:

* `attempts`: every earlier attempt for this prompt, newest first. An empty list means nothing was tried; `null` means the attempts could not be read, and the [Daily win plan](https://docs.attensira.com/agent/autopilot.md) drafts nothing for that model that day rather than risk repeating a failed tactic.
* `decision`: `propose`, `skip` or `reship`, with `skip_reason` on a skip and `reship_change_id` on a reship.
* `escalated_from`: the tactic and target it replaced, the change behind the block, its final verdict and `blocked_until`.

Nothing here claims that the new tactic will work. It is a different piece of work, measured the same way.

## Reading attempts

* **MCP**: `list(type=attempt)`, filtered by `prompt_id`, `tactic` or `target`; `get(attensira://{workspace}/attempt/{change_id}:{prompt_id})` for one; `get(attensira://{workspace}/question/{prompt_id})` carries the prompt's `attempts`; and `analyze(view=win_plan)` carries them on every step.
* **REST**: `GET /v1/attempts?prompt_id=&tactic=&target=`, the same rows through `GET /v1/objects?uri=`, `attempts` on `GET /v1/prompts/{prompt}/detail`, and on each step of `GET /v1/win-plan`.

Attempts are read-only. To act on the work behind one, act on its change.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.