@openwop/openwop-conformance 2.46.26 → 2.46.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +2 -2
- package/dist/spec-artifacts.lock.json +2 -2
- package/fixtures/eval-suites/conformance-eval-efficiency-ungated.json +97 -0
- package/fixtures/eval-suites/conformance-eval-memory-isolation.json +71 -0
- package/fixtures/eval-suites/conformance-eval-regression-base.json +74 -0
- package/fixtures/eval-suites/conformance-eval-regression-candidate.json +74 -0
- package/fixtures.md +17 -1
- package/package.json +2 -2
- package/requirements.json +131 -26
- package/scenario-majors.json +5 -2
- package/schemas/CORPUS-STAMP.json +12 -12
- package/src/lib/eval-efficiency-witness.ts +29 -1
- package/src/lib/eval-memory-witness.ts +82 -0
- package/src/lib/eval-regression-witness.ts +77 -0
- package/src/scenarios/v2-eval-regression-baseline.test.ts +214 -0
- package/src/scenarios/v2-eval-trajectory-trials.test.ts +50 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [2.46.28] — 2026-10-26 — RFC 0244 G2 closed; RFC 0251 and the §F legs
|
|
2
|
+
|
|
3
|
+
- **New scenario `v2-eval-regression-baseline` (RFC 0251)** over two fixtures sharing one `suiteId` (`conformance-eval-regression-base` / `-candidate`), whose paired scores are equal while the aggregates differ by 1/3: `0251.shape` (server-free), `baseline-echoed`, `baseline-refused`, `baseline-uniform` (needs `OPENWOP_TEST_TENANT_B_API_KEY`, else `blocked`), `fields-refused`, and RFC 0244 §F `0244.regression-paired` and `regression-no-false-verdict`. Judges in `lib/eval-regression-witness.ts`.
|
|
4
|
+
- **Host impact:** opt-in. The legs need `agents.evalSuite.baselineSelection` and both fixtures listed; no host does yet, so they record `inapplicable`.
|
|
5
|
+
- **RFC 0244's G2 closes** on openwop-app's certified cut `fc9f666ed` (the three counter legs and `0244.efficiency-tool-calls` `executed-pass`), so the packed `spec/v1/gaps.json` changes.
|
|
6
|
+
|
|
7
|
+
## [2.46.27] — 2026-10-25 — RFC 0244 never-gated and trial-isolation legs
|
|
8
|
+
|
|
9
|
+
- **New leg `0244.efficiency-never-gated` in `v2-eval-trajectory-trials`**, on the new fixture `conformance-eval-efficiency-ungated`: tasks `lean` (one scripted call) and `busy` (eight) share an output and an expectation, so `busy` must pass with `lean`'s score and the suite must pass at `passScore` 1. `blocked` when the calls never ran or `lean` fails. Judge `judgeNeverGated` in `lib/eval-efficiency-witness.ts`.
|
|
10
|
+
- **New leg `0244.trial-memory-isolated` (RFC 0244 G3)**, on the new fixture `conformance-eval-memory-isolation` (`trials.count: 2`, gated on `agents.evalSuite.trials`), through the conformance-reserved memory tool `conformance.eval:memory` (contract in `fixtures.md`). Each trial must read the `memorySeed` entry, and its first read of `trial-note` must find nothing before its own write. Judge in `lib/eval-memory-witness.ts`; a tool whose writes never read back records `blocked`.
|
|
11
|
+
- **Host impact:** none until a host lists a new fixture in discovery `fixtures`. Listing the memory fixture opts the host in to the memory-tool contract.
|
|
12
|
+
|
|
1
13
|
## [2.46.26] — 2026-10-25 — RFC 0244 model-usage and cost legs
|
|
2
14
|
|
|
3
15
|
- **New leg `0244.efficiency-model-usage` in `v2-eval-trajectory-trials`**, on the existing trajectory and trials runs. Per-task `modelCallCount`, `inputTokens` and `outputTokens`, times the trial count, must sum to the agent's `provider.usage` inside its `agent.invocation.*` brackets (judge and delegate calls excluded); without brackets they must not exceed the run's usage.
|
package/README.md
CHANGED
|
@@ -137,7 +137,7 @@ Each scenario file records its disposition and assertion count in `<report-dir>/
|
|
|
137
137
|
|
|
138
138
|
## What's Covered
|
|
139
139
|
|
|
140
|
-
The current suite has
|
|
140
|
+
The current suite has 662 scenario files under `src/scenarios/`. By target major ([`scenario-majors.json`](./scenario-majors.json)): 222 files run against a v2 host and 455 against a v1 host; 15 of them run at both.
|
|
141
141
|
|
|
142
142
|
The v2 scenarios (`src/scenarios/v2-*.test.ts`) cover, by area:
|
|
143
143
|
|
|
@@ -166,7 +166,7 @@ Three kinds of scenario share the tree:
|
|
|
166
166
|
- **Host** checks drive a live host over HTTP.
|
|
167
167
|
- **Gated** checks run only when the host advertises the family, profile or fixture they need, and otherwise record `inapplicable` or `blocked` with a reason. `--require-behavior` turns an advertised-but-unwitnessable behaviour into a failure.
|
|
168
168
|
|
|
169
|
-
Current source tree:
|
|
169
|
+
Current source tree: 662 scenario files. [`coverage.md`](./coverage.md) maps each spec document and every OpenAPI operation to its scenarios. [`CHANGELOG.md`](./CHANGELOG.md) records when each scenario landed.
|
|
170
170
|
|
|
171
171
|
## How the 2.x suite is built
|
|
172
172
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"suiteId": "core.openwop.evals.conformance-eval-efficiency-ungated",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"targetAgentId": "core.conformance.agents.scripted",
|
|
5
|
+
"modes": [
|
|
6
|
+
"golden"
|
|
7
|
+
],
|
|
8
|
+
"thresholds": {
|
|
9
|
+
"passScore": 1
|
|
10
|
+
},
|
|
11
|
+
"tasks": [
|
|
12
|
+
{
|
|
13
|
+
"taskId": "lean",
|
|
14
|
+
"input": {
|
|
15
|
+
"script": [
|
|
16
|
+
{
|
|
17
|
+
"tool": "conformance.eval:lookup",
|
|
18
|
+
"arguments": {
|
|
19
|
+
"orderId": "o-1"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"output": "done"
|
|
24
|
+
},
|
|
25
|
+
"expected": {
|
|
26
|
+
"kind": "golden",
|
|
27
|
+
"match": {
|
|
28
|
+
"strategy": "contains",
|
|
29
|
+
"value": "done"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"taskId": "busy",
|
|
35
|
+
"input": {
|
|
36
|
+
"script": [
|
|
37
|
+
{
|
|
38
|
+
"tool": "conformance.eval:lookup",
|
|
39
|
+
"arguments": {
|
|
40
|
+
"orderId": "o-1"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"tool": "conformance.eval:lookup",
|
|
45
|
+
"arguments": {
|
|
46
|
+
"orderId": "o-2"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"tool": "conformance.eval:lookup",
|
|
51
|
+
"arguments": {
|
|
52
|
+
"orderId": "o-3"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"tool": "conformance.eval:lookup",
|
|
57
|
+
"arguments": {
|
|
58
|
+
"orderId": "o-4"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"tool": "conformance.eval:lookup",
|
|
63
|
+
"arguments": {
|
|
64
|
+
"orderId": "o-5"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"tool": "conformance.eval:lookup",
|
|
69
|
+
"arguments": {
|
|
70
|
+
"orderId": "o-6"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"tool": "conformance.eval:lookup",
|
|
75
|
+
"arguments": {
|
|
76
|
+
"orderId": "o-7"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"tool": "conformance.eval:lookup",
|
|
81
|
+
"arguments": {
|
|
82
|
+
"orderId": "o-8"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"output": "done"
|
|
87
|
+
},
|
|
88
|
+
"expected": {
|
|
89
|
+
"kind": "golden",
|
|
90
|
+
"match": {
|
|
91
|
+
"strategy": "contains",
|
|
92
|
+
"value": "done"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"suiteId": "core.openwop.evals.conformance-eval-memory-isolation",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"targetAgentId": "core.conformance.agents.scripted",
|
|
5
|
+
"modes": [
|
|
6
|
+
"golden"
|
|
7
|
+
],
|
|
8
|
+
"trials": {
|
|
9
|
+
"count": 2,
|
|
10
|
+
"k": 1,
|
|
11
|
+
"passRule": "all"
|
|
12
|
+
},
|
|
13
|
+
"tasks": [
|
|
14
|
+
{
|
|
15
|
+
"taskId": "write-then-read",
|
|
16
|
+
"input": {
|
|
17
|
+
"script": [
|
|
18
|
+
{
|
|
19
|
+
"tool": "conformance.eval:memory",
|
|
20
|
+
"arguments": {
|
|
21
|
+
"op": "read",
|
|
22
|
+
"id": "seeded"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"tool": "conformance.eval:memory",
|
|
27
|
+
"arguments": {
|
|
28
|
+
"op": "read",
|
|
29
|
+
"id": "trial-note"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"tool": "conformance.eval:memory",
|
|
34
|
+
"arguments": {
|
|
35
|
+
"op": "write",
|
|
36
|
+
"id": "trial-note",
|
|
37
|
+
"content": "written"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"tool": "conformance.eval:memory",
|
|
42
|
+
"arguments": {
|
|
43
|
+
"op": "read",
|
|
44
|
+
"id": "trial-note"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"output": "done"
|
|
49
|
+
},
|
|
50
|
+
"expected": {
|
|
51
|
+
"kind": "golden",
|
|
52
|
+
"match": {
|
|
53
|
+
"strategy": "contains",
|
|
54
|
+
"value": "done"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"fixtures": {
|
|
58
|
+
"memorySeed": [
|
|
59
|
+
{
|
|
60
|
+
"id": "seeded",
|
|
61
|
+
"content": "seed",
|
|
62
|
+
"tags": [
|
|
63
|
+
"conformance"
|
|
64
|
+
],
|
|
65
|
+
"createdAt": "2026-01-01T00:00:00Z"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"suiteId": "core.openwop.evals.conformance-eval-regression",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"targetAgentId": "core.conformance.agents.scripted",
|
|
5
|
+
"modes": [
|
|
6
|
+
"golden",
|
|
7
|
+
"regression"
|
|
8
|
+
],
|
|
9
|
+
"tasks": [
|
|
10
|
+
{
|
|
11
|
+
"taskId": "base-only",
|
|
12
|
+
"input": {
|
|
13
|
+
"script": [
|
|
14
|
+
{
|
|
15
|
+
"tool": "conformance.eval:lookup",
|
|
16
|
+
"arguments": {
|
|
17
|
+
"orderId": "o-1"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"output": "done"
|
|
22
|
+
},
|
|
23
|
+
"expected": {
|
|
24
|
+
"kind": "golden",
|
|
25
|
+
"match": {
|
|
26
|
+
"strategy": "contains",
|
|
27
|
+
"value": "never-in-output"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"taskId": "shared-a",
|
|
33
|
+
"input": {
|
|
34
|
+
"script": [
|
|
35
|
+
{
|
|
36
|
+
"tool": "conformance.eval:lookup",
|
|
37
|
+
"arguments": {
|
|
38
|
+
"orderId": "o-1"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"output": "done"
|
|
43
|
+
},
|
|
44
|
+
"expected": {
|
|
45
|
+
"kind": "golden",
|
|
46
|
+
"match": {
|
|
47
|
+
"strategy": "contains",
|
|
48
|
+
"value": "done"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"taskId": "shared-b",
|
|
54
|
+
"input": {
|
|
55
|
+
"script": [
|
|
56
|
+
{
|
|
57
|
+
"tool": "conformance.eval:lookup",
|
|
58
|
+
"arguments": {
|
|
59
|
+
"orderId": "o-1"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"output": "done"
|
|
64
|
+
},
|
|
65
|
+
"expected": {
|
|
66
|
+
"kind": "golden",
|
|
67
|
+
"match": {
|
|
68
|
+
"strategy": "contains",
|
|
69
|
+
"value": "done"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"suiteId": "core.openwop.evals.conformance-eval-regression",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"targetAgentId": "core.conformance.agents.scripted",
|
|
5
|
+
"modes": [
|
|
6
|
+
"golden",
|
|
7
|
+
"regression"
|
|
8
|
+
],
|
|
9
|
+
"tasks": [
|
|
10
|
+
{
|
|
11
|
+
"taskId": "shared-a",
|
|
12
|
+
"input": {
|
|
13
|
+
"script": [
|
|
14
|
+
{
|
|
15
|
+
"tool": "conformance.eval:lookup",
|
|
16
|
+
"arguments": {
|
|
17
|
+
"orderId": "o-1"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"output": "done"
|
|
22
|
+
},
|
|
23
|
+
"expected": {
|
|
24
|
+
"kind": "golden",
|
|
25
|
+
"match": {
|
|
26
|
+
"strategy": "contains",
|
|
27
|
+
"value": "done"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"taskId": "shared-b",
|
|
33
|
+
"input": {
|
|
34
|
+
"script": [
|
|
35
|
+
{
|
|
36
|
+
"tool": "conformance.eval:lookup",
|
|
37
|
+
"arguments": {
|
|
38
|
+
"orderId": "o-1"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"output": "done"
|
|
43
|
+
},
|
|
44
|
+
"expected": {
|
|
45
|
+
"kind": "golden",
|
|
46
|
+
"match": {
|
|
47
|
+
"strategy": "contains",
|
|
48
|
+
"value": "done"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"taskId": "candidate-only",
|
|
54
|
+
"input": {
|
|
55
|
+
"script": [
|
|
56
|
+
{
|
|
57
|
+
"tool": "conformance.eval:lookup",
|
|
58
|
+
"arguments": {
|
|
59
|
+
"orderId": "o-1"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"output": "done"
|
|
64
|
+
},
|
|
65
|
+
"expected": {
|
|
66
|
+
"kind": "golden",
|
|
67
|
+
"match": {
|
|
68
|
+
"strategy": "contains",
|
|
69
|
+
"value": "done"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
}
|
package/fixtures.md
CHANGED
|
@@ -77,6 +77,10 @@ All fixtures MUST advertise:
|
|
|
77
77
|
| Eval — Fixture Error | `conformance-eval-fixture-error` | RFC 0245 — `onMiss: "fail"`; one task calls the same tool twice, served first by an `isError: true` entry, then by a success (`v2-eval-trajectory-trials`) | eval run `completed`; the first call is recorded as a tool error | ≤ 30s |
|
|
78
78
|
| Eval — Counter (live) | `conformance-eval-counter-live` | RFC 0244 §D, G2 — `onMiss: "live"`; one task makes four `conformance.eval:counter` calls that match no entry, so each runs the live counter (`v2-eval-trajectory-trials`) | eval run `completed`; four live `{key, count}` outcomes | ≤ 30s |
|
|
79
79
|
| Eval — Counter (miss) | `conformance-eval-counter-miss` | RFC 0244 §D, G2 — `onMiss: "fail"`; three `inc S` calls against two exact entries, then an unmatched `inc F` (`v2-eval-trajectory-trials`) | eval run `completed`; `{served: 1}`, `{served: 2}`, then two tool errors | ≤ 30s |
|
|
80
|
+
| Eval — Efficiency Ungated | `conformance-eval-efficiency-ungated` | RFC 0244 §C — two golden tasks with one output, `lean` (1 call) and `busy` (8 calls), at `passScore: 1` (`v2-eval-trajectory-trials`) | eval run `completed`; both tasks and the suite pass | ≤ 30s |
|
|
81
|
+
| Eval — Memory Isolation | `conformance-eval-memory-isolation` | RFC 0244 §B, G3 — `trials.count: 2`; one task seeds `seeded`, then reads it, reads `trial-note`, writes it and reads it back through `conformance.eval:memory` (`v2-eval-trajectory-trials`) | eval run `completed`; each trial reads the seed and finds no `trial-note` before its own write | ≤ 30s |
|
|
82
|
+
| Eval — Regression (base) | `conformance-eval-regression-base` | RFC 0251 — the baseline run: suite 1.0.0, `base-only` fails, `shared-a` and `shared-b` pass (`v2-eval-regression-baseline`) | eval run `completed`; `aggregateScore` 2/3 | ≤ 30s |
|
|
83
|
+
| Eval — Regression (candidate) | `conformance-eval-regression-candidate` | RFC 0251, RFC 0244 §F — the same `suiteId` at 1.1.0: the two shared tasks unchanged, plus `candidate-only` (passes), run against the base run (`v2-eval-regression-baseline`) | eval run `completed`; `aggregateScore` 1; `scoreDelta` 1/3; `pairedTaskCount` 2; verdict neither `improved` nor `regressed` | ≤ 30s |
|
|
80
84
|
| Dispatch Fan-Out Waves | `conformance-dispatch-fanout-waves` | RFC 0243 §A.3 — a parallel `core.dispatch` (`maxConcurrency: 2`, `wait-all`/`collect`) whose supervisor's `mockDispatchPlan` names three `conformance-delay` children. At most `min(2, maxFanOut)` run at once and none is dropped. Gated on `agents.fanOut` admitting `wait-all` with `collect`. | `completed` | ≤ 30s |
|
|
81
85
|
| Dispatch Per-Item Input | `conformance-dispatch-per-item` | RFC 0243 §A.4 — a sequential `core.dispatch` whose decision dispatches `conformance-dispatch-input-mapping-child` twice with `nextWorkerInputs` `item-a`, `item-b`. At `agents.fanOut.perItemInput: true` each child receives its item; otherwise the dispatch node fails `validation_error` and no child is dispatched. | `completed`, or `failed` without `perItemInput` | ≤ 30s |
|
|
82
86
|
| Dispatch Per-Item Length Mismatch | `conformance-dispatch-per-item-mismatch` | `orchestrator-decision.schema.json` `nextWorkerInputs` — one item for two children. Every dispatch host fails the dispatch node `validation_error` and dispatches no child. | `failed` | ≤ 30s |
|
|
@@ -1048,7 +1052,7 @@ The `fixtures/eval-suites/` sub-directory holds `AgentEvalSuite` documents (`../
|
|
|
1048
1052
|
Every task targets **the scripted agent `core.conformance.agents.scripted`**. Its contract:
|
|
1049
1053
|
|
|
1050
1054
|
- `input.script` is an ordered list of `{ tool, arguments? }`. The agent makes exactly those tool calls, in order, each emitting `agent.tool-called` with `agentId: "core.conformance.agents.scripted"`, `toolName: tool` and `inputs: arguments`.
|
|
1051
|
-
- Each call goes through the host's eval tool boundary. In a task with `fixtures.toolResponses`, the RFC 0244 §D selection and `onMiss` rules apply. Otherwise the host answers the call with its own `arguments`. No scripted call reaches a live tool or an external effect, except a miss on the counter tool under `onMiss: "live"` (below).
|
|
1055
|
+
- Each call goes through the host's eval tool boundary. In a task with `fixtures.toolResponses`, the RFC 0244 §D selection and `onMiss` rules apply. Otherwise the host answers the call with its own `arguments`. No scripted call reaches a live tool or an external effect, except a miss on the counter tool under `onMiss: "live"` and a call to the memory tool (both below).
|
|
1052
1056
|
- After the last call the agent decides, and its output is `input.output`.
|
|
1053
1057
|
|
|
1054
1058
|
| Fixture | Facet | What the suite asserts |
|
|
@@ -1061,6 +1065,10 @@ Every task targets **the scripted agent `core.conformance.agents.scripted`**. It
|
|
|
1061
1065
|
| `conformance-eval-fixture-error` | `agents.evalSuite.fixtureErrors` + `agents.evalSuite.fixtureMatching` | RFC 0245: two `agent.tool-called` and two `agent.tool-returned` for `conformance.eval:lookup`, paired by `callId`; the first return carries `error` with non-empty `code` and `message` and no `outcome` (`status: "error"` under `toolHooks.prePostEvents`), the second carries no `error` (`outcome` is optional; not `status: "error"` under tool hooks); `recovers` reports `fixtureMissCount: 0`. Without `fixtureErrors`: `400 validation_error`. That the agent saw an error and no live tool ran is not observable here (RFC 0245 G1, RFC 0244 G2) |
|
|
1062
1066
|
| `conformance-eval-counter-live` | `agents.evalSuite.fixtureMatching` | run twice, before and after `conformance-eval-counter-miss`: `fixtureMissCount` > 0; the two live `inc L` counts are consecutive; the second run's first `L` is the first run's last plus one (else `blocked`), and its `F` and `S` reads equal the first run's |
|
|
1063
1067
|
| `conformance-eval-counter-miss` | `agents.evalSuite.fixtureMatching` | the three `inc S` calls return `{served: 1}`, `{served: 2}`, then a tool error; `inc F` returns a tool error. Neither miss moves the live counter |
|
|
1068
|
+
| `conformance-eval-efficiency-ungated` | `agents.evalSuite` | RFC 0244 §C never-gated: with all nine scripted calls in the log and `lean` passing, `busy` passes with `lean`'s score and the suite passes. A host MUST NOT fail either on `efficiency`, reported or not |
|
|
1069
|
+
| `conformance-eval-memory-isolation` | `agents.evalSuite.trials` | RFC 0244 §B isolation: both reads of `seeded` return `seed`; of the four `trial-note` reads, two return `written` (each trial's read-back) and two return `null` (each trial's first read). A later trial reading `written` first saw an earlier trial's write. Fewer than two read-backs record `blocked` |
|
|
1070
|
+
| `conformance-eval-regression-base` | `agents.evalSuite.baselineSelection` + `regression` in `modes` | run first with `evalModes: [golden]`; the baseline of the candidate run |
|
|
1071
|
+
| `conformance-eval-regression-candidate` | `agents.evalSuite.baselineSelection` + `regression` in `modes` (+ `regressionVerdict` for the §F legs) | run with `evalModes: [golden, regression]` and the base run as `baselineRunId`: both carriers name it, `scoreDelta` 1/3, `pairedTaskCount` 2, verdict neither `improved` nor `regressed`. Both fixtures share one `suiteId`, so a host's suite store resolves them by fixture id |
|
|
1064
1072
|
|
|
1065
1073
|
**The counter tool `conformance.eval:counter` is conformance-RESERVED** (the pattern of `core.conformance.side-effect`). A host that lists either counter fixture in discovery `fixtures` MUST, at its eval tool boundary:
|
|
1066
1074
|
|
|
@@ -1070,6 +1078,14 @@ Every task targets **the scripted agent `core.conformance.agents.scripted`**. It
|
|
|
1070
1078
|
|
|
1071
1079
|
The counter has no external effect, so serving it is safe on a production tenant. Two concurrent cuts on one tenant make the persistence check fail; the legs then record `blocked`, not a failure.
|
|
1072
1080
|
|
|
1081
|
+
**The memory tool `conformance.eval:memory` is conformance-RESERVED.** A host that lists `conformance-eval-memory-isolation` in discovery `fixtures` MUST, at its eval tool boundary:
|
|
1082
|
+
|
|
1083
|
+
- answer every call to it from the agent's memory for the current trial: the store the task's `fixtures.memorySeed` seeds (RFC 0004 `MemoryAdapter` entries) and the agent's own memory writes land in. It is never served from `toolResponses` and never counted as a fixture miss.
|
|
1084
|
+
- answer `{op: "write", id, content}` by storing the entry and returning `{id}`, and `{op: "read", id}` by returning `{id, content}`, with `content: null` when the trial's memory holds no entry `id`;
|
|
1085
|
+
- record `outcome` on `agent.tool-returned` for every memory call.
|
|
1086
|
+
|
|
1087
|
+
The tool reaches only the trial's eval memory, so it has no external effect. A host that answers it from a store other than the one its trials really use proves nothing about §B isolation, and the contract forbids it.
|
|
1088
|
+
|
|
1073
1089
|
## OAuth provider fixtures
|
|
1074
1090
|
|
|
1075
1091
|
RFC 0199 adds `provider.issuer`, `provider.pkce` and the two issuer-less providers (`issuerlessProviders[]`) the distinct-redirect-URI leg needs; the endpoints a host actually talks to are supplied at run time by the `oauth/authorize-start` seam, which points them at the suite's authorization-server double (`src/lib/oauth-as-double.ts`).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/openwop-conformance",
|
|
3
|
-
"version": "2.46.
|
|
3
|
+
"version": "2.46.28",
|
|
4
4
|
"description": "Black-box conformance suite for OpenWOP hosts (v2 current; v1 scenarios retained for the frozen v1 tree).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -56,6 +56,6 @@
|
|
|
56
56
|
"@openwop/spec-artifacts": "file:../spec-artifacts"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@openwop/spec-artifacts": "2.46.
|
|
59
|
+
"@openwop/spec-artifacts": "2.46.28"
|
|
60
60
|
}
|
|
61
61
|
}
|