@openwop/openwop-conformance 2.45.14 → 2.45.16
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 +45 -0
- package/README.md +2 -2
- package/dist/spec-artifacts.lock.json +2 -2
- package/package.json +2 -2
- package/requirements.json +2668 -4
- package/scenario-majors.json +164 -2
- package/schemas/CORPUS-STAMP.json +13 -13
- package/src/lib/artifact-schema-url-witness.ts +83 -0
- package/src/lib/backpressure-witness.ts +2 -2
- package/src/lib/budget-witness.ts +3 -3
- package/src/lib/dispatch-witness.ts +212 -0
- package/src/lib/envelope-schema-static.ts +166 -0
- package/src/lib/exhaustion-facet-witness.ts +1 -1
- package/src/lib/family-advert-witness.ts +411 -0
- package/src/lib/fixture-run-observer.ts +97 -0
- package/src/lib/i18n-double.ts +99 -0
- package/src/lib/i18n-negotiation-witness.ts +173 -0
- package/src/lib/localized-content-witness.ts +49 -0
- package/src/lib/model-capability-insufficient-witness.ts +121 -0
- package/src/lib/prompt-double.ts +217 -0
- package/src/lib/prompt-events-witness.ts +211 -0
- package/src/lib/prompt-library-witness.ts +406 -0
- package/src/lib/provider-usage-witness.ts +63 -0
- package/src/lib/run-bounds-witness.ts +111 -0
- package/src/lib/run-graph-double.ts +144 -0
- package/src/lib/scratch-host.ts +4 -1
- package/src/lib/subworkflow-witness.ts +192 -0
- package/src/lib/table-schema-witness.ts +3 -1
- package/src/scenarios/v2-agent-runtime-advertisement.test.ts +51 -0
- package/src/scenarios/v2-ai-envelope-advertisement.test.ts +43 -0
- package/src/scenarios/v2-ai-envelope-shape-static.test.ts +93 -0
- package/src/scenarios/v2-ai-providers-advertisement.test.ts +94 -0
- package/src/scenarios/v2-artifact-created-static.test.ts +92 -0
- package/src/scenarios/v2-artifact-type-schema-url.test.ts +44 -0
- package/src/scenarios/v2-artifact-types-advertisement.test.ts +64 -0
- package/src/scenarios/v2-authorization-advertisement.test.ts +66 -0
- package/src/scenarios/v2-channel-presence-advertisement.test.ts +41 -0
- package/src/scenarios/v2-conversation-turn-model-provenance-advertisement.test.ts +41 -0
- package/src/scenarios/v2-conversation-turn-model-provenance.test.ts +110 -0
- package/src/scenarios/v2-credentials-advertisement.test.ts +66 -0
- package/src/scenarios/v2-data-residency-admission.test.ts +98 -0
- package/src/scenarios/v2-data-residency-advertisement.test.ts +52 -0
- package/src/scenarios/v2-dead-letter-advertisement.test.ts +54 -0
- package/src/scenarios/v2-dispatch-input-mapping.test.ts +70 -0
- package/src/scenarios/v2-dispatch-loop.test.ts +80 -0
- package/src/scenarios/v2-envelope-contracts-advertisement.test.ts +40 -0
- package/src/scenarios/v2-envelope-reasoning-shape.test.ts +81 -0
- package/src/scenarios/v2-envelope-tier-one-subset-static.test.ts +77 -0
- package/src/scenarios/v2-envelope-variant-discriminator-static.test.ts +57 -0
- package/src/scenarios/v2-envelopes-advertisement.test.ts +85 -0
- package/src/scenarios/v2-export-bundle-static.test.ts +108 -0
- package/src/scenarios/v2-i18n-negotiation.test.ts +91 -0
- package/src/scenarios/v2-limits-envelope-caps-advertisement.test.ts +61 -0
- package/src/scenarios/v2-localized-content-delivery.test.ts +136 -0
- package/src/scenarios/v2-media-inline-cap-static.test.ts +59 -0
- package/src/scenarios/v2-model-capabilities-advertisement.test.ts +61 -0
- package/src/scenarios/v2-model-capability-insufficient.test.ts +63 -0
- package/src/scenarios/v2-multi-party-conversation-advertisement.test.ts +52 -0
- package/src/scenarios/v2-node-pack-runtimes-advertisement.test.ts +52 -0
- package/src/scenarios/v2-nondeterminism-policy-advertisement.test.ts +41 -0
- package/src/scenarios/v2-portability-advertisement.test.ts +63 -0
- package/src/scenarios/v2-prompt-all-four-kinds-events.test.ts +69 -0
- package/src/scenarios/v2-prompt-end-to-end-events.test.ts +71 -0
- package/src/scenarios/v2-prompt-library-advertisement.test.ts +40 -0
- package/src/scenarios/v2-prompt-list-and-fetch.test.ts +103 -0
- package/src/scenarios/v2-prompt-mutable-lifecycle.test.ts +130 -0
- package/src/scenarios/v2-prompt-pack-install.test.ts +78 -0
- package/src/scenarios/v2-prompt-render-deterministic.test.ts +87 -0
- package/src/scenarios/v2-prompt-resolution-chain-event.test.ts +46 -0
- package/src/scenarios/v2-prompt-template-shape.test.ts +112 -0
- package/src/scenarios/v2-provider-usage-advertisement.test.ts +61 -0
- package/src/scenarios/v2-provider-usage-emission.test.ts +50 -0
- package/src/scenarios/v2-provider-usage-payload-static.test.ts +92 -0
- package/src/scenarios/v2-purpose-propagation-advertisement.test.ts +52 -0
- package/src/scenarios/v2-run-execution-bounds.test.ts +67 -0
- package/src/scenarios/v2-scheduling-advertisement.test.ts +55 -0
- package/src/scenarios/v2-self-hosted-runner-advertisement.test.ts +52 -0
- package/src/scenarios/v2-self-hosted-runner-frames-static.test.ts +121 -0
- package/src/scenarios/v2-sub-workflow-advertisement.test.ts +53 -0
- package/src/scenarios/v2-subworkflow-input-mapping.test.ts +74 -0
- package/src/scenarios/v2-subworkflow-linkage.test.ts +76 -0
- package/src/scenarios/v2-ui-plugins-advertisement.test.ts +85 -0
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": 648,
|
|
5
5
|
"v1": 455,
|
|
6
|
-
"v2":
|
|
6
|
+
"v2": 208
|
|
7
7
|
},
|
|
8
8
|
"majors": {
|
|
9
9
|
"a2a-1-0-agent-card.test.ts": [
|
|
@@ -1299,6 +1299,18 @@
|
|
|
1299
1299
|
"v2-agent-org-chart-served-shape.test.ts": [
|
|
1300
1300
|
2
|
|
1301
1301
|
],
|
|
1302
|
+
"v2-agent-runtime-advertisement.test.ts": [
|
|
1303
|
+
2
|
|
1304
|
+
],
|
|
1305
|
+
"v2-ai-envelope-advertisement.test.ts": [
|
|
1306
|
+
2
|
|
1307
|
+
],
|
|
1308
|
+
"v2-ai-envelope-shape-static.test.ts": [
|
|
1309
|
+
2
|
|
1310
|
+
],
|
|
1311
|
+
"v2-ai-providers-advertisement.test.ts": [
|
|
1312
|
+
2
|
|
1313
|
+
],
|
|
1302
1314
|
"v2-approval-reject-disposition.test.ts": [
|
|
1303
1315
|
2
|
|
1304
1316
|
],
|
|
@@ -1308,12 +1320,24 @@
|
|
|
1308
1320
|
"v2-artifact-a2a-shape.test.ts": [
|
|
1309
1321
|
2
|
|
1310
1322
|
],
|
|
1323
|
+
"v2-artifact-created-static.test.ts": [
|
|
1324
|
+
2
|
|
1325
|
+
],
|
|
1326
|
+
"v2-artifact-type-schema-url.test.ts": [
|
|
1327
|
+
2
|
|
1328
|
+
],
|
|
1329
|
+
"v2-artifact-types-advertisement.test.ts": [
|
|
1330
|
+
2
|
|
1331
|
+
],
|
|
1311
1332
|
"v2-assurance-downgrade-audited.test.ts": [
|
|
1312
1333
|
2
|
|
1313
1334
|
],
|
|
1314
1335
|
"v2-auth-challenge.test.ts": [
|
|
1315
1336
|
2
|
|
1316
1337
|
],
|
|
1338
|
+
"v2-authorization-advertisement.test.ts": [
|
|
1339
|
+
2
|
|
1340
|
+
],
|
|
1317
1341
|
"v2-bound-id-kinds.test.ts": [
|
|
1318
1342
|
2
|
|
1319
1343
|
],
|
|
@@ -1344,6 +1368,9 @@
|
|
|
1344
1368
|
"v2-chain-pin-exact.test.ts": [
|
|
1345
1369
|
2
|
|
1346
1370
|
],
|
|
1371
|
+
"v2-channel-presence-advertisement.test.ts": [
|
|
1372
|
+
2
|
|
1373
|
+
],
|
|
1347
1374
|
"v2-client-version-header.test.ts": [
|
|
1348
1375
|
2
|
|
1349
1376
|
],
|
|
@@ -1359,6 +1386,12 @@
|
|
|
1359
1386
|
"v2-content-locale-keys.test.ts": [
|
|
1360
1387
|
2
|
|
1361
1388
|
],
|
|
1389
|
+
"v2-conversation-turn-model-provenance-advertisement.test.ts": [
|
|
1390
|
+
2
|
|
1391
|
+
],
|
|
1392
|
+
"v2-conversation-turn-model-provenance.test.ts": [
|
|
1393
|
+
2
|
|
1394
|
+
],
|
|
1362
1395
|
"v2-conversation-turn-parts.test.ts": [
|
|
1363
1396
|
2
|
|
1364
1397
|
],
|
|
@@ -1371,6 +1404,24 @@
|
|
|
1371
1404
|
"v2-credential-interrupt.test.ts": [
|
|
1372
1405
|
2
|
|
1373
1406
|
],
|
|
1407
|
+
"v2-credentials-advertisement.test.ts": [
|
|
1408
|
+
2
|
|
1409
|
+
],
|
|
1410
|
+
"v2-data-residency-admission.test.ts": [
|
|
1411
|
+
2
|
|
1412
|
+
],
|
|
1413
|
+
"v2-data-residency-advertisement.test.ts": [
|
|
1414
|
+
2
|
|
1415
|
+
],
|
|
1416
|
+
"v2-dead-letter-advertisement.test.ts": [
|
|
1417
|
+
2
|
|
1418
|
+
],
|
|
1419
|
+
"v2-dispatch-input-mapping.test.ts": [
|
|
1420
|
+
2
|
|
1421
|
+
],
|
|
1422
|
+
"v2-dispatch-loop.test.ts": [
|
|
1423
|
+
2
|
|
1424
|
+
],
|
|
1374
1425
|
"v2-dual-stack-negotiation.test.ts": [
|
|
1375
1426
|
2
|
|
1376
1427
|
],
|
|
@@ -1389,6 +1440,21 @@
|
|
|
1389
1440
|
"v2-enum-growth-rule.test.ts": [
|
|
1390
1441
|
2
|
|
1391
1442
|
],
|
|
1443
|
+
"v2-envelope-contracts-advertisement.test.ts": [
|
|
1444
|
+
2
|
|
1445
|
+
],
|
|
1446
|
+
"v2-envelope-reasoning-shape.test.ts": [
|
|
1447
|
+
2
|
|
1448
|
+
],
|
|
1449
|
+
"v2-envelope-tier-one-subset-static.test.ts": [
|
|
1450
|
+
2
|
|
1451
|
+
],
|
|
1452
|
+
"v2-envelope-variant-discriminator-static.test.ts": [
|
|
1453
|
+
2
|
|
1454
|
+
],
|
|
1455
|
+
"v2-envelopes-advertisement.test.ts": [
|
|
1456
|
+
2
|
|
1457
|
+
],
|
|
1392
1458
|
"v2-era-2-append-vocabulary.test.ts": [
|
|
1393
1459
|
2
|
|
1394
1460
|
],
|
|
@@ -1407,6 +1473,9 @@
|
|
|
1407
1473
|
"v2-event-type-closed.test.ts": [
|
|
1408
1474
|
2
|
|
1409
1475
|
],
|
|
1476
|
+
"v2-export-bundle-static.test.ts": [
|
|
1477
|
+
2
|
|
1478
|
+
],
|
|
1410
1479
|
"v2-ext-family-claims.test.ts": [
|
|
1411
1480
|
2
|
|
1412
1481
|
],
|
|
@@ -1425,6 +1494,9 @@
|
|
|
1425
1494
|
"v2-header-scheme.test.ts": [
|
|
1426
1495
|
2
|
|
1427
1496
|
],
|
|
1497
|
+
"v2-i18n-negotiation.test.ts": [
|
|
1498
|
+
2
|
|
1499
|
+
],
|
|
1428
1500
|
"v2-id-grammar.test.ts": [
|
|
1429
1501
|
2
|
|
1430
1502
|
],
|
|
@@ -1455,6 +1527,12 @@
|
|
|
1455
1527
|
"v2-legacy-profiles-absent.test.ts": [
|
|
1456
1528
|
2
|
|
1457
1529
|
],
|
|
1530
|
+
"v2-limits-envelope-caps-advertisement.test.ts": [
|
|
1531
|
+
2
|
|
1532
|
+
],
|
|
1533
|
+
"v2-localized-content-delivery.test.ts": [
|
|
1534
|
+
2
|
|
1535
|
+
],
|
|
1458
1536
|
"v2-malformed-body-envelope.test.ts": [
|
|
1459
1537
|
2
|
|
1460
1538
|
],
|
|
@@ -1473,6 +1551,9 @@
|
|
|
1473
1551
|
"v2-mcp-tasks.test.ts": [
|
|
1474
1552
|
2
|
|
1475
1553
|
],
|
|
1554
|
+
"v2-media-inline-cap-static.test.ts": [
|
|
1555
|
+
2
|
|
1556
|
+
],
|
|
1476
1557
|
"v2-memory-cross-tenant-isolation.test.ts": [
|
|
1477
1558
|
2
|
|
1478
1559
|
],
|
|
@@ -1482,9 +1563,18 @@
|
|
|
1482
1563
|
"v2-minimum-version-refused.test.ts": [
|
|
1483
1564
|
2
|
|
1484
1565
|
],
|
|
1566
|
+
"v2-model-capabilities-advertisement.test.ts": [
|
|
1567
|
+
2
|
|
1568
|
+
],
|
|
1569
|
+
"v2-model-capability-insufficient.test.ts": [
|
|
1570
|
+
2
|
|
1571
|
+
],
|
|
1485
1572
|
"v2-mrtr-rounds-ceiling.test.ts": [
|
|
1486
1573
|
2
|
|
1487
1574
|
],
|
|
1575
|
+
"v2-multi-party-conversation-advertisement.test.ts": [
|
|
1576
|
+
2
|
|
1577
|
+
],
|
|
1488
1578
|
"v2-negotiation-authenticated.test.ts": [
|
|
1489
1579
|
2
|
|
1490
1580
|
],
|
|
@@ -1494,6 +1584,12 @@
|
|
|
1494
1584
|
"v2-no-transport-advertisement.test.ts": [
|
|
1495
1585
|
2
|
|
1496
1586
|
],
|
|
1587
|
+
"v2-node-pack-runtimes-advertisement.test.ts": [
|
|
1588
|
+
2
|
|
1589
|
+
],
|
|
1590
|
+
"v2-nondeterminism-policy-advertisement.test.ts": [
|
|
1591
|
+
2
|
|
1592
|
+
],
|
|
1497
1593
|
"v2-oauth-client-pkce-state-iss.test.ts": [
|
|
1498
1594
|
2
|
|
1499
1595
|
],
|
|
@@ -1527,6 +1623,9 @@
|
|
|
1527
1623
|
"v2-poll-cursor-v2.test.ts": [
|
|
1528
1624
|
2
|
|
1529
1625
|
],
|
|
1626
|
+
"v2-portability-advertisement.test.ts": [
|
|
1627
|
+
2
|
|
1628
|
+
],
|
|
1530
1629
|
"v2-preferred-version-default.test.ts": [
|
|
1531
1630
|
2
|
|
1532
1631
|
],
|
|
@@ -1536,12 +1635,51 @@
|
|
|
1536
1635
|
"v2-profiles-derived-only.test.ts": [
|
|
1537
1636
|
2
|
|
1538
1637
|
],
|
|
1638
|
+
"v2-prompt-all-four-kinds-events.test.ts": [
|
|
1639
|
+
2
|
|
1640
|
+
],
|
|
1641
|
+
"v2-prompt-end-to-end-events.test.ts": [
|
|
1642
|
+
2
|
|
1643
|
+
],
|
|
1644
|
+
"v2-prompt-library-advertisement.test.ts": [
|
|
1645
|
+
2
|
|
1646
|
+
],
|
|
1647
|
+
"v2-prompt-list-and-fetch.test.ts": [
|
|
1648
|
+
2
|
|
1649
|
+
],
|
|
1650
|
+
"v2-prompt-mutable-lifecycle.test.ts": [
|
|
1651
|
+
2
|
|
1652
|
+
],
|
|
1653
|
+
"v2-prompt-pack-install.test.ts": [
|
|
1654
|
+
2
|
|
1655
|
+
],
|
|
1656
|
+
"v2-prompt-render-deterministic.test.ts": [
|
|
1657
|
+
2
|
|
1658
|
+
],
|
|
1659
|
+
"v2-prompt-resolution-chain-event.test.ts": [
|
|
1660
|
+
2
|
|
1661
|
+
],
|
|
1662
|
+
"v2-prompt-template-shape.test.ts": [
|
|
1663
|
+
2
|
|
1664
|
+
],
|
|
1539
1665
|
"v2-protected-resource-metadata.test.ts": [
|
|
1540
1666
|
2
|
|
1541
1667
|
],
|
|
1542
1668
|
"v2-provider-conflict.test.ts": [
|
|
1543
1669
|
2
|
|
1544
1670
|
],
|
|
1671
|
+
"v2-provider-usage-advertisement.test.ts": [
|
|
1672
|
+
2
|
|
1673
|
+
],
|
|
1674
|
+
"v2-provider-usage-emission.test.ts": [
|
|
1675
|
+
2
|
|
1676
|
+
],
|
|
1677
|
+
"v2-provider-usage-payload-static.test.ts": [
|
|
1678
|
+
2
|
|
1679
|
+
],
|
|
1680
|
+
"v2-purpose-propagation-advertisement.test.ts": [
|
|
1681
|
+
2
|
|
1682
|
+
],
|
|
1545
1683
|
"v2-queue-cross-tenant-isolation.test.ts": [
|
|
1546
1684
|
2
|
|
1547
1685
|
],
|
|
@@ -1575,6 +1713,9 @@
|
|
|
1575
1713
|
"v2-run-diff-identical.test.ts": [
|
|
1576
1714
|
2
|
|
1577
1715
|
],
|
|
1716
|
+
"v2-run-execution-bounds.test.ts": [
|
|
1717
|
+
2
|
|
1718
|
+
],
|
|
1578
1719
|
"v2-run-fork-ancestry.test.ts": [
|
|
1579
1720
|
2
|
|
1580
1721
|
],
|
|
@@ -1599,12 +1740,21 @@
|
|
|
1599
1740
|
"v2-safefetch-ssrf-refused.test.ts": [
|
|
1600
1741
|
2
|
|
1601
1742
|
],
|
|
1743
|
+
"v2-scheduling-advertisement.test.ts": [
|
|
1744
|
+
2
|
|
1745
|
+
],
|
|
1602
1746
|
"v2-secret-canary-absent.test.ts": [
|
|
1603
1747
|
2
|
|
1604
1748
|
],
|
|
1605
1749
|
"v2-secrets-run-witness.test.ts": [
|
|
1606
1750
|
2
|
|
1607
1751
|
],
|
|
1752
|
+
"v2-self-hosted-runner-advertisement.test.ts": [
|
|
1753
|
+
2
|
|
1754
|
+
],
|
|
1755
|
+
"v2-self-hosted-runner-frames-static.test.ts": [
|
|
1756
|
+
2
|
|
1757
|
+
],
|
|
1608
1758
|
"v2-sse-last-event-id-cursor.test.ts": [
|
|
1609
1759
|
2
|
|
1610
1760
|
],
|
|
@@ -1620,9 +1770,18 @@
|
|
|
1620
1770
|
"v2-stream-sse-projection.test.ts": [
|
|
1621
1771
|
2
|
|
1622
1772
|
],
|
|
1773
|
+
"v2-sub-workflow-advertisement.test.ts": [
|
|
1774
|
+
2
|
|
1775
|
+
],
|
|
1623
1776
|
"v2-subject-link-record.test.ts": [
|
|
1624
1777
|
2
|
|
1625
1778
|
],
|
|
1779
|
+
"v2-subworkflow-input-mapping.test.ts": [
|
|
1780
|
+
2
|
|
1781
|
+
],
|
|
1782
|
+
"v2-subworkflow-linkage.test.ts": [
|
|
1783
|
+
2
|
|
1784
|
+
],
|
|
1626
1785
|
"v2-table-schema-enforcement.test.ts": [
|
|
1627
1786
|
2
|
|
1628
1787
|
],
|
|
@@ -1641,6 +1800,9 @@
|
|
|
1641
1800
|
"v2-trigger-dead-letter-read.test.ts": [
|
|
1642
1801
|
2
|
|
1643
1802
|
],
|
|
1803
|
+
"v2-ui-plugins-advertisement.test.ts": [
|
|
1804
|
+
2
|
|
1805
|
+
],
|
|
1644
1806
|
"v2-unadvertised-operation-not-found.test.ts": [
|
|
1645
1807
|
2
|
|
1646
1808
|
],
|
|
@@ -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.45.
|
|
5
|
-
"corpusTag": "v2.45.
|
|
4
|
+
"version": "2.45.16",
|
|
5
|
+
"corpusTag": "v2.45.16",
|
|
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": "429b70d7514eca241ec0353d061ddba2263d34f4e4d7614ecad3e11b2d880076",
|
|
13
|
+
"api/v2/asyncapi.yaml": "8a8a8f72e0ec39809c4cc85d71834d8263d51dabacc74d1673f3468a66156911",
|
|
14
|
+
"api/v2/openapi.yaml": "970fdc562da65537205354df32da66c9e1956496fc9b6cd482b1af13e1550fb8",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "bd1c00fae7b6fda506a75aff841bbdc438d4ce092642a72041203bee999b88de",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"schemas/v2/audit-verify-result.schema.json": "14af8e9283510f0a40e48a2059c929ee44e0fc9fa3cc66a95bfbe90b17c48297",
|
|
119
119
|
"schemas/v2/budget-policy.schema.json": "1de68095db0beb5c7a4be629de26e79f62ebbe748a88d46f36e768edfd1f0d68",
|
|
120
120
|
"schemas/v2/capabilities.schema.json": "c7a01b2f569139f99ba5e1a5329a42556fbd82bc743f8fd96963304395fc9ef0",
|
|
121
|
-
"schemas/v2/certification-bundle.schema.json": "
|
|
121
|
+
"schemas/v2/certification-bundle.schema.json": "012c0176fbe05425507a8096412344388c0e2e1884c5fe1bc189ef1af0532997",
|
|
122
122
|
"schemas/v2/channel-presence-payload.schema.json": "4eeb224910e6f7eee3ab5e7c3899559c25c83a26d0022e0ad195c4672611977a",
|
|
123
123
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
124
124
|
"schemas/v2/chat-card-pack-manifest.schema.json": "92a57db2fd4b2463f14ef155fef8e3f18afc78960b646459dcf32efc79ff6bf5",
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"schemas/v2/configurable.schema.json": "33a6884047e2490f723733bf8b74d3b9164e00374cfea6dc3eac5a70dc368861",
|
|
129
129
|
"schemas/v2/connection-pack-manifest.schema.json": "8d019de6bd0c5b14ea3b227580734ec792521493b396a850f7f9217aa7a6a547",
|
|
130
130
|
"schemas/v2/connection-provider-registry.schema.json": "5b404da328a95c45808929e233ee766ebd635cf0df6f5d15d4c19354dfd7e75d",
|
|
131
|
-
"schemas/v2/conversation-event.schema.json": "
|
|
131
|
+
"schemas/v2/conversation-event.schema.json": "51dce69b33e3eb1913b9b2a0fcc0bee3dcf86761faf0c56dd004f4c580c95d39",
|
|
132
132
|
"schemas/v2/conversation-turn.schema.json": "75bb6a4a03072a958feb5b34e2a1f40471e9e3996a81fa430b65717f0773c9a4",
|
|
133
133
|
"schemas/v2/credential-provenance.schema.json": "f86b09e94b1c524dec7d1c6353965665ae8891e9517faef6e742d639c5578c99",
|
|
134
134
|
"schemas/v2/credential-reference.schema.json": "ea699ce30f58fb2c32d4279158b3f730f70be7b2dc8c3037693a76e66eb3e001",
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"schemas/v2/memory-entry.schema.json": "290576ae84f4fef4cdf975932b87963283b11c50ea3d2654b32cd96aa6537c3d",
|
|
161
161
|
"schemas/v2/memory-list-options.schema.json": "f66703bccb68efb28391c273abb66aa117ee5b5ce475c477846ed700c336afcd",
|
|
162
162
|
"schemas/v2/node-pack-manifest.schema.json": "6e25106c647d58ff6b11c198a83de7f1f988e47c8e3bf9f28ac5f84eef900f5d",
|
|
163
|
-
"schemas/v2/orchestrator-decision.schema.json": "
|
|
163
|
+
"schemas/v2/orchestrator-decision.schema.json": "4d4b4c5fe73c22a1f42242b403650206ad58fd981f8fd45795894cebe3a514ae",
|
|
164
164
|
"schemas/v2/org-chart-responsibility-view.schema.json": "8a2565e4cdc6737a3946a70799f93642808b92f9c8d56dcdff3a0782053b89a1",
|
|
165
165
|
"schemas/v2/pack-lockfile.schema.json": "2685417702c105146b780cd99154296a46578fbb10d81c8c713348ee26fea898",
|
|
166
166
|
"schemas/v2/part.schema.json": "08b75eaec9a0b4a8cedca7bab732dd906b52b0749eaa444ec1ac015aa43519a5",
|
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
"schemas/v2/residency.schema.json": "3fd23c9732beb140504e81560fc426eb6764d547e56da5fb92c5a5c7bf04db3a",
|
|
174
174
|
"schemas/v2/run-ancestry-response.schema.json": "334c17f2062dea62726ca1d07b8be3f169cdc422af843c1def5fb317039814c9",
|
|
175
175
|
"schemas/v2/run-diff-response.schema.json": "8bdb2045c274580038bd74781f7d062f5049839797c164a89de4ed89edc53a74",
|
|
176
|
-
"schemas/v2/run-event-payloads.schema.json": "
|
|
176
|
+
"schemas/v2/run-event-payloads.schema.json": "942d6f65a765f6b574922a54d1e531ab66bc8d5c673a006ec68f8d75f3f0aec9",
|
|
177
177
|
"schemas/v2/run-event.schema.json": "2f0d7416bd376c56affe97b6b2b49981532e8e9ff45c0a162cf806c78b3e7fb7",
|
|
178
178
|
"schemas/v2/run-list-response.schema.json": "c2dbc34768dcf64528914a213aa3cb55952e8e3e90a64b04a9423b2a19749d38",
|
|
179
179
|
"schemas/v2/run-options.schema.json": "f0e9f494d80086c2ed2cf9fe87df54e5b4e66601699c4a1089f4edbc7ba58867",
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
208
208
|
"spec/v1/alias-detectors.json": "0b2f28808ffe0b9d98a187775038c3406bb70919747a788a6e4f866e293ae6d3",
|
|
209
209
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
210
|
-
"spec/v1/core-standard-manifest.json": "
|
|
210
|
+
"spec/v1/core-standard-manifest.json": "e034d628d415045195718b3065abf8ac2df8ad2179804ac63ff04ad7d0e198bb",
|
|
211
211
|
"spec/v1/deprecations.json": "a3293072ea951857395d05f0437264e88965f1e9019ff61c55bacfa9c1aaa17c",
|
|
212
212
|
"spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
|
|
213
213
|
"spec/v1/end-of-support.json": "35f0bf3b70fe78b16e2a2fd81a153fc27e703f6c16376c6fe7cdf1f4f2c4e6d4",
|
|
@@ -309,9 +309,9 @@
|
|
|
309
309
|
"spec/v2/path-manifest.json": "b84c7561f50c7df0cb61b202bd6595acad3ee7edca7a45f711949bea3c69bd27",
|
|
310
310
|
"spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
|
|
311
311
|
"spec/v2/profiles.json": "180beb9ef2d161766fa23b2987e7e829851e3d316273147cf6a4a3f324befd6b",
|
|
312
|
-
"spec/v2/release.json": "
|
|
312
|
+
"spec/v2/release.json": "68d8fd2c8ef4cca09f08ba43adece748ea97a2eb9a5218b899be543569dbe26a",
|
|
313
313
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
|
|
314
|
-
"spec/v2/surface-baseline.json": "
|
|
314
|
+
"spec/v2/surface-baseline.json": "94199023cd15ef90174eccbb457aa805ac4a60df858fe8dc11e96d599edc56ca"
|
|
315
315
|
},
|
|
316
|
-
"corpusCommit": "
|
|
316
|
+
"corpusCommit": "11150aa3a6506f9d679564bff000755897628922"
|
|
317
317
|
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The artifact canonical schema-URL witness (`artifact-type-packs.md`
|
|
3
|
+
* §Schema distribution), unaided.
|
|
4
|
+
*
|
|
5
|
+
* "Its canonical URL and `$id` is
|
|
6
|
+
* `{HostBase}/schemas/artifacts/{artifactTypeId}.schema.json`, served as
|
|
7
|
+
* `application/schema+json`. A host advertising `artifactTypes` SHOULD serve
|
|
8
|
+
* each installed type's schema there, and MUST for a host-registered type whose
|
|
9
|
+
* `schemaVersion` it advertises."
|
|
10
|
+
*
|
|
11
|
+
* The MUST set is read from discovery alone: every `artifactTypes.types[id]`
|
|
12
|
+
* with `registrationSource: "host"` and an integer `schemaVersion`
|
|
13
|
+
* (`capabilities.schema.json`: the facet "discloses which §Schema distribution
|
|
14
|
+
* regime applies"). For each, `GET {HostBase}/schemas/artifacts/{id}.schema.json`:
|
|
15
|
+
* served answers `200`;
|
|
16
|
+
* media with `Content-Type: application/schema+json`;
|
|
17
|
+
* schema a JSON object whose `$id` is an absolute URL ending
|
|
18
|
+
* `/schemas/artifacts/{id}.schema.json`.
|
|
19
|
+
* `{HostBase}` is the base the suite drives the host at (the v2 text does not
|
|
20
|
+
* define it further), so the `$id`'s origin is not compared: a host fronted by
|
|
21
|
+
* a public origin legitimately mints its `$id` there.
|
|
22
|
+
*
|
|
23
|
+
* {@link driveSchemaUrls} observes and asserts nothing; {@link judgeSchemaUrl}
|
|
24
|
+
* is pure, proven in `artifact-schema-url-witness.test.ts`.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { driver } from './driver.js';
|
|
28
|
+
import type { MajorProfile } from './major-profile.js';
|
|
29
|
+
import { finding, isRecord, skip, type Finding, type Skip } from './fixture-run-observer.js';
|
|
30
|
+
|
|
31
|
+
const DOC = 'artifact-type-packs.md §Schema distribution';
|
|
32
|
+
|
|
33
|
+
export interface SchemaUrlObservation {
|
|
34
|
+
readonly artifactTypeId: string;
|
|
35
|
+
readonly path: string;
|
|
36
|
+
readonly status: number;
|
|
37
|
+
readonly contentType: string | null;
|
|
38
|
+
readonly json: unknown;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** The host-registered types whose `schemaVersion` the host advertises, sorted. */
|
|
42
|
+
export function hostRegisteredTypes(profile: MajorProfile, doc: unknown): string[] | Skip {
|
|
43
|
+
const fam = profile.family(doc, 'artifactTypes');
|
|
44
|
+
if (fam === null) return skip('inapplicable', 'the host does not advertise artifactTypes');
|
|
45
|
+
const types = isRecord(fam['types']) ? fam['types'] : {};
|
|
46
|
+
const ids = Object.entries(types)
|
|
47
|
+
.filter(([, t]) => isRecord(t) && t['registrationSource'] === 'host' && Number.isInteger(t['schemaVersion']))
|
|
48
|
+
.map(([id]) => id)
|
|
49
|
+
.sort();
|
|
50
|
+
if (ids.length === 0) return skip('inapplicable', 'the host advertises no artifactTypes.types entry with registrationSource "host" and a schemaVersion — serving the canonical URL is only a SHOULD for the rest');
|
|
51
|
+
return ids;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export const schemaPath = (artifactTypeId: string): string => `/schemas/artifacts/${encodeURIComponent(artifactTypeId)}.schema.json`;
|
|
55
|
+
|
|
56
|
+
/** Fetch each MUST-served schema. Asserts nothing. */
|
|
57
|
+
export async function driveSchemaUrls(profile: MajorProfile, doc: unknown): Promise<Skip | SchemaUrlObservation[]> {
|
|
58
|
+
const ids = hostRegisteredTypes(profile, doc);
|
|
59
|
+
if (!Array.isArray(ids)) return ids;
|
|
60
|
+
const out: SchemaUrlObservation[] = [];
|
|
61
|
+
for (const artifactTypeId of ids) {
|
|
62
|
+
const path = schemaPath(artifactTypeId);
|
|
63
|
+
const r = await driver.get(path, { headers: { Accept: 'application/schema+json, application/json' } });
|
|
64
|
+
out.push({ artifactTypeId, path, status: r.status, contentType: r.headers.get('content-type'), json: r.json });
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** One type's served schema. Pure. */
|
|
70
|
+
export function judgeSchemaUrl(o: SchemaUrlObservation): Finding[] {
|
|
71
|
+
const media = (o.contentType ?? '').split(';')[0]!.trim().toLowerCase();
|
|
72
|
+
const id = isRecord(o.json) ? o.json['$id'] : undefined;
|
|
73
|
+
let idOk = false;
|
|
74
|
+
if (typeof id === 'string') {
|
|
75
|
+
try { idOk = /^https?:$/.test(new URL(id).protocol) && id.endsWith(`/schemas/artifacts/${o.artifactTypeId}.schema.json`); } catch { idOk = false; }
|
|
76
|
+
}
|
|
77
|
+
return [
|
|
78
|
+
finding(o.status === 200, DOC, `the host MUST serve host-registered ${o.artifactTypeId}'s schema at ${o.path} (got ${o.status})`),
|
|
79
|
+
finding(media === 'application/schema+json', DOC, `${o.path} MUST be served as application/schema+json (got ${JSON.stringify(o.contentType)})`),
|
|
80
|
+
finding(isRecord(o.json), DOC, `${o.path} MUST be a JSON Schema object`),
|
|
81
|
+
finding(idOk, DOC, `the schema's $id MUST be its canonical URL, {HostBase}/schemas/artifacts/${o.artifactTypeId}.schema.json (got ${JSON.stringify(id)})`),
|
|
82
|
+
];
|
|
83
|
+
}
|
|
@@ -89,7 +89,7 @@ export async function saturate(profile: MajorProfile, discovery: unknown): Promi
|
|
|
89
89
|
streams.push(ctl);
|
|
90
90
|
// `Accept: text/event-stream` keeps the request in flight; without it a
|
|
91
91
|
// negotiating host answers a one-shot snapshot and the slot drops.
|
|
92
|
-
const stream = fetch(`${env.baseUrl}${profile.runsPath}/${
|
|
92
|
+
const stream = fetch(`${env.baseUrl}${profile.runsPath}/${profile.idSegment(runId)}/events`, {
|
|
93
93
|
headers: { Authorization: `Bearer ${env.apiKey}`, Accept: 'text/event-stream', ...profile.versionHeaders },
|
|
94
94
|
signal: ctl.signal,
|
|
95
95
|
}).then((r) => r.status, () => null);
|
|
@@ -127,7 +127,7 @@ export async function saturate(profile: MajorProfile, discovery: unknown): Promi
|
|
|
127
127
|
if (runIds.length > 0) {
|
|
128
128
|
const bulk = await http(() => driver.post(`${profile.runsPath}:bulk-cancel`, { runIds }));
|
|
129
129
|
if (bulk === null || bulk.status >= 400) {
|
|
130
|
-
for (const id of runIds) await http(() => driver.post(`${profile.runsPath}/${
|
|
130
|
+
for (const id of runIds) await http(() => driver.post(`${profile.runsPath}/${profile.idSegment(id)}/cancel`, {}));
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
await Promise.allSettled(pending);
|
|
@@ -59,7 +59,7 @@ async function readEvents(profile: MajorProfile, runId: string): Promise<RunEven
|
|
|
59
59
|
const out: RunEvent[] = [];
|
|
60
60
|
let after = 0;
|
|
61
61
|
for (let page = 0; page < 50; page++) {
|
|
62
|
-
const res = await http(() => driver.get(`${profile.runsPath}/${
|
|
62
|
+
const res = await http(() => driver.get(`${profile.runsPath}/${profile.idSegment(runId)}/events/poll?timeout=1&afterSequence=${after}`));
|
|
63
63
|
if (res === null || res.status !== 200) return page === 0 ? null : out;
|
|
64
64
|
const batch = (res.json as { events?: unknown } | undefined)?.events;
|
|
65
65
|
if (!Array.isArray(batch) || batch.length === 0) return out;
|
|
@@ -101,11 +101,11 @@ export async function drive(profile: MajorProfile, discovery: unknown, timeoutMs
|
|
|
101
101
|
const deadline = Date.now() + timeoutMs;
|
|
102
102
|
let snap: Record<string, unknown> | null = null;
|
|
103
103
|
for (;;) {
|
|
104
|
-
const res = await http(() => driver.get(`${profile.runsPath}/${
|
|
104
|
+
const res = await http(() => driver.get(`${profile.runsPath}/${profile.idSegment(runId)}`));
|
|
105
105
|
snap = res?.status === 200 && isRecord(res.json) ? res.json : null;
|
|
106
106
|
if (snap !== null && TERMINAL.has(String(snap['status']))) break;
|
|
107
107
|
if (Date.now() > deadline) {
|
|
108
|
-
await http(() => driver.post(`${profile.runsPath}/${
|
|
108
|
+
await http(() => driver.post(`${profile.runsPath}/${profile.idSegment(runId)}/cancel`, {}));
|
|
109
109
|
return { kind: 'skip', disposition: 'blocked', reason: `the budgeted run did not reach a terminal status within ${timeoutMs} ms (last: ${snap === null ? 'unreadable' : String(snap['status'])})` };
|
|
110
110
|
}
|
|
111
111
|
await new Promise((r) => setTimeout(r, 250));
|