Skip to content

Commit 019cf97

Browse files
Say what the field-test harness establishes, and what it does not (#193)
The harness is structural regression coverage for the install prompt: a green run means the prompt still survives pressures that once broke it. The personas are synthetic, written from our own analysis rather than from any platform's policy text, so a green run is not evidence that a live platform accepts the prompt and must not be reported as though it were. A hosted product is (prompt x model x runtime x UI) and this reproduces one of the four. That scope was stated in `field-test/README.md` and missing from the two documents that tell a contributor to rely on the gate. It now appears in all three, in the same terms. Also drops the pointer to a private evaluation repository, which is not being created. High-fidelity evaluation against real policy text would need one; nobody has a standing need for it, and an unbuilt plan referenced in shipped docs reads as a commitment. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent d5d4b08 commit 019cf97

3 files changed

Lines changed: 21 additions & 11 deletions

File tree

‎CONTRIBUTING.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ reads exactly like passing.
6666

6767
Changing onboarding, the install prompt or the setup guide? Read `MAINTAINING.md` first — it maps which
6868
files are load-bearing — and note that the install prompt is a tested artifact with its own gate in
69-
`field-test/`.
69+
`field-test/`. That gate is structural regression coverage against synthetic personas, not evidence about
70+
any live platform's policy; `field-test/README.md` says what it does and does not establish.
7071

7172
## Two packaging decisions, and why they are what they are
7273

‎MAINTAINING.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ node field-test/run.mjs --persona hostile --rounds 3
3232

3333
It runs a real AI agent through the full install in a throwaway fixture against a mocked API and scores the outcome. Read each round's `report.md` (the HESITATIONS / DECISION ANALYSIS sections) — anything an agent pauses on is a future refusal. See [`field-test/README.md`](field-test/README.md) for the improve-and-retest loop, the safety model, and what to do when the gate is red for environmental reasons (stale published docs, release freshness).
3434

35+
What it establishes is **structural regression coverage**: the prompt still survives pressures that once broke it. The personas are synthetic — written from our own analysis, not from any platform's policy text — so a green run is not evidence that a live platform accepts the prompt, and should not be reported as though it were.
36+
3537
Caveat: the fixture installs the **published** package, so an unpublished `guide`/CLI change can't be exercised end-to-end — publish first, or accept that the run validates only the prompt shape.
3638

3739
## Don'ts (these are refusal triggers, not style nits)

‎field-test/README.md‎

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,29 @@ Runs a real AI coding agent against the [README install prompt](../README.md#ins
44

55
Dev-only: nothing in this directory ships in the npm package.
66

7-
## The personas are synthetic
7+
## What this harness is, and what it is not
88

9-
Each persona reproduces the *pressures* that a class of platform applies to a request like this one —
9+
It is **structural regression coverage** for the install prompt. It does not establish that any real
10+
platform will accept the prompt, and no result from it should be reported as though it did.
11+
12+
Each persona reproduces the *pressures* a class of platform applies to a request like this one — a
1013
non-technical user, supply-chain caution, a runtime that stages commands rather than running them — written
11-
from our own analysis of observed behaviour.
14+
from our own analysis of observed behaviour. They are not the platforms' system prompts and not paraphrases
15+
of them: third-party prompts are not ours to publish, whatever the tarball excludes.
16+
17+
That trade is worth stating plainly rather than working around. A synthetic persona is weaker evidence than
18+
the policy a product actually runs, so a green run means the prompt still survives the SHAPE of a pressure
19+
that once broke it. It is a regression check, and its value is that the pressures encoded here are ones
20+
that produced real refusals — every clause in the prompt exists because a run like this failed without it.
1221

13-
They are not the platforms' system prompts and not paraphrases of them: third-party prompts are not ours to
14-
publish, whatever the tarball excludes. That is a real trade. A synthetic persona is weaker evidence than
15-
the policy a product actually runs, so what this harness proves is that the prompt survives the SHAPE of
16-
the pressure. Higher-fidelity evaluation, and the detailed record of which refusals came from where,
17-
belong in a private evaluation repository.
22+
What it cannot tell you is whether a live platform's current policy accepts the prompt. A hosted product is
23+
(prompt × model × runtime × UI), and this reproduces one of the four. Treat a refusal reported from the
24+
field as new coverage to add, not as a failure of this harness to have predicted it.
1825

1926
`{{FIXTURE_DIR}}` and `{{INSTALL_PROMPT}}` are the only contract a persona has to satisfy; a new one is a
2027
markdown file using both.
2128

22-
Provenance — that a policy is synthetic, why, and what the harness is proving — goes in a
29+
Provenance — that a policy is synthetic, why, and what the persona is exercising — goes in a
2330
`<!-- field-test:meta ... -->` block. The runner strips those blocks before the prompt reaches the agent,
2431
and `runAgent` REFUSES to write a prompt still containing one. The refusal sits at the seam —
2532
`child.stdin.write` — rather than in the runner, so it covers every call site including ones not written
@@ -224,5 +231,5 @@ Until a publish lands and ages, use this ladder instead of burning hostile round
224231

225232
## Known limitations
226233

227-
- The personas are synthetic and the matrix covers multiple model families, but a hosted platform is still (prompt × model × runtime × UI) — and neither the real policy text, the runtime, nor the UI layer is reproduced here. A green harness is necessary and not sufficient: a refusal has been found by a real user after this harness passed a prompt. Treat a real-world refusal report as a new persona — encode the pressure it applied into `personas/`, in your own words, so the regression stays covered.
234+
- The personas are synthetic and the matrix covers multiple model families, but a hosted platform is still (prompt × model × runtime × UI) — and neither the real policy text, the runtime, nor the UI layer is reproduced here. A green harness is necessary and not sufficient, and this is not hypothetical: a refusal has been found by a real user after this harness passed a prompt. Treat a real-world refusal report as a new persona — encode the pressure it applied into `personas/`, in your own words, so the regression stays covered. Do not describe a green run as evidence about a platform's policy.
228235
- The fixture installs the *published* package. An unpublished `guide`/CLI change can't be exercised end-to-end by the agent (it will install the registry version); publish first or accept that the run validates the prompt shape only.

0 commit comments

Comments
 (0)