|
| 1 | +# Coverage gaps only a real agent can close |
| 2 | + |
| 3 | +The probe (`agentseam probe`, promoted from `tools/experiment.py` in wave 1 of the `armed` |
| 4 | +initiative) covers 8 trials × 3 gateable events × 16 agents. The witnessed evidence covers a |
| 5 | +narrow slice of that: `claude_code@2.1.263`, `pre_tool` only, and every trial except |
| 6 | +`escalate` (the one `PreToolUse` reading no vendor doc settles). This closes the *tooling* |
| 7 | +gap, not the *evidence* gap -- **a cloud session holds no vendor credentials and cannot |
| 8 | +produce a witnessed row.** These three gaps are yours to close, on a machine with Claude |
| 9 | +Code installed and authenticated. |
| 10 | + |
| 11 | +## What "witnessed", "tested" and "recorded" mean |
| 12 | + |
| 13 | +A reader must be able to tell these apart without opening the source: |
| 14 | + |
| 15 | +| Word | What it means | How you get one | |
| 16 | +| :--- | :--- | :--- | |
| 17 | +| **witnessed** | Somebody watched the real vendor client do this, on this machine, right now. | `--driver "<your headless CLI, containing {prompt}>"` | |
| 18 | +| **tested** | An automated check exercised the code path -- the dialect, the classifier, the schema -- without a real vendor client. Real, useful, **not** a vendor observation. | `--driver reference` (the protocol made executable) or the `pytest` suite itself | |
| 19 | +| **recorded** | A previously *witnessed* run, frozen to a file and replayed deterministically. The data is witnessed; the replay is not a new witness. | `--driver recorded` (the default once a recording exists) | |
| 20 | + |
| 21 | +`agentseam probe run`'s own output never blurs these: a report's `driver` field is one of |
| 22 | +`real-agent`, `reference` or `recorded`, and its `basis` field is one of `live-run`, |
| 23 | +`live-run-partial`, `vendor-docs`, `vendor-source`, `third-party-install` or `inherited` |
| 24 | +(`src/agentseam/matrix_terms.py`). `evidence_report.validate()` refuses a report from the |
| 25 | +`reference` driver that claims a live basis -- that is the one invariant this whole |
| 26 | +initiative exists to enforce (contract invariant 1). |
| 27 | + |
| 28 | +## The three gaps |
| 29 | + |
| 30 | +1. **`escalate` at `pre_tool`.** The recording covers seven of eight trials at this gate. |
| 31 | +2. **Every trial at `prompt_submit`.** No agent has ever been witnessed at this gate. |
| 32 | +3. **Every trial at `stop`.** No agent has ever been witnessed at this gate, including the |
| 33 | + sentinel re-fire asymmetry that gate's own docs describe |
| 34 | + (`src/agentseam/probe/experiment.py`'s `_blocked()`). |
| 35 | + |
| 36 | +## Close one gap |
| 37 | + |
| 38 | +Pick a row from [`docs/witness-skeleton.json`](witness-skeleton.json) and run its command, |
| 39 | +replacing the placeholder driver with your own headless invocation: |
| 40 | + |
| 41 | +```bash |
| 42 | +agentseam probe run --agent claude_code --event pre_tool --trial escalate \ |
| 43 | + --driver "<your headless claude_code invocation, containing {prompt}>" \ |
| 44 | + --agent-version <version> --record --report --reporter @yourhandle \ |
| 45 | + > escalate-pre_tool-report.json |
| 46 | + |
| 47 | +agentseam probe run --agent claude_code --event prompt_submit \ |
| 48 | + --driver "<your headless claude_code invocation, containing {prompt}>" \ |
| 49 | + --agent-version <version> --record --report --reporter @yourhandle \ |
| 50 | + > prompt_submit-report.json |
| 51 | + |
| 52 | +agentseam probe run --agent claude_code --event stop \ |
| 53 | + --driver "<your headless claude_code invocation, containing {prompt}>" \ |
| 54 | + --agent-version <version> --record --report --reporter @yourhandle \ |
| 55 | + > stop-report.json |
| 56 | +``` |
| 57 | + |
| 58 | +`--record` appends to (never replaces) `data/recordings/claude_code@<version>.json`, so |
| 59 | +running all three builds one recording covering every gate. `--report` prints the |
| 60 | +evidence-report shape alongside it -- the two are independent flags and combine safely; the |
| 61 | +`.json` files above are what you paste into the **Evidence report** issue template, or add |
| 62 | +directly to a PR (`data/recordings/*.json` plus the `data/matrix.json` per-claim `test` |
| 63 | +pointers the recording backs). |
| 64 | + |
| 65 | +`docs/witness-skeleton.json`'s `report` blocks are placeholders on purpose: replace the |
| 66 | +blank fields with your actual `--report` output, never hand-type a `basis`, `date` or |
| 67 | +`version`. `tests/test_coverage_skeleton.py` asserts the committed skeleton fails |
| 68 | +`evidence_report.validate()` exactly as it stands, and a genuinely filled-in block |
| 69 | +validates -- so the file can never be mistaken for evidence, only for the shape evidence |
| 70 | +takes. |
| 71 | + |
| 72 | +## What this is not |
| 73 | + |
| 74 | +A run against `reference` or `recorded` never counts as closing one of these gaps -- only a |
| 75 | +run against the real, installed `claude_code` does. See |
| 76 | +[CONTRIBUTING.md](../CONTRIBUTING.md#contributing-evidence-you-do-not-need-to-write-code) |
| 77 | +for the full walk-through and the two ways to submit what you find. |
0 commit comments