@openwop/openwop-conformance 2.46.17 → 2.46.18
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
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
## [2.46.18] — 2026-10-18 — RFC 0245: a success return need not carry outcome
|
|
2
|
+
|
|
3
|
+
- **`0245.fixture-error-replayed` no longer requires `outcome` on the success return.** `outcome` is optional on `agent.tool-returned`, and RFC 0064 §F lets a host omit it. The leg now asserts that the second return carries no `error` (and no `status: "error"` under tool hooks). This is an erratum from openwop-app's implementation (ADR 0929). No host was judged under 2.46.17.
|
|
4
|
+
|
|
1
5
|
## [2.46.17] — 2026-10-18 — RFC 0245: a recorded tool error replays as an error
|
|
2
6
|
|
|
3
7
|
- **New fixture `fixtures/eval-suites/conformance-eval-fixture-error`.** One task calls `conformance.eval:lookup` twice. Its fixtures serve an `isError: true` entry, then a success.
|
package/fixtures.md
CHANGED
|
@@ -1035,7 +1035,7 @@ Every task targets **the scripted agent `core.conformance.agents.scripted`**. It
|
|
|
1035
1035
|
| `conformance-eval-fixture-miss` | `agents.evalSuite.fixtureMatching` | `missed` reports `fixtureMissCount: 1`, `passed: false` and `score: 0` (summary and every `eval.scored`); `served` passes with no miss. That no live tool ran is not observable here (RFC 0244 G2) |
|
|
1036
1036
|
| `conformance-eval-trajectory-gate` | `agents.evalSuite.trajectory` | RFC 0246: both tasks keep `score` 1 and `aggregateScore` 1; `path-matched` carries `gatedScore` 1 and `path-wrong` `gatedScore` 0; `gatedAggregateScore` 0.5; suite `passed: false` although `aggregateScore` clears `passScore` 0.6 |
|
|
1037
1037
|
| `conformance-eval-trajectory-gate-mean` | `agents.evalSuite.trajectory` + `agents.evalSuite.trials` | RFC 0246: two `eval.scored` with `score` 1 and `passed: false`; `trials.meanScore` 1, `gatedScore` 0, task `passed: false`; the summary carries `gatedAggregateScore` |
|
|
1038
|
-
| `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 `outcome
|
|
1038
|
+
| `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) |
|
|
1039
1039
|
|
|
1040
1040
|
## OAuth provider fixtures
|
|
1041
1041
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openwop/openwop-conformance",
|
|
3
|
-
"version": "2.46.
|
|
3
|
+
"version": "2.46.18",
|
|
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.18"
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_comment": "Provenance of @openwop/spec-artifacts (RFC 0168 §D.2). files: SHA-256 per file; the conformance suite compares the installed peer against dist/spec-artifacts.lock.json at start.",
|
|
3
3
|
"package": "@openwop/spec-artifacts",
|
|
4
|
-
"version": "2.46.
|
|
5
|
-
"corpusTag": "v2.46.
|
|
4
|
+
"version": "2.46.18",
|
|
5
|
+
"corpusTag": "v2.46.18",
|
|
6
6
|
"files": {
|
|
7
7
|
"api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
|
|
8
8
|
"api/asyncapi.yaml": "d5ecb9ee6114582be3b1f662c84bfac9ae96dae7bacb853e461168f70a8e1c7d",
|
|
9
9
|
"api/grpc/openwop.proto": "c3e72bb17cba514ee98feb6434e6c9b6ea6795bfd086489ec69fd882dd1ad977",
|
|
10
10
|
"api/openapi.yaml": "ac6de5303872664b78ff419c035915593e01599e02835e777a0123de1baeb398",
|
|
11
11
|
"api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
|
|
12
|
-
"api/seams-v2.yaml": "
|
|
13
|
-
"api/v2/asyncapi.yaml": "
|
|
14
|
-
"api/v2/openapi.yaml": "
|
|
12
|
+
"api/seams-v2.yaml": "7d694b3cb21105110cff218f33bdf9c931cee03c6ae54be6e3781dbc2f5789a7",
|
|
13
|
+
"api/v2/asyncapi.yaml": "5eae29f67aee9447008184f12c04673d84b7a2bed8616c5055b675d33c8a6d29",
|
|
14
|
+
"api/v2/openapi.yaml": "49bcf512e19b7441d33819c4cb2fce26de0251296d78da3599d509217041e1c1",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "276fc1d51eb08e14e9127b9fd27761d7046ee33c12000f3a64a801322db8bf58",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
209
209
|
"spec/v1/alias-detectors.json": "22444c22bb88c568339ef512553f9fc38146e22b566d11ab8608f655d688d19c",
|
|
210
210
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
211
|
-
"spec/v1/core-standard-manifest.json": "
|
|
211
|
+
"spec/v1/core-standard-manifest.json": "df4bf8218c18e6a19c7fca67cd6fee1bee705e979c687b8071f8d7e23fb5c10f",
|
|
212
212
|
"spec/v1/deprecations.json": "e723bc11d7272c71789ad1303bb7f21809a8a024abf57594f9d5c35dc199ece9",
|
|
213
213
|
"spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
|
|
214
214
|
"spec/v1/end-of-support.json": "35f0bf3b70fe78b16e2a2fd81a153fc27e703f6c16376c6fe7cdf1f4f2c4e6d4",
|
|
@@ -314,9 +314,9 @@
|
|
|
314
314
|
"spec/v2/path-manifest.json": "7b5679a4dad98c80d855361d88a98c8a4e045af15e310862a05b285b815dc9fc",
|
|
315
315
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
316
316
|
"spec/v2/profiles.json": "b382b261c7844798575f7c1b37c934f0da19846016a2337d883d4f5ef6e05479",
|
|
317
|
-
"spec/v2/release.json": "
|
|
317
|
+
"spec/v2/release.json": "a8ae6035c74fcc0f2b13f1c02bee4862287840cc495840febc867cd66041c8ed",
|
|
318
318
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
|
|
319
|
-
"spec/v2/surface-baseline.json": "
|
|
319
|
+
"spec/v2/surface-baseline.json": "619c530713063e556abeb0f232cd905942ef8465b73936b9bf4f89ca01fe4485"
|
|
320
320
|
},
|
|
321
|
-
"corpusCommit": "
|
|
321
|
+
"corpusCommit": "e4a97e99e7fb158f4091df43da0422866140af2a"
|
|
322
322
|
}
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* an `isError: true` entry and then a success (RFC 0244 §D: first unconsumed
|
|
9
9
|
* match). So the expected log is known in advance: two `agent.tool-called`
|
|
10
10
|
* from the scripted agent, and two `agent.tool-returned` paired to them by
|
|
11
|
-
* `callId` — the first with `error` and no `outcome`, the second with
|
|
12
|
-
* `outcome
|
|
11
|
+
* `callId` — the first with `error` and no `outcome`, the second with no
|
|
12
|
+
* `error` (`outcome` is optional on a success). A served error is not a miss,
|
|
13
|
+
* so `fixtureMissCount` stays 0.
|
|
13
14
|
*
|
|
14
15
|
* That the agent saw a tool error, and that no live tool ran, are seam-gated
|
|
15
16
|
* (RFC 0245 G1, RFC 0244 G2) and not judged here.
|
|
@@ -67,8 +68,10 @@ export function judgeFixtureErrorReplayed(events: readonly Event[], summary: Rec
|
|
|
67
68
|
if (second === undefined) {
|
|
68
69
|
out.push(f(false, B, 'the second scripted call MUST have an agent.tool-returned with the same callId'));
|
|
69
70
|
} else {
|
|
70
|
-
|
|
71
|
+
// A success is "not an error", not "carries outcome": `outcome` is optional
|
|
72
|
+
// on agent.tool-returned and RFC 0064 §F lets a host omit it (2.46.18).
|
|
71
73
|
out.push(f(second['error'] === undefined, B, 'the call served by the following success entry MUST NOT carry error'));
|
|
74
|
+
if (opts.prePostEvents) out.push(f(second['status'] !== 'error', B, `under toolHooks.prePostEvents the success return MUST NOT carry status "error" (got ${JSON.stringify(second['status'])})`));
|
|
72
75
|
}
|
|
73
76
|
|
|
74
77
|
const tasks = Array.isArray(summary['tasks']) ? (summary['tasks'] as unknown[]).filter(isRec) : [];
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
* refused; `conformance-eval-fixture-error` validates (leg 2).
|
|
51
51
|
* 11. `conformance-eval-fixture-error` (fixtureErrors + fixtureMatching) —
|
|
52
52
|
* the call served by the error entry is recorded with `error` and no
|
|
53
|
-
* `outcome` (`status: "error"` under tool hooks), the next with
|
|
54
|
-
* `outcome
|
|
53
|
+
* `outcome` (`status: "error"` under tool hooks), the next with no
|
|
54
|
+
* `error` (`outcome` optional), and `fixtureMissCount` is 0. The two-call sequence needs
|
|
55
55
|
* RFC 0244 §D's first-unconsumed selection, hence `fixtureMatching`.
|
|
56
56
|
* 12. Refusal — a host advertising `agents.evalSuite` without `fixtureErrors`
|
|
57
57
|
* that lists the fixture refuses it with `400 validation_error`.
|