@openwop/openwop-conformance 2.46.7 → 2.46.9
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 +13 -0
- package/README.md +2 -2
- package/dist/spec-artifacts.lock.json +2 -2
- package/fixtures/eval-suites/conformance-eval-fixture-miss.json +82 -0
- package/fixtures/eval-suites/conformance-eval-trajectory.json +202 -0
- package/fixtures/eval-suites/conformance-eval-trials.json +57 -0
- package/fixtures.md +19 -0
- package/package.json +2 -2
- package/requirements.json +232 -16
- package/scenario-majors.json +5 -2
- package/schemas/CORPUS-STAMP.json +15 -15
- package/src/lib/eval-trajectory.ts +146 -0
- package/src/scenarios/v2-eval-trajectory-trials.test.ts +258 -0
package/requirements.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"$comment": "GENERATED by conformance/scripts/generate-requirement-registry.mjs — do not edit. One record per it()/test() in src/scenarios. Ids: openwop.it.<file-stem>.<title-slug>[~n] (src/lib/requirement-ids.ts). A record with id null has an interpolated title; its run-time row is keyed by the rendered title and maps here by file+line only. Renamed ids need a row in requirement-aliases.json.",
|
|
3
3
|
"generatedFrom": "src/scenarios/*.test.ts",
|
|
4
4
|
"counts": {
|
|
5
|
-
"files":
|
|
6
|
-
"tests":
|
|
7
|
-
"withStableId":
|
|
5
|
+
"files": 746,
|
|
6
|
+
"tests": 2808,
|
|
7
|
+
"withStableId": 2808,
|
|
8
8
|
"interpolatedTitles": 0,
|
|
9
|
-
"explicitIds":
|
|
9
|
+
"explicitIds": 2681
|
|
10
10
|
},
|
|
11
11
|
"records": [
|
|
12
12
|
{
|
|
@@ -31025,6 +31025,222 @@
|
|
|
31025
31025
|
}
|
|
31026
31026
|
]
|
|
31027
31027
|
},
|
|
31028
|
+
{
|
|
31029
|
+
"id": "openwop.it.v2-eval-trajectory-trials.the-rfc-0244-suite-summary-and-event-fields-validate-and-the-negatives-are-refus",
|
|
31030
|
+
"file": "v2-eval-trajectory-trials.test.ts",
|
|
31031
|
+
"line": 114,
|
|
31032
|
+
"title": "the RFC 0244 suite, summary and event fields validate and the negatives are refused",
|
|
31033
|
+
"explicitId": "openwop.requirement.0244.wire-shape",
|
|
31034
|
+
"citations": [
|
|
31035
|
+
{
|
|
31036
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31037
|
+
"requirement": "trajectory.match \"superset\" MUST be refused (use any-order)"
|
|
31038
|
+
},
|
|
31039
|
+
{
|
|
31040
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31041
|
+
"requirement": "trials.count 0 MUST be refused"
|
|
31042
|
+
},
|
|
31043
|
+
{
|
|
31044
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31045
|
+
"requirement": "an unknown trajectory member MUST be refused"
|
|
31046
|
+
},
|
|
31047
|
+
{
|
|
31048
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31049
|
+
"requirement": null,
|
|
31050
|
+
"interpolated": true
|
|
31051
|
+
},
|
|
31052
|
+
{
|
|
31053
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31054
|
+
"requirement": "eval.started.trialCount MUST validate"
|
|
31055
|
+
},
|
|
31056
|
+
{
|
|
31057
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31058
|
+
"requirement": "an unknown evaluatorType MUST be refused"
|
|
31059
|
+
},
|
|
31060
|
+
{
|
|
31061
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31062
|
+
"requirement": null,
|
|
31063
|
+
"interpolated": true
|
|
31064
|
+
}
|
|
31065
|
+
]
|
|
31066
|
+
},
|
|
31067
|
+
{
|
|
31068
|
+
"id": "openwop.it.v2-eval-trajectory-trials.the-rfc-0244-additions-are-content-free-eval-summary-no-content-leak",
|
|
31069
|
+
"file": "v2-eval-trajectory-trials.test.ts",
|
|
31070
|
+
"line": 137,
|
|
31071
|
+
"title": "the RFC 0244 additions are content-free (eval-summary-no-content-leak)",
|
|
31072
|
+
"explicitId": "openwop.requirement.0244.content-free",
|
|
31073
|
+
"citations": [
|
|
31074
|
+
{
|
|
31075
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31076
|
+
"requirement": "a trajectory block naming tools MUST be refused"
|
|
31077
|
+
},
|
|
31078
|
+
{
|
|
31079
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31080
|
+
"requirement": "a prose scoreLabel MUST be refused"
|
|
31081
|
+
}
|
|
31082
|
+
]
|
|
31083
|
+
},
|
|
31084
|
+
{
|
|
31085
|
+
"id": "openwop.it.v2-eval-trajectory-trials.the-eval-suite-fixtures-validate-against-the-v2-suite-schema",
|
|
31086
|
+
"file": "v2-eval-trajectory-trials.test.ts",
|
|
31087
|
+
"line": 144,
|
|
31088
|
+
"title": "the eval-suite fixtures validate against the v2 suite schema",
|
|
31089
|
+
"explicitId": "openwop.requirement.0244.fixtures-valid",
|
|
31090
|
+
"citations": [
|
|
31091
|
+
{
|
|
31092
|
+
"section": "fixtures.md §eval-suites",
|
|
31093
|
+
"requirement": null,
|
|
31094
|
+
"interpolated": true
|
|
31095
|
+
}
|
|
31096
|
+
]
|
|
31097
|
+
},
|
|
31098
|
+
{
|
|
31099
|
+
"id": "openwop.it.v2-eval-trajectory-trials.a-trajectory-suite-is-graded-per-the-reference-grader",
|
|
31100
|
+
"file": "v2-eval-trajectory-trials.test.ts",
|
|
31101
|
+
"line": 153,
|
|
31102
|
+
"title": "a trajectory suite is graded per the reference grader",
|
|
31103
|
+
"explicitId": "openwop.requirement.0244.trajectory-graded",
|
|
31104
|
+
"citations": [
|
|
31105
|
+
{
|
|
31106
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31107
|
+
"requirement": null,
|
|
31108
|
+
"interpolated": true
|
|
31109
|
+
},
|
|
31110
|
+
{
|
|
31111
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31112
|
+
"requirement": null,
|
|
31113
|
+
"interpolated": true
|
|
31114
|
+
},
|
|
31115
|
+
{
|
|
31116
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31117
|
+
"requirement": null,
|
|
31118
|
+
"interpolated": true
|
|
31119
|
+
},
|
|
31120
|
+
{
|
|
31121
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31122
|
+
"requirement": null,
|
|
31123
|
+
"interpolated": true
|
|
31124
|
+
},
|
|
31125
|
+
{
|
|
31126
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31127
|
+
"requirement": null,
|
|
31128
|
+
"interpolated": true
|
|
31129
|
+
}
|
|
31130
|
+
]
|
|
31131
|
+
},
|
|
31132
|
+
{
|
|
31133
|
+
"id": "openwop.it.v2-eval-trajectory-trials.repeated-trials-emit-one-eval-scored-per-task-per-trial",
|
|
31134
|
+
"file": "v2-eval-trajectory-trials.test.ts",
|
|
31135
|
+
"line": 189,
|
|
31136
|
+
"title": "repeated trials emit one eval.scored per task per trial",
|
|
31137
|
+
"explicitId": "openwop.requirement.0244.trials-per-task",
|
|
31138
|
+
"citations": [
|
|
31139
|
+
{
|
|
31140
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31141
|
+
"requirement": "eval.started MUST carry trialCount"
|
|
31142
|
+
},
|
|
31143
|
+
{
|
|
31144
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31145
|
+
"requirement": null,
|
|
31146
|
+
"interpolated": true
|
|
31147
|
+
}
|
|
31148
|
+
]
|
|
31149
|
+
},
|
|
31150
|
+
{
|
|
31151
|
+
"id": "openwop.it.v2-eval-trajectory-trials.the-per-task-trials-block-and-trialstats-follow-the-b-formulas",
|
|
31152
|
+
"file": "v2-eval-trajectory-trials.test.ts",
|
|
31153
|
+
"line": 200,
|
|
31154
|
+
"title": "the per-task trials block and trialStats follow the §B formulas",
|
|
31155
|
+
"explicitId": "openwop.requirement.0244.trial-stats-formula",
|
|
31156
|
+
"citations": [
|
|
31157
|
+
{
|
|
31158
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31159
|
+
"requirement": null,
|
|
31160
|
+
"interpolated": true
|
|
31161
|
+
},
|
|
31162
|
+
{
|
|
31163
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31164
|
+
"requirement": null,
|
|
31165
|
+
"interpolated": true
|
|
31166
|
+
},
|
|
31167
|
+
{
|
|
31168
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31169
|
+
"requirement": null,
|
|
31170
|
+
"interpolated": true
|
|
31171
|
+
},
|
|
31172
|
+
{
|
|
31173
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31174
|
+
"requirement": null,
|
|
31175
|
+
"interpolated": true
|
|
31176
|
+
},
|
|
31177
|
+
{
|
|
31178
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31179
|
+
"requirement": null,
|
|
31180
|
+
"interpolated": true
|
|
31181
|
+
},
|
|
31182
|
+
{
|
|
31183
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31184
|
+
"requirement": null,
|
|
31185
|
+
"interpolated": true
|
|
31186
|
+
}
|
|
31187
|
+
]
|
|
31188
|
+
},
|
|
31189
|
+
{
|
|
31190
|
+
"id": "openwop.it.v2-eval-trajectory-trials.a-fixture-miss-under-onmiss-fail-fails-the-trial-and-is-counted",
|
|
31191
|
+
"file": "v2-eval-trajectory-trials.test.ts",
|
|
31192
|
+
"line": 223,
|
|
31193
|
+
"title": "a fixture miss under onMiss \"fail\" fails the trial and is counted",
|
|
31194
|
+
"explicitId": "openwop.requirement.0244.fixture-miss-fails",
|
|
31195
|
+
"citations": [
|
|
31196
|
+
{
|
|
31197
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31198
|
+
"requirement": "the missed task MUST report fixtureMissCount 1"
|
|
31199
|
+
},
|
|
31200
|
+
{
|
|
31201
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31202
|
+
"requirement": "a miss under onMiss \"fail\" MUST fail the trial"
|
|
31203
|
+
},
|
|
31204
|
+
{
|
|
31205
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31206
|
+
"requirement": "a trial that fails closed MUST report score 0 in the summary"
|
|
31207
|
+
},
|
|
31208
|
+
{
|
|
31209
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31210
|
+
"requirement": "the missed task MUST emit eval.scored"
|
|
31211
|
+
},
|
|
31212
|
+
{
|
|
31213
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31214
|
+
"requirement": "eval.scored for a trial that fails closed MUST carry score 0"
|
|
31215
|
+
},
|
|
31216
|
+
{
|
|
31217
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31218
|
+
"requirement": "a served task MUST still pass"
|
|
31219
|
+
},
|
|
31220
|
+
{
|
|
31221
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31222
|
+
"requirement": "a served task MUST NOT report a miss"
|
|
31223
|
+
}
|
|
31224
|
+
]
|
|
31225
|
+
},
|
|
31226
|
+
{
|
|
31227
|
+
"id": "openwop.it.v2-eval-trajectory-trials.a-suite-using-an-unadvertised-rfc-0244-feature-is-refused-at-createrun",
|
|
31228
|
+
"file": "v2-eval-trajectory-trials.test.ts",
|
|
31229
|
+
"line": 243,
|
|
31230
|
+
"title": "a suite using an unadvertised RFC 0244 feature is refused at createRun",
|
|
31231
|
+
"explicitId": "openwop.requirement.0244.unadvertised-feature-refused",
|
|
31232
|
+
"citations": [
|
|
31233
|
+
{
|
|
31234
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31235
|
+
"requirement": null,
|
|
31236
|
+
"interpolated": true
|
|
31237
|
+
},
|
|
31238
|
+
{
|
|
31239
|
+
"section": "agents.schema.json §evalSuite (RFC 0244)",
|
|
31240
|
+
"requirement": "the refusal MUST carry validation_error"
|
|
31241
|
+
}
|
|
31242
|
+
]
|
|
31243
|
+
},
|
|
31028
31244
|
{
|
|
31029
31245
|
"id": "openwop.it.v2-event-type-closed.every-emitted-type-is-a-registered-protocol-type-or-a-vendor-type-under-an-adver",
|
|
31030
31246
|
"file": "v2-event-type-closed.test.ts",
|
|
@@ -45856,7 +46072,7 @@
|
|
|
45856
46072
|
{
|
|
45857
46073
|
"id": "openwop.it.spec-corpus-validity.every-fixture-id-mentioned-in-fixtures-md-has-a-corresponding-json",
|
|
45858
46074
|
"file": "spec-corpus-validity.test.ts",
|
|
45859
|
-
"line":
|
|
46075
|
+
"line": 1453,
|
|
45860
46076
|
"title": "every fixture id mentioned in fixtures.md has a corresponding JSON",
|
|
45861
46077
|
"explicitId": "openwop.it.spec-corpus-validity.every-fixture-id-mentioned-in-fixtures-md-has-a-corresponding-json",
|
|
45862
46078
|
"citations": [
|
|
@@ -45870,7 +46086,7 @@
|
|
|
45870
46086
|
{
|
|
45871
46087
|
"id": "openwop.it.spec-corpus-validity.every-fixture-json-file-is-referenced-by-fixtures-md",
|
|
45872
46088
|
"file": "spec-corpus-validity.test.ts",
|
|
45873
|
-
"line":
|
|
46089
|
+
"line": 1495,
|
|
45874
46090
|
"title": "every fixture JSON file is referenced by fixtures.md",
|
|
45875
46091
|
"explicitId": "openwop.it.spec-corpus-validity.every-fixture-json-file-is-referenced-by-fixtures-md",
|
|
45876
46092
|
"citations": [
|
|
@@ -45884,7 +46100,7 @@
|
|
|
45884
46100
|
{
|
|
45885
46101
|
"id": "openwop.it.spec-corpus-validity.a-sample-bundle-validates-against-conformance-certification-bundle-schema-json",
|
|
45886
46102
|
"file": "spec-corpus-validity.test.ts",
|
|
45887
|
-
"line":
|
|
46103
|
+
"line": 1548,
|
|
45888
46104
|
"title": "a sample bundle validates against conformance-certification-bundle.schema.json",
|
|
45889
46105
|
"explicitId": "openwop.it.spec-corpus-validity.a-sample-bundle-validates-against-conformance-certification-bundle-schema-json",
|
|
45890
46106
|
"citations": [
|
|
@@ -45898,7 +46114,7 @@
|
|
|
45898
46114
|
{
|
|
45899
46115
|
"id": "openwop.it.spec-corpus-validity.verifybundle-accepts-a-claim-that-is-discovery-derivable-and-floor-proven-b",
|
|
45900
46116
|
"file": "spec-corpus-validity.test.ts",
|
|
45901
|
-
"line":
|
|
46117
|
+
"line": 1554,
|
|
45902
46118
|
"title": "verifyBundle ACCEPTS a claim that is discovery-derivable AND floor-proven (§B)",
|
|
45903
46119
|
"explicitId": "openwop.it.spec-corpus-validity.verifybundle-accepts-a-claim-that-is-discovery-derivable-and-floor-proven-b",
|
|
45904
46120
|
"citations": [
|
|
@@ -45911,7 +46127,7 @@
|
|
|
45911
46127
|
{
|
|
45912
46128
|
"id": "openwop.it.spec-corpus-validity.verifybundle-rejects-a-profile-its-discovery-document-does-not-derive-b-1",
|
|
45913
46129
|
"file": "spec-corpus-validity.test.ts",
|
|
45914
|
-
"line":
|
|
46130
|
+
"line": 1561,
|
|
45915
46131
|
"title": "verifyBundle REJECTS a profile its discovery document does not derive (§B(1))",
|
|
45916
46132
|
"explicitId": "openwop.it.spec-corpus-validity.verifybundle-rejects-a-profile-its-discovery-document-does-not-derive-b-1",
|
|
45917
46133
|
"citations": [
|
|
@@ -45924,7 +46140,7 @@
|
|
|
45924
46140
|
{
|
|
45925
46141
|
"id": "openwop.it.spec-corpus-validity.verifybundle-rejects-a-bundle-missing-a-floor-scenario-b-2",
|
|
45926
46142
|
"file": "spec-corpus-validity.test.ts",
|
|
45927
|
-
"line":
|
|
46143
|
+
"line": 1571,
|
|
45928
46144
|
"title": "verifyBundle REJECTS a bundle missing a floor scenario (§B(2))",
|
|
45929
46145
|
"explicitId": "openwop.it.spec-corpus-validity.verifybundle-rejects-a-bundle-missing-a-floor-scenario-b-2",
|
|
45930
46146
|
"citations": [
|
|
@@ -45937,7 +46153,7 @@
|
|
|
45937
46153
|
{
|
|
45938
46154
|
"id": "openwop.it.spec-corpus-validity.the-committed-bundle-file-exists-generated-by-certify",
|
|
45939
46155
|
"file": "spec-corpus-validity.test.ts",
|
|
45940
|
-
"line":
|
|
46156
|
+
"line": 1608,
|
|
45941
46157
|
"title": "the committed bundle file exists (generated by --certify)",
|
|
45942
46158
|
"explicitId": "openwop.it.spec-corpus-validity.the-committed-bundle-file-exists-generated-by-certify",
|
|
45943
46159
|
"citations": [
|
|
@@ -45951,7 +46167,7 @@
|
|
|
45951
46167
|
{
|
|
45952
46168
|
"id": "openwop.it.spec-corpus-validity.the-committed-reference-bundle-validates-against-the-bundle-schema-a",
|
|
45953
46169
|
"file": "spec-corpus-validity.test.ts",
|
|
45954
|
-
"line":
|
|
46170
|
+
"line": 1612,
|
|
45955
46171
|
"title": "the committed reference bundle validates against the bundle schema (§A)",
|
|
45956
46172
|
"explicitId": "openwop.it.spec-corpus-validity.the-committed-reference-bundle-validates-against-the-bundle-schema-a",
|
|
45957
46173
|
"citations": [
|
|
@@ -45965,7 +46181,7 @@
|
|
|
45965
46181
|
{
|
|
45966
46182
|
"id": "openwop.it.spec-corpus-validity.verifybundle-rejects-the-committed-reference-bundle-it-is-invalidated-rfc-0148-d",
|
|
45967
46183
|
"file": "spec-corpus-validity.test.ts",
|
|
45968
|
-
"line":
|
|
46184
|
+
"line": 1619,
|
|
45969
46185
|
"title": "verifyBundle REJECTS the committed reference bundle — it is `invalidated` (RFC 0148 §D)",
|
|
45970
46186
|
"explicitId": "openwop.it.spec-corpus-validity.verifybundle-rejects-the-committed-reference-bundle-it-is-invalidated-rfc-0148-d",
|
|
45971
46187
|
"citations": [
|
|
@@ -45986,7 +46202,7 @@
|
|
|
45986
46202
|
{
|
|
45987
46203
|
"id": "openwop.it.spec-corpus-validity.discovery-sha256-is-the-canonical-json-sha-256-of-the-captured-discovery-documen",
|
|
45988
46204
|
"file": "spec-corpus-validity.test.ts",
|
|
45989
|
-
"line":
|
|
46205
|
+
"line": 1645,
|
|
45990
46206
|
"title": "discovery.sha256 is the canonical-JSON SHA-256 of the captured discovery.document",
|
|
45991
46207
|
"explicitId": "openwop.it.spec-corpus-validity.discovery-sha256-is-the-canonical-json-sha-256-of-the-captured-discovery-documen",
|
|
45992
46208
|
"citations": [
|
|
@@ -45999,7 +46215,7 @@
|
|
|
45999
46215
|
{
|
|
46000
46216
|
"id": "openwop.it.spec-corpus-validity.the-requestbody-closes-at-the-composition-unevaluatedproperties-not-inside-a-bra",
|
|
46001
46217
|
"file": "spec-corpus-validity.test.ts",
|
|
46002
|
-
"line":
|
|
46218
|
+
"line": 1706,
|
|
46003
46219
|
"title": "the requestBody closes at the composition (unevaluatedProperties), not inside a branch",
|
|
46004
46220
|
"explicitId": "openwop.it.spec-corpus-validity.the-requestbody-closes-at-the-composition-unevaluatedproperties-not-inside-a-bra",
|
|
46005
46221
|
"citations": [
|
|
@@ -46012,7 +46228,7 @@
|
|
|
46012
46228
|
{
|
|
46013
46229
|
"id": "openwop.it.spec-corpus-validity.canonical-createrun-bodies-pass-the-composed-schema-an-undeclared-property-fails",
|
|
46014
46230
|
"file": "spec-corpus-validity.test.ts",
|
|
46015
|
-
"line":
|
|
46231
|
+
"line": 1721,
|
|
46016
46232
|
"title": "canonical createRun bodies PASS the composed schema; an undeclared property FAILS",
|
|
46017
46233
|
"explicitId": "openwop.it.spec-corpus-validity.canonical-createrun-bodies-pass-the-composed-schema-an-undeclared-property-fails",
|
|
46018
46234
|
"citations": [
|
package/scenario-majors.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "GENERATED by conformance/scripts/generate-scenario-majors.mjs (RFC 0168 §D.3). Do not edit; add a file to BOTH_MAJORS in the generator to target both majors.",
|
|
3
3
|
"counts": {
|
|
4
|
-
"files":
|
|
4
|
+
"files": 658,
|
|
5
5
|
"v1": 455,
|
|
6
|
-
"v2":
|
|
6
|
+
"v2": 218
|
|
7
7
|
},
|
|
8
8
|
"majors": {
|
|
9
9
|
"a2a-1-0-agent-card.test.ts": [
|
|
@@ -1479,6 +1479,9 @@
|
|
|
1479
1479
|
"v2-eval-mode-unadvertised-refused.test.ts": [
|
|
1480
1480
|
2
|
|
1481
1481
|
],
|
|
1482
|
+
"v2-eval-trajectory-trials.test.ts": [
|
|
1483
|
+
2
|
|
1484
|
+
],
|
|
1482
1485
|
"v2-event-type-closed.test.ts": [
|
|
1483
1486
|
2
|
|
1484
1487
|
],
|
|
@@ -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.9",
|
|
5
|
+
"corpusTag": "v2.46.9",
|
|
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": "24976e53171c747270890e0f2591ccc2630477824c56edc003d00135bb89daea",
|
|
13
|
+
"api/v2/asyncapi.yaml": "0da749b02294f7e8c9ded99858bb15296b250b0f1a58d28e5a3f9f289e477d34",
|
|
14
|
+
"api/v2/openapi.yaml": "b05a3b2e80b7348f0f02647dbd117dcda1604010b59da62a9871139f79726311",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "276fc1d51eb08e14e9127b9fd27761d7046ee33c12000f3a64a801322db8bf58",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"schemas/v2/a2ui-surface-delta-frame.schema.json": "6889c5da3fe7e76cb614038c0eea6774776fa640448558b258eb87fb50cb9b64",
|
|
104
104
|
"schemas/v2/agent-deployment-transition.schema.json": "93a334ff042d51378c89fdd7134664271bf9592419bb5e3e00821ed06bc1904e",
|
|
105
105
|
"schemas/v2/agent-deployment.schema.json": "d59b43fb62b522005ee22bc3bc53775a6777493e5e42d71812abc347625fa7fe",
|
|
106
|
-
"schemas/v2/agent-eval-suite.schema.json": "
|
|
106
|
+
"schemas/v2/agent-eval-suite.schema.json": "e80439bc6873a5d9a14122f81d16f7650104018d814bd316aafd3fc8b8225604",
|
|
107
107
|
"schemas/v2/agent-inventory-response.schema.json": "5f74c3da946dfc3114624567a989717748081ab947b4d2af3f49034d67f4306b",
|
|
108
108
|
"schemas/v2/agent-manifest.schema.json": "004ff150e955deebb9e64273de5093f5144b9b3895b09953e65aa74b61140778",
|
|
109
109
|
"schemas/v2/agent-org-chart.schema.json": "113b079e1dce95908467cbef7f83e076fdb82aab5b0678fc1a43e32bfc9cbadf",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"schemas/v2/artifact.schema.json": "85b9dc284d39b99d2a66fa8cbf47f2dd3d8526d3bd6cc411ad315b372de38975",
|
|
118
118
|
"schemas/v2/audit-verify-result.schema.json": "14af8e9283510f0a40e48a2059c929ee44e0fc9fa3cc66a95bfbe90b17c48297",
|
|
119
119
|
"schemas/v2/budget-policy.schema.json": "1de68095db0beb5c7a4be629de26e79f62ebbe748a88d46f36e768edfd1f0d68",
|
|
120
|
-
"schemas/v2/capabilities.schema.json": "
|
|
120
|
+
"schemas/v2/capabilities.schema.json": "a717d34d98201cefe1769421c468d22e124d1a46881f60683cb6e103843dbc9a",
|
|
121
121
|
"schemas/v2/certification-bundle.schema.json": "5cfa7fb5247160333e33a58b60d42bcd4e5269d8391d6a112d301e14828892ed",
|
|
122
122
|
"schemas/v2/channel-presence-payload.schema.json": "fc03df0c20cc12a25f7ee6a47503a4c5931d79fe3d5ff24815e8fd7c1bcb9a87",
|
|
123
123
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"schemas/v2/envelopes/schema.response.schema.json": "d049a081267c06c28879c331b147f3ed821b14ccfd93005c67aff64db0a8c68e",
|
|
146
146
|
"schemas/v2/envelopes/ui.a2ui-surface.schema.json": "e92a2548ba65454c9e0a34f72ea6768d18f59e61fa5da7668d0b2d5baddaddc8",
|
|
147
147
|
"schemas/v2/error-envelope.schema.json": "8ddb1d80330dfef17572a74dfe3a53e1a06411e4b0af6a6f1dd6e7e7461da987",
|
|
148
|
-
"schemas/v2/eval-summary.schema.json": "
|
|
148
|
+
"schemas/v2/eval-summary.schema.json": "e670fad6c4c487f80edf3832ccd427b534b2066fbbc1cc2c158e205d6e7e3f6b",
|
|
149
149
|
"schemas/v2/export-bundle.schema.json": "bd28905a7729437ab7f2ad8bb33e13a371b2bf5605a7eb2962a0d246de312d69",
|
|
150
150
|
"schemas/v2/form-content-pack-manifest.schema.json": "a1942a124e250a6e9fbdb6b811c5a125e78fbcbcaa46dfc71d0636f24710a339",
|
|
151
151
|
"schemas/v2/frontend-plugin-manifest.schema.json": "b279da288d542906a72b8cb4e872e001de632eaff539e0259b9cce287f82bf8f",
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
"schemas/v2/residency.schema.json": "3fd23c9732beb140504e81560fc426eb6764d547e56da5fb92c5a5c7bf04db3a",
|
|
175
175
|
"schemas/v2/run-ancestry-response.schema.json": "334c17f2062dea62726ca1d07b8be3f169cdc422af843c1def5fb317039814c9",
|
|
176
176
|
"schemas/v2/run-diff-response.schema.json": "8bdb2045c274580038bd74781f7d062f5049839797c164a89de4ed89edc53a74",
|
|
177
|
-
"schemas/v2/run-event-payloads.schema.json": "
|
|
177
|
+
"schemas/v2/run-event-payloads.schema.json": "e21d0cb64cb969be32e49e87f3af418bacb40e8fcb515a848dfe7d9609d8d0b6",
|
|
178
178
|
"schemas/v2/run-event.schema.json": "2f0d7416bd376c56affe97b6b2b49981532e8e9ff45c0a162cf806c78b3e7fb7",
|
|
179
179
|
"schemas/v2/run-list-response.schema.json": "c2dbc34768dcf64528914a213aa3cb55952e8e3e90a64b04a9423b2a19749d38",
|
|
180
180
|
"schemas/v2/run-options.schema.json": "f0e9f494d80086c2ed2cf9fe87df54e5b4e66601699c4a1089f4edbc7ba58867",
|
|
@@ -208,14 +208,14 @@
|
|
|
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": "baa24251d00109b8fa47b5dfd8c6cecab312b75240ff5519e71f704eb7fd03f0",
|
|
212
212
|
"spec/v1/deprecations.json": "e723bc11d7272c71789ad1303bb7f21809a8a024abf57594f9d5c35dc199ece9",
|
|
213
213
|
"spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
|
|
214
214
|
"spec/v1/end-of-support.json": "35f0bf3b70fe78b16e2a2fd81a153fc27e703f6c16376c6fe7cdf1f4f2c4e6d4",
|
|
215
215
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
216
216
|
"spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
|
|
217
217
|
"spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
|
|
218
|
-
"spec/v1/gaps.json": "
|
|
218
|
+
"spec/v1/gaps.json": "a3ab3af1f48fe9f36283d296b06970a4dd759d4e3beb731828831f09e8e8f53b",
|
|
219
219
|
"spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
|
|
220
220
|
"spec/v1/migrations.json": "4c50760be70cb644d02427bcaf5749606700edf4513f423903cf3b1d12f5c300",
|
|
221
221
|
"spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
|
|
@@ -281,7 +281,7 @@
|
|
|
281
281
|
"spec/v2/ext/sandbox-runtime-notes/README.md": "0d1290fb1e20b2e35c0b15051541ab6546e4e2a6f693b4f912cb3f7d6a65e92c",
|
|
282
282
|
"spec/v2/ext/webResearch/README.md": "b675e6f6646128d781b661f754c2393eed86e5935d16c3a22df582a5ce025b9b",
|
|
283
283
|
"spec/v2/facets/a2a.schema.json": "b68bf5e29e455e46c2ad7cfcccf5963730ec2310ff9db81884550d8df30fd6ef",
|
|
284
|
-
"spec/v2/facets/agents.schema.json": "
|
|
284
|
+
"spec/v2/facets/agents.schema.json": "62a979d23219ca684bc16f91f81a4c92c2cb56e0f084d2e4f694c03e0c7125df",
|
|
285
285
|
"spec/v2/facets/aiProviders.schema.json": "4eb911c2403b8f618325194855a1326680fbda2549dfbfe86a70dd2743f8fb12",
|
|
286
286
|
"spec/v2/facets/auditLogIntegrity.schema.json": "9a7f81320c8f940c6f4129bc7dd895a4063231c5458a717a08c2cbf9bb886c46",
|
|
287
287
|
"spec/v2/facets/auth.schema.json": "7d98bc81a0f7d307460d039eebfebd21388091bfe1d538762583940f94c0bd2a",
|
|
@@ -313,9 +313,9 @@
|
|
|
313
313
|
"spec/v2/path-manifest.json": "7b5679a4dad98c80d855361d88a98c8a4e045af15e310862a05b285b815dc9fc",
|
|
314
314
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
315
315
|
"spec/v2/profiles.json": "b382b261c7844798575f7c1b37c934f0da19846016a2337d883d4f5ef6e05479",
|
|
316
|
-
"spec/v2/release.json": "
|
|
316
|
+
"spec/v2/release.json": "3d39622c2a2f6e53ad2bc4fc45439006a0877a3b4b4000de5ea4c5fc90863b64",
|
|
317
317
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
|
|
318
|
-
"spec/v2/surface-baseline.json": "
|
|
318
|
+
"spec/v2/surface-baseline.json": "8782769b454e3f781b889d06fe11978bc6da5eb1993935c205bf05c1b09e5d67"
|
|
319
319
|
},
|
|
320
|
-
"corpusCommit": "
|
|
320
|
+
"corpusCommit": "30aa92326225c92edeea084e2c3c484ca18e10e8"
|
|
321
321
|
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 0244 — the suite's reference grader for eval trajectories and trials.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions, no I/O. `v2-eval-trajectory-trials.test.ts` uses them to
|
|
5
|
+
* recompute what a host must report, so a host's grade is checked against the
|
|
6
|
+
* normative definition rather than against itself:
|
|
7
|
+
*
|
|
8
|
+
* gradeTrajectory §A — the four match modes, `forbidden`, `argsMatch`,
|
|
9
|
+
* and the mode-independent `matchedCount` (a maximum
|
|
10
|
+
* one-to-one matching, ignoring order).
|
|
11
|
+
* passAtK / passHatK / scoreStderr §B — the normative formulas.
|
|
12
|
+
*
|
|
13
|
+
* @see RFCS/0244-eval-trajectories-trials-and-recorded-fixtures.md
|
|
14
|
+
* @see schemas/v2/agent-eval-suite.schema.json, schemas/v2/eval-summary.schema.json
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export type ArgsMatch = 'ignore' | 'exact' | 'subset';
|
|
18
|
+
export type MatchMode = 'exact' | 'in-order' | 'any-order' | 'subset';
|
|
19
|
+
export interface ExpectedCall { readonly tool: string; readonly args?: unknown; readonly argsMatch?: ArgsMatch }
|
|
20
|
+
export interface ObservedCall { readonly tool: string; readonly inputs?: unknown }
|
|
21
|
+
export interface TrajectorySpec { readonly match: MatchMode; readonly calls: readonly ExpectedCall[]; readonly forbidden?: readonly string[] }
|
|
22
|
+
export interface TrajectoryGrade {
|
|
23
|
+
readonly mode: MatchMode;
|
|
24
|
+
readonly matched: boolean;
|
|
25
|
+
readonly expectedCount: number;
|
|
26
|
+
readonly observedCount: number;
|
|
27
|
+
readonly matchedCount: number;
|
|
28
|
+
readonly forbiddenCount: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const isRecord = (v: unknown): v is Record<string, unknown> => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
32
|
+
|
|
33
|
+
/** JSON deep equality, key-order insensitive. */
|
|
34
|
+
export function jsonEqual(a: unknown, b: unknown): boolean {
|
|
35
|
+
if (a === b) return true;
|
|
36
|
+
if (Array.isArray(a) && Array.isArray(b)) return a.length === b.length && a.every((x, i) => jsonEqual(x, b[i]));
|
|
37
|
+
if (isRecord(a) && isRecord(b)) {
|
|
38
|
+
const ka = Object.keys(a);
|
|
39
|
+
return ka.length === Object.keys(b).length && ka.every((k) => k in b && jsonEqual(a[k], b[k]));
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** `subset`: every key path in `expected` is present in `actual` with a JSON-deep-equal value. */
|
|
45
|
+
export function jsonSubset(expected: unknown, actual: unknown): boolean {
|
|
46
|
+
if (isRecord(expected)) return isRecord(actual) && Object.keys(expected).every((k) => k in actual && jsonSubset(expected[k], actual[k]));
|
|
47
|
+
return jsonEqual(expected, actual);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function callMatches(e: ExpectedCall, o: ObservedCall): boolean {
|
|
51
|
+
if (e.tool !== o.tool) return false;
|
|
52
|
+
const mode = e.argsMatch ?? 'ignore';
|
|
53
|
+
if (mode === 'ignore' || e.args === undefined) return true;
|
|
54
|
+
return mode === 'exact' ? jsonEqual(e.args, o.inputs) : jsonSubset(e.args, o.inputs);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Size of a maximum one-to-one matching (Kuhn's augmenting paths). */
|
|
58
|
+
function maxMatching(expected: readonly ExpectedCall[], observed: readonly ObservedCall[]): number {
|
|
59
|
+
const owner: (number | undefined)[] = new Array(observed.length).fill(undefined);
|
|
60
|
+
const augment = (i: number, seen: boolean[]): boolean => {
|
|
61
|
+
for (let j = 0; j < observed.length; j++) {
|
|
62
|
+
if (seen[j] || !callMatches(expected[i]!, observed[j]!)) continue;
|
|
63
|
+
seen[j] = true;
|
|
64
|
+
if (owner[j] === undefined || augment(owner[j]!, seen)) { owner[j] = i; return true; }
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
};
|
|
68
|
+
let n = 0;
|
|
69
|
+
for (let i = 0; i < expected.length; i++) if (augment(i, new Array(observed.length).fill(false))) n++;
|
|
70
|
+
return n;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function inOrder(expected: readonly ExpectedCall[], observed: readonly ObservedCall[]): boolean {
|
|
74
|
+
let j = 0;
|
|
75
|
+
for (const e of expected) {
|
|
76
|
+
while (j < observed.length && !callMatches(e, observed[j]!)) j++;
|
|
77
|
+
if (j === observed.length) return false;
|
|
78
|
+
j++;
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function gradeTrajectory(spec: TrajectorySpec, observed: readonly ObservedCall[]): TrajectoryGrade {
|
|
84
|
+
const forbidden = new Set(spec.forbidden ?? []);
|
|
85
|
+
const forbiddenCount = observed.filter((o) => forbidden.has(o.tool)).length;
|
|
86
|
+
const matchedCount = maxMatching(spec.calls, observed);
|
|
87
|
+
let modeOk: boolean;
|
|
88
|
+
switch (spec.match) {
|
|
89
|
+
case 'exact': modeOk = observed.length === spec.calls.length && spec.calls.every((e, i) => callMatches(e, observed[i]!)); break;
|
|
90
|
+
case 'in-order': modeOk = inOrder(spec.calls, observed); break;
|
|
91
|
+
case 'any-order': modeOk = matchedCount === spec.calls.length; break;
|
|
92
|
+
case 'subset': modeOk = observed.every((o) => spec.calls.some((e) => callMatches(e, o))); break;
|
|
93
|
+
}
|
|
94
|
+
return { mode: spec.match, matched: modeOk && forbiddenCount === 0, expectedCount: spec.calls.length, observedCount: observed.length, matchedCount, forbiddenCount };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* C(a, k) / C(b, k) as an exact rational, converted to a double once. The
|
|
99
|
+
* ratio telescopes to Π (a−i)/(b−i) for i < k, so no factorial is formed and
|
|
100
|
+
* the result is stable for large n (pass^k(200, 100, 50) ≈ 2.2e-19).
|
|
101
|
+
*/
|
|
102
|
+
function binomRatio(a: number, b: number, k: number): number {
|
|
103
|
+
if (k < 0 || k > b) throw new RangeError(`k=${k} outside 0..${b}`);
|
|
104
|
+
if (k > a) return 0;
|
|
105
|
+
let num = 1n;
|
|
106
|
+
let den = 1n;
|
|
107
|
+
for (let i = 0; i < k; i++) { num *= BigInt(a - i); den *= BigInt(b - i); }
|
|
108
|
+
return ratioToNumber(num, den);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** num/den (num ≤ den, both > 0) to the nearest double, without overflowing either. */
|
|
112
|
+
function ratioToNumber(num: bigint, den: bigint): number {
|
|
113
|
+
if (num === 0n) return 0;
|
|
114
|
+
const shift = den.toString(2).length - num.toString(2).length + 64;
|
|
115
|
+
const q = (num << BigInt(shift)) / den;
|
|
116
|
+
let r = Number(q);
|
|
117
|
+
let e = shift;
|
|
118
|
+
while (e > 1000) { r *= 2 ** -1000; e -= 1000; }
|
|
119
|
+
return r * 2 ** -e;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** pass@k = 1 − C(n−c, k) / C(n, k); 0 when c = 0. */
|
|
123
|
+
export function passAtK(n: number, c: number, k: number): number {
|
|
124
|
+
if (c === 0) return 0;
|
|
125
|
+
return 1 - binomRatio(n - c, n, k);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** pass^k = C(c, k) / C(n, k); 0 when c < k. */
|
|
129
|
+
export function passHatK(n: number, c: number, k: number): number {
|
|
130
|
+
if (c < k) return 0;
|
|
131
|
+
return binomRatio(c, n, k);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** RFC 0244 §B tolerance: a host value agrees with the formula when |host − ref| ≤ 1e-9 · max(1, |ref|). */
|
|
135
|
+
export function withinTolerance(host: number, ref: number): boolean {
|
|
136
|
+
return Number.isFinite(host) && Math.abs(host - ref) <= 1e-9 * Math.max(1, Math.abs(ref));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** Sample sd of the per-task mean scores over √T; undefined when T < 2. */
|
|
140
|
+
export function scoreStderr(taskMeans: readonly number[]): number | undefined {
|
|
141
|
+
const t = taskMeans.length;
|
|
142
|
+
if (t < 2) return undefined;
|
|
143
|
+
const mean = taskMeans.reduce((a, b) => a + b, 0) / t;
|
|
144
|
+
const variance = taskMeans.reduce((a, b) => a + (b - mean) ** 2, 0) / (t - 1);
|
|
145
|
+
return Math.sqrt(variance) / Math.sqrt(t);
|
|
146
|
+
}
|