# Playbook — Spend the next 48 hours on the evidence that actually moves the answer

Rank seven collection actions against four open gaps under a deadline and a budget, act, re-rank from the graph, and end on an explicit abstention.

## What you need

- Docker 24 or later
- Python 3.9 or later
- About 3 minutes

## 1. Start a disposable Corrobore

```bash
mkdir -p .corrobore-tls .corrobore-secrets
printf '%s\n' 'change-me' > .corrobore-secrets/http-token
openssl req -x509 -newkey rsa:2048 -sha256 -nodes \
  -keyout .corrobore-tls/server.key -out .corrobore-tls/server.crt \
  -days 30 -subj '/CN=localhost' \
  -addext 'basicConstraints=critical,CA:FALSE' \
  -addext 'keyUsage=critical,digitalSignature,keyEncipherment' \
  -addext 'extendedKeyUsage=serverAuth' \
  -addext 'subjectAltName=DNS:localhost,IP:127.0.0.1'

docker run --rm -d --name corrobore-playbook \
  -p 127.0.0.1:8080:8080 \
  -e CORROBORE_STORAGE_MODE=ephemeral \
  -v "$PWD/.corrobore-secrets/http-token:/run/secrets/corrobore-http-token:ro" \
  -v "$PWD/.corrobore-tls/server.crt:/run/secrets/tls.crt:ro" \
  -v "$PWD/.corrobore-tls/server.key:/run/secrets/tls.key:ro" \
  ghcr.io/estance-labs/corrobore:latest

curl --insecure -H 'Authorization: Bearer change-me' https://127.0.0.1:8080/health/ready
```

## 2. Install the notebook dependencies

```bash
pip install requests
```

## 3. Run the notebook

```bash
jupyter lab notebook.ipynb
```

The notebook loads `dataset.json` from the same directory. Keep the three files together.

## 4. What to observe

1. The highest-gain action is ineligible: 240 hours against a 48-hour deadline.
2. Two actions are excluded for closing no open gap, detected from the absence of a `would_close` edge rather than from a low score.
3. Closing a gap is an audited `update` with `expected_version`, so the loop reads a real state rather than a local cache.
4. After acting, the performed action drops out of the ranking because its gap is closed.
5. The loop ends by naming the gaps that stayed open and the constraint that blocked each.

## 5. Change one thing and re-run

- Raise the deadline to 300 hours and watch the subpoena become the right move.
- Change `action--auth-log-request` authority to `requires_legal` and see the loop stop one action earlier.
- Lower `MIN_SCORE` to 0.1 and check whether the extra actions bought anything.
- Set the budget to 0.2 and confirm the abstention names cost rather than authority.

## Boundaries

- The catalogue, the gains and the costs are synthetic and authored, not measured.
- Next Best Evidence ranking, information gain and stop conditions are `graph-core` primitives with no HTTP route in this release; section 2 is a client-side stand-in of the same shape.
- Executing an external collection is the integrator's responsibility. Here the effect of acting is written back to the graph.

## Tear down

```bash
docker rm -f corrobore-playbook
```

---

Documentation: https://docs.corrobore.org — Source: https://github.com/Estance-Labs/corrobore
