@blamejs/exceptd-skills 0.18.12 → 0.18.13

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/sbom.cdx.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.6",
4
- "serialNumber": "urn:uuid:e985db48-bf9b-413b-9f95-7ae7c5737091",
4
+ "serialNumber": "urn:uuid:c51f478e-938e-48ee-9a6c-69dd9501e511",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2150-02-25T15:29:12.000Z",
7
+ "timestamp": "2130-10-20T07:58:06.000Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "blamejs",
11
11
  "name": "scripts/refresh-sbom.js",
12
- "version": "0.18.12"
12
+ "version": "0.18.13"
13
13
  }
14
14
  ],
15
15
  "component": {
16
- "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.18.12",
16
+ "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.18.13",
17
17
  "type": "application",
18
18
  "name": "@blamejs/exceptd-skills",
19
- "version": "0.18.12",
19
+ "version": "0.18.13",
20
20
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 51 skills, 11 catalogs (459 CVEs / 181 CWEs / 805 ATT&CK + ICS / 170 ATLAS / 468 D3FEND / 8888 RFCs), 35 jurisdictions, 10-class catalog gap detector + budget gate, real XML parser + canonical-form diff + content-pattern regression detection, Ed25519-signed.",
21
21
  "licenses": [
22
22
  {
@@ -25,17 +25,17 @@
25
25
  }
26
26
  }
27
27
  ],
28
- "purl": "pkg:npm/%40blamejs/exceptd-skills@0.18.12",
28
+ "purl": "pkg:npm/%40blamejs/exceptd-skills@0.18.13",
29
29
  "hashes": [
30
30
  {
31
31
  "alg": "SHA-256",
32
- "content": "cfa66298a26b4767ee33de3ea80dce8fb93eafe7842c818eafcf2bb799db3023"
32
+ "content": "9b7fb1644d71c6022e2c91820776797afb98dd8e6dd05d9d60285ba0e0536df1"
33
33
  }
34
34
  ],
35
35
  "externalReferences": [
36
36
  {
37
37
  "type": "distribution",
38
- "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.18.12"
38
+ "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.18.13"
39
39
  },
40
40
  {
41
41
  "type": "vcs",
@@ -116,11 +116,11 @@
116
116
  "hashes": [
117
117
  {
118
118
  "alg": "SHA-256",
119
- "content": "e6261b4abe62c5fb438605be888655fea1311752fe6a8de44a88d67cc250c66b"
119
+ "content": "f13b93e53a68866ea90ad820bb1f9791d4ead69bdf136c62200b5647e988acdb"
120
120
  },
121
121
  {
122
122
  "alg": "SHA3-512",
123
- "content": "c7dd7968a66587e982d7d15f37c46f7c61f0685b11da95a1fe861c997b9806c459b734f0203dd9cc3baf9fb77c4915d8bf1c70852ad2481429177e139d4a8517"
123
+ "content": "39f6ff1f34882768f3e29f7d573add552bcd512cefb36d79f661e5f6e4f9d1b1c5fec1ed5c88ebbce3d933fe20f0da360ff3d8ac04cbf52e5f6b3dc0f339f743"
124
124
  }
125
125
  ]
126
126
  },
@@ -986,11 +986,11 @@
986
986
  "hashes": [
987
987
  {
988
988
  "alg": "SHA-256",
989
- "content": "7b9df8547f3fb93ae1fe7db953da6ccb9e72438f2b72db56fbd24adc9f4c48ee"
989
+ "content": "9107c123be8a67456f724f35b5a93086c58abf7d4f5769c15dcba9fccca392d6"
990
990
  },
991
991
  {
992
992
  "alg": "SHA3-512",
993
- "content": "4f04d08e54a88b2f32f6325955ac37923dff98fe946f259f968e70c81395c29e7ffcec1d8563f6ddda55e69858f7c1b219808fadf7b855e003ec833019281585"
993
+ "content": "72c7feffd270042739ae9484ab522955967f257820ddbb06434639cbc305ade9388774d56784b69a32352c733af6a6cd90a52bb3693d0dd05ebc542863abf5b5"
994
994
  }
995
995
  ]
996
996
  },
@@ -1316,11 +1316,11 @@
1316
1316
  "hashes": [
1317
1317
  {
1318
1318
  "alg": "SHA-256",
1319
- "content": "240c61d73f016225552b71340c75083415358d942f93403b8b6b982d09b963e0"
1319
+ "content": "0b0087706dfb8c0811d5b14449f01ca69d016174c1960f105b88676f137034c5"
1320
1320
  },
1321
1321
  {
1322
1322
  "alg": "SHA3-512",
1323
- "content": "025a21d50f2647cb23475ec33d8d3d6bad3eebea962b4422d72348d09b7e13f3753c4831feae4a12024553e3745d5ee657d0ebedaf536fa8db5c417c7365827e"
1323
+ "content": "6d2681258f50114dcc852a5c6b818416057b8fee2bfe4b2cfced8c81d37e38d63aa9b89fa94682584ad071e2488ab2364706aff413c11bd024f7994aecbbf629"
1324
1324
  }
1325
1325
  ]
1326
1326
  },
@@ -1436,11 +1436,11 @@
1436
1436
  "hashes": [
1437
1437
  {
1438
1438
  "alg": "SHA-256",
1439
- "content": "2b65ffe841ecabceeb0917b944f44658b406b6a04c2f6f6191e2bb8698682163"
1439
+ "content": "91b24f4bdda46132fa23a617125f50bc4721d243b2f2ca647706774257eda59c"
1440
1440
  },
1441
1441
  {
1442
1442
  "alg": "SHA3-512",
1443
- "content": "6e80f5c015b8a5676dab4078bc9f9b4ff990b0d0fb68c8719c7c1d7b34eb1b922662c201eeccd9d19e56dc90d24039df259c7d24ea03617a5024346e08a2eebf"
1443
+ "content": "dcf010d620752bff3dd15195b0752195dafe6e215e28afac3e9e763a5389d14f41de0949830d51152ed1e446dbc49970ec2b3027c1bfd3d93d852919b1a42741"
1444
1444
  }
1445
1445
  ]
1446
1446
  },
@@ -1451,11 +1451,11 @@
1451
1451
  "hashes": [
1452
1452
  {
1453
1453
  "alg": "SHA-256",
1454
- "content": "326635d5edc097ef48dbf4be9d0df6b2d0464b5a276df247c86535f4d2ce122d"
1454
+ "content": "46a4d509b2d5736fc438c65185c5d16a30e740e65b35f5d78a361b89b6c01dd0"
1455
1455
  },
1456
1456
  {
1457
1457
  "alg": "SHA3-512",
1458
- "content": "f397f9b891b47ce13437fb3211e10910f9d736bb5f29287da18c246c9a83ed4a5f950ff12f3c7fed5ccb66e8a8e45d4c1b67f267fc9b1d876f0207835ef54222"
1458
+ "content": "9978c4753f2b7de3981eba6afc16175cca535f3819ec2f458f4e6de4f3b98408f627b472b3da6af5d32b07956736c85d114e68f7b1c31fe6def07364d6a8e063"
1459
1459
  }
1460
1460
  ]
1461
1461
  },
@@ -1481,11 +1481,11 @@
1481
1481
  "hashes": [
1482
1482
  {
1483
1483
  "alg": "SHA-256",
1484
- "content": "326fc776527f54bb46cc74bb29ddade5c453a6b94a8c6b19b51657f15e994261"
1484
+ "content": "99abdca1451f2d7c1163dfb295721a90f3ae5dd19d9be3d8744e5c0fafe22feb"
1485
1485
  },
1486
1486
  {
1487
1487
  "alg": "SHA3-512",
1488
- "content": "386355bec846a1d55cd3543fd786d843be4b167c1bf37fe4b2094580a5f4ff52b5c68f5215f28a95cc5fb5714b09a4c7bc9d4bb028f864bd09cb1d4082954c16"
1488
+ "content": "2f087e334b9bd8d8e27c551049a9fc200f6a5ff4938cc18695e673ec99b5fda147dec05431484f1ced4d916c78b9c5a9f7278fde1cff5550bad479f8948922bc"
1489
1489
  }
1490
1490
  ]
1491
1491
  },
@@ -1586,11 +1586,11 @@
1586
1586
  "hashes": [
1587
1587
  {
1588
1588
  "alg": "SHA-256",
1589
- "content": "2410c805fb1b837444cae8fa240b1c3b6d1958512c4b2de6291d83d1ca049477"
1589
+ "content": "896403a8760fef5f434ca17e601aeb03de3d2737b07842389ffd0cd064db6301"
1590
1590
  },
1591
1591
  {
1592
1592
  "alg": "SHA3-512",
1593
- "content": "5c54ed7a860825e503a2bca0e638a4e9cbf97bedac7b1e8b8445414a51bd90436cace5256374f98b591f84c5c2419da4d506a177694e744077c752b7f1f66593"
1593
+ "content": "db918187e6165805b2332602187179e071f0a4445f0ba816201083dc6716ce62e235694bdf538b7f921465c6ffa34282d0258c2105c39f4d6c11b9541f5b372b"
1594
1594
  }
1595
1595
  ]
1596
1596
  },
@@ -1646,11 +1646,11 @@
1646
1646
  "hashes": [
1647
1647
  {
1648
1648
  "alg": "SHA-256",
1649
- "content": "b456437ffd2c64f6368c32148d756b4c8b331a841f387af668dd4fe9fffa9f7d"
1649
+ "content": "faf3a3e4c3cf55cf47e2d0a76d81b6a95c99050af1c5b2e9746f79b8517d2bc1"
1650
1650
  },
1651
1651
  {
1652
1652
  "alg": "SHA3-512",
1653
- "content": "5365c48d5e1c084c74fff391f04e37acef83478373163f3aa92b8221a3c5286793abdc934df309e7aee90808b149d8f32bdb5274731ed72f7378248fdf08aff3"
1653
+ "content": "e99bfeefec359df939fb0cf574517b4acbad3320f760bd6e853a7d2aee8454e4d28b031b9300f4a6f07d6e73fd4fc2f694ba190a4618876f1b457a979a3b218f"
1654
1654
  }
1655
1655
  ]
1656
1656
  },
@@ -1661,11 +1661,11 @@
1661
1661
  "hashes": [
1662
1662
  {
1663
1663
  "alg": "SHA-256",
1664
- "content": "82bb10b137ce9fe00cdee832a07d8dfe692014b8c1446c3d460bcbc968508be3"
1664
+ "content": "8ffa194134aca2db0f7a12b137da71b75e180b58ce3659a1ba4e6912d440e1c9"
1665
1665
  },
1666
1666
  {
1667
1667
  "alg": "SHA3-512",
1668
- "content": "428351e33661d6150f9aaa982bed02ffa730f46bbc3d2215c4124b3738d04f4b055f62bf624fd267269bbd0f41de18e1bb42531139f7042559b10ff75997992d"
1668
+ "content": "ab548924027f86fe1c6a8a382453978a7b0d3c723bd7a91fb24a9336ac59dd6ba1011b71d356edcfa6266ba60b1c86f2bb766b395054d59da938b9ab5cf09c7a"
1669
1669
  }
1670
1670
  ]
1671
1671
  },
@@ -1676,11 +1676,11 @@
1676
1676
  "hashes": [
1677
1677
  {
1678
1678
  "alg": "SHA-256",
1679
- "content": "3bcdc06b12252b0b37acb42e9372936b264c8b78a8925fbbf01d53bcdd14bfe2"
1679
+ "content": "7c3b6ee6e19289ed24ce575996ea6d2e89a900de1c4029d8a627de1d68fe8446"
1680
1680
  },
1681
1681
  {
1682
1682
  "alg": "SHA3-512",
1683
- "content": "d29736ad6b4d81199b64a9c40652e1ac668c1ddf942798d5a71833b446e25504f18cf0faa30480b3c89965c9c6ee9f023da4f2c9719ed0ba6d84e15df344f2ba"
1683
+ "content": "50b818fe29a28d8344f292081db7841a809dfd157fd0dc1eb95626311424b1e9272ebc6bbab9ffea9989d64f8bb86e8fe9fb3c5364fa5744d3c9b4f5afe76e4b"
1684
1684
  }
1685
1685
  ]
1686
1686
  },
@@ -1706,11 +1706,11 @@
1706
1706
  "hashes": [
1707
1707
  {
1708
1708
  "alg": "SHA-256",
1709
- "content": "ea874fc21b7757d83cb08dd468e305eaee18431e0224f3102944dcd194170f0e"
1709
+ "content": "d1fdcd3db1c3c6284d5c4c2189b843aba851c6027ed6e97f473ef2badda969a3"
1710
1710
  },
1711
1711
  {
1712
1712
  "alg": "SHA3-512",
1713
- "content": "e864fd3538dfaa107414dd23499ed6f858a8a32a71c10f865537457d85c3b4709933ec4f48114b146f66bd78a7b55462c30e4355de730c94dc74a8362b9ddd1a"
1713
+ "content": "591f78cab313ec978053e75b08901fab8011f293b39337cafb9eea62d67d73b8f2fa5b394ab130ca4fe8c4c21abc47c8e0a48230fea299318bcb74c0970b2090"
1714
1714
  }
1715
1715
  ]
1716
1716
  },
@@ -1736,11 +1736,11 @@
1736
1736
  "hashes": [
1737
1737
  {
1738
1738
  "alg": "SHA-256",
1739
- "content": "257040e277977cd3bf701da7d2b604c06908fd279bb11e83c0ad841a6b7bac23"
1739
+ "content": "14313387165baf81ef54719a3491347380c0eeec86dfc24cdcfcc666c1e68248"
1740
1740
  },
1741
1741
  {
1742
1742
  "alg": "SHA3-512",
1743
- "content": "69cdb4f00f92e5dff4007bbdc24289b07a24ef1b3ae4c88030dff97b8063f95d440335dcd6d1420fb6ad3f9ec91acb29dd144b0a214e2d8478012725ddc31140"
1743
+ "content": "2261fde3839aa38d1c506792286908998068fb7449ce2269dd7f1db071184a9f4fdf607e35314aa7ac6b500f4ae6d7b00063805708dd7a60b83c7acdc695fbb7"
1744
1744
  }
1745
1745
  ]
1746
1746
  },
@@ -1766,11 +1766,11 @@
1766
1766
  "hashes": [
1767
1767
  {
1768
1768
  "alg": "SHA-256",
1769
- "content": "51953bfa4da6f34f27d1739b0ad4f3f948090f3a43a823eaf19d1f340018a9d9"
1769
+ "content": "578cc34601ab5139f3cc0458a67dcef3e560f0d8af7bd35bd189776b34166d74"
1770
1770
  },
1771
1771
  {
1772
1772
  "alg": "SHA3-512",
1773
- "content": "39d4d803a5a448010785efbf3df0a1c454ccdfce1150c35d4a31d50da0948b14223c2f34ef97f31d385cd02a83af58d296c866dfaca432e1598e5173cb650d8e"
1773
+ "content": "2ff7fb40dbe9214d30214546d6d561c2d2d341abeaf7388f98ce6b8e67fa650034cea196d0a2c43a9e38dd59fc3560990c4c6eec9c2ca4ec26c74847d263b8ad"
1774
1774
  }
1775
1775
  ]
1776
1776
  },
@@ -1781,11 +1781,11 @@
1781
1781
  "hashes": [
1782
1782
  {
1783
1783
  "alg": "SHA-256",
1784
- "content": "916aa74990ec67a9e1078b66dd464000a2ecebe2dd8ae01b33438ca814d7c2b3"
1784
+ "content": "be3b19a1e45b063b4440563dd2fbb9a88cf4b4f02298cbc46d110476f7032558"
1785
1785
  },
1786
1786
  {
1787
1787
  "alg": "SHA3-512",
1788
- "content": "87f20fc372e33f5c53716a0bbe49e6465e9dbbc952bd74962ecfa3eeb34274b74efce97a3cbd48f823e05ff5adc91bf10dc52db392738e8ae19d53dd068285d7"
1788
+ "content": "558b2e27a8ff0c4acb11c06754dc8d56041d06ca777a6562c74a28fc005ec5a4aa72f2e232efdb0870fd481ab422e0f78d9a28ec77db9e967a7dcf29d4ac2c5d"
1789
1789
  }
1790
1790
  ]
1791
1791
  },
@@ -1796,11 +1796,11 @@
1796
1796
  "hashes": [
1797
1797
  {
1798
1798
  "alg": "SHA-256",
1799
- "content": "16269eeb77666b069305901e1617e7cda37036ff6ba556933adc7958ebe317cf"
1799
+ "content": "9b61c968eff0a1c1f350c79b971b47e18f78507f6d604c28807b01306595a3c9"
1800
1800
  },
1801
1801
  {
1802
1802
  "alg": "SHA3-512",
1803
- "content": "14fbfb2dcb800cedcc40484d390cd8ee27631ed63f5023322777800e8dd86ba7dbec75dbe99db7161750679719d1e83a4be273ca5efecc96fd27ab93eb001bde"
1803
+ "content": "171cb236a2c14a6208b9fc163e899bc219f798f0450e7027f0fffeb3ea2790b371230eb07d30b837ac3911ed8b1e98dd14005fd039dd49f2fc0cbf666b49cfac"
1804
1804
  }
1805
1805
  ]
1806
1806
  },
@@ -1856,11 +1856,11 @@
1856
1856
  "hashes": [
1857
1857
  {
1858
1858
  "alg": "SHA-256",
1859
- "content": "7afca8163fa30246b9b4c5afd0ee6fc324f66aca17ebe43657e57f792d3f91e8"
1859
+ "content": "4b4f7f89c2a7bbbcdd3a59225708bacc65629f28a05a41d63f2b15c897daf160"
1860
1860
  },
1861
1861
  {
1862
1862
  "alg": "SHA3-512",
1863
- "content": "9b1fcaf43fe65d2b343c65313c35dd493c41e6a01c6bcbed2d686bdba1b5f63c1f8593b1a90522672601006fdfd03205f75cdeda28c0e9db6831971dbcfd092e"
1863
+ "content": "37278e433782fb0af5e1150f9f2f79fadc909973672d18c60a715a56d52f357c95e4af704acb3de3833885d4112951933228d86fe485c3149c38efbf59dc1fd6"
1864
1864
  }
1865
1865
  ]
1866
1866
  },
@@ -1901,11 +1901,11 @@
1901
1901
  "hashes": [
1902
1902
  {
1903
1903
  "alg": "SHA-256",
1904
- "content": "d897efd048acdde209213af36857c5385c036a650096531408ca978590e38226"
1904
+ "content": "04dc4d4026147da386256d462aec657b1746e9539f8d8dc3ed0ad522f437d765"
1905
1905
  },
1906
1906
  {
1907
1907
  "alg": "SHA3-512",
1908
- "content": "4ba393a76294e87ca9621d29b6e17f4902a38361ddc28d11362efb9d99ae4ebf1f67829818194f18f3b546102ca1cabad16f8b6ec81d022b9eb0f08136174b57"
1908
+ "content": "64b3f4fbe9db144453f9f8e040d093f835c95901c2e823a5f34b3657efbbc756b838936f87b0b9509e88a81ad5b1d7fd459e5a4cba865f10949c1951c7deb8f2"
1909
1909
  }
1910
1910
  ]
1911
1911
  },
@@ -3536,11 +3536,11 @@
3536
3536
  "hashes": [
3537
3537
  {
3538
3538
  "alg": "SHA-256",
3539
- "content": "cb42b07724b561ffa5f11500d1d26e73b0abee7b1cb6571daa084a638ad27d7a"
3539
+ "content": "2042a18a9d0b7c04b4a1a824f7d830be7571616369670c27d04d6c06066f3ece"
3540
3540
  },
3541
3541
  {
3542
3542
  "alg": "SHA3-512",
3543
- "content": "1a80cf9ba6db3b8c681e3a706e3968556554d9a37c3dac6ebf724701950ed1650d9f2cc2674ffef7b676bff4a187e334078a5f083ed050ea0e74531118a512f8"
3543
+ "content": "f5546d6ec52123412cc0497913bcf297ff2c606cee8de5cf29ae4c9e9ffede399158923dfe70e284e7c8a7ee6477be5463fbd0ca0dff74fc9b445d4e448e297a"
3544
3544
  }
3545
3545
  ]
3546
3546
  },
@@ -3566,11 +3566,11 @@
3566
3566
  "hashes": [
3567
3567
  {
3568
3568
  "alg": "SHA-256",
3569
- "content": "63b0b9ef7bf91b2199b6b421edfb68e31727488428a315322a382b684898c75f"
3569
+ "content": "bc84f2b20018a478ff38bc5577f8dbb07c585afdd5c9cab3258a58db673c695b"
3570
3570
  },
3571
3571
  {
3572
3572
  "alg": "SHA3-512",
3573
- "content": "dbe987b5009a3bad865ecfd4d14ce4bd84365c826cf2303ef5ff30bd3e1cb4c9c04e55d09216d81ac2e84ea139c0da751614f2ad2302130fb454ec077689ae35"
3573
+ "content": "bf993ed8965d99c47da87383d0d2ae71b92b413d9d486382bc53b7335b2f48c5ec359dd34a06a7ea594558316631f5a453067cf0ad5ce6f500ae9179e9fc5d4d"
3574
3574
  }
3575
3575
  ]
3576
3576
  },
@@ -3581,11 +3581,11 @@
3581
3581
  "hashes": [
3582
3582
  {
3583
3583
  "alg": "SHA-256",
3584
- "content": "a0a2b9595f1e7589578649107e0414074d25b07a06112a62ae88fcceb558ed0b"
3584
+ "content": "58120edd7ad9f871dcddb9ce4c14ea505907aa32863d46e4fd45ae2cb400f094"
3585
3585
  },
3586
3586
  {
3587
3587
  "alg": "SHA3-512",
3588
- "content": "8c1bd0ec41750feeeb6246d958dae42139e8937d2b2ca2d9dd5f6e67db282b5453d51e410add4c80ce027857622d01dc4c1537211700883c5fe610bedd98ec77"
3588
+ "content": "99fe3bfae69f1edb2512cc0e40101175dee1d052ad578bfcbb14820ff110bd69c3972563b2f0fdde42e3de797c271ccafa19a2d4b48691c3f82a894c728bf520"
3589
3589
  }
3590
3590
  ]
3591
3591
  },
@@ -3626,11 +3626,11 @@
3626
3626
  "hashes": [
3627
3627
  {
3628
3628
  "alg": "SHA-256",
3629
- "content": "9dcc5e7642376672dc498339b201d0b1282f3e0f63104ba033e0386acb4436b1"
3629
+ "content": "e4c0c09a7ebb4870ef54e7b48206a5f64c07fef664ddf76994788b597e3130a5"
3630
3630
  },
3631
3631
  {
3632
3632
  "alg": "SHA3-512",
3633
- "content": "c99cc01c40c75ae09269460d77d256992067663cde16c7497c6b0fe7b5be1fe94d2dc08b47d8f9cba894d0100fac1991248fb57f3bb07cc155a4d330913c3752"
3633
+ "content": "4a917e957e2f6a4ec183b7fe26b13a5a14a720fe1f4fb56ce93455a3b217d438acbe68b7772fbea2c57e17b104907661297b0b016da689121ac39b85deee1496"
3634
3634
  }
3635
3635
  ]
3636
3636
  },
@@ -3671,11 +3671,11 @@
3671
3671
  "hashes": [
3672
3672
  {
3673
3673
  "alg": "SHA-256",
3674
- "content": "fa9814c2d18db221a2dc552cf2a5047467d87a2590cbc9d64b8a0a340e545b55"
3674
+ "content": "948549d82e481f241e5babb6bdddd27bf7148fb8ed1c389b9f2f7ad035e4e56b"
3675
3675
  },
3676
3676
  {
3677
3677
  "alg": "SHA3-512",
3678
- "content": "5bc1627c34b14d8b70dec83d8d00a339f2c848f6e1f0d1a1dc155d3c5738816b79c8b23c66f2c1d99f315ead0d525ca07f72f89ffc77e8f7c1bc8f4c1138fae5"
3678
+ "content": "60812e78249f005792ec0fd84d488d150fd2e4e6e4afa572d4db1a879b38ea7368360d2a94f258f6669ae302587100071b065e42a52b671d9d8a7b6f25f69036"
3679
3679
  }
3680
3680
  ]
3681
3681
  },
@@ -3775,7 +3775,7 @@
3775
3775
  "hashes": [
3776
3776
  {
3777
3777
  "alg": "SHA-256",
3778
- "content": "fa9814c2d18db221a2dc552cf2a5047467d87a2590cbc9d64b8a0a340e545b55"
3778
+ "content": "948549d82e481f241e5babb6bdddd27bf7148fb8ed1c389b9f2f7ad035e4e56b"
3779
3779
  }
3780
3780
  ],
3781
3781
  "externalReferences": [
@@ -272,7 +272,13 @@ async function validateCve(cveId, localEntry) {
272
272
  const disputed = (fetched.cve_tags || []).some(t => /disputed/i.test(t)) ||
273
273
  /disputed/i.test(fetched.nvd_vuln_status || '');
274
274
  if (cveFoundInNvd && disputed) {
275
- pushDiscrepancy(discrepancies, 'cve_status', local?.status ?? null, 'disputed', 'high');
275
+ // `local` is the projected shape (cvss_*, cisa_kev*, epss_*) and never
276
+ // carries a status field — reading local?.status here always yielded null,
277
+ // so the local side of a disputed discrepancy reported nothing. Read the
278
+ // catalog's own status/cve_status off the RAW input so an entry that
279
+ // already records the dispute (or a stale "active" status) is surfaced.
280
+ const localCveStatus = localEntry?.cve_status ?? localEntry?.status ?? null;
281
+ pushDiscrepancy(discrepancies, 'cve_status', localCveStatus, 'disputed', 'high');
276
282
  }
277
283
 
278
284
  // --- Compare CVSS (only if NVD reachable & has data) ---
@@ -13,6 +13,10 @@
13
13
  * drift — at least one of those fields disagrees.
14
14
  * missing — Datatracker does not have this RFC / draft.
15
15
  * unreachable — network failed or the request timed out.
16
+ * skipped — the catalog key is not an IETF RFC/DRAFT (e.g. CSAF-2.0,
17
+ * ISO-29147, ISO-30111). Datatracker only tracks IETF
18
+ * documents, so these have no upstream to compare against —
19
+ * they are intentionally not validated here, NOT drift.
16
20
  *
17
21
  * Zero external dependencies. Node 24 stdlib (fetch + AbortController).
18
22
  *
@@ -107,15 +111,26 @@ function compareEntry(local, upstream) {
107
111
  return discrepancies;
108
112
  }
109
113
 
114
+ // Datatracker only tracks IETF RFCs and Internet-Drafts. A catalog key that is
115
+ // neither (CSAF-2.0, ISO-29147, ISO-30111, …) has no IETF upstream to compare
116
+ // against, so it is out of scope for this validator rather than a discrepancy.
117
+ function isIetfKey(id) {
118
+ return typeof id === 'string' && (id.startsWith('RFC-') || id.startsWith('DRAFT-'));
119
+ }
120
+
110
121
  async function validateRfc(id, entry) {
111
122
  let docName;
112
123
  if (id.startsWith('RFC-')) docName = rfcNumberFromKey(id);
113
124
  else if (id.startsWith('DRAFT-')) docName = draftSlugFromKey(id);
114
125
  else {
126
+ // Not an IETF document — there is nothing on Datatracker to diff against.
127
+ // Report a distinct, non-drift status with no discrepancies so callers
128
+ // don't surface a permanent false-positive "drift" for every ISO/CSAF
129
+ // reference the catalog carries.
115
130
  return {
116
131
  id,
117
- status: 'drift',
118
- discrepancies: [`unrecognized catalog key shape: ${id}`],
132
+ status: 'skipped',
133
+ discrepancies: [],
119
134
  local: entry,
120
135
  fetched: null,
121
136
  };
@@ -150,7 +165,10 @@ async function validateRfc(id, entry) {
150
165
  }
151
166
 
152
167
  async function validateAllRfcs(refs, { concurrency = 4 } = {}) {
153
- const ids = Object.keys(refs).filter(k => !k.startsWith('_'));
168
+ // Skip "_"-prefixed meta keys AND any non-IETF reference (ISO/CSAF/etc.):
169
+ // Datatracker has no record of those, so validating them only ever produced
170
+ // permanent false-positive "drift". They are simply out of scope here.
171
+ const ids = Object.keys(refs).filter(k => !k.startsWith('_') && isIetfKey(k));
154
172
  const results = [];
155
173
  for (let i = 0; i < ids.length; i += concurrency) {
156
174
  const batch = ids.slice(i, i + concurrency);
@@ -7,8 +7,17 @@
7
7
  *
8
8
  * - MITRE ATLAS: GitHub releases (mitre-atlas/atlas-data)
9
9
  * - MITRE ATT&CK: GitHub releases (mitre-attack/attack-stix-data)
10
- * - MITRE D3FEND: GitHub releases (mitre-d3fend/d3fend-data)
11
- * - MITRE CWE: GitHub releases (mitre/cwe)
10
+ *
11
+ * MITRE D3FEND and MITRE CWE do NOT publish tagged GitHub releases — D3FEND
12
+ * ships its ontology from d3fend/d3fend-ontology untagged, and CWE distributes
13
+ * XML from cwe.mitre.org. Their pin currency is tracked on the upstream-check
14
+ * path (lib/upstream-check.js) against those canonical mitre.org endpoints, not
15
+ * via the GitHub releases API. They remain enumerated here for completeness but
16
+ * are flagged `github_releases: false`, so the GitHub-release check is skipped
17
+ * for them and they are reported as `tracked_elsewhere` rather than emitting a
18
+ * spurious `unreachable` (a release API call for a repo with no releases always
19
+ * fails). This keeps the live path checking the same two GitHub-release repos
20
+ * the cache path (pinsDiffFromCache) checks.
12
21
  *
13
22
  * Each check returns:
14
23
  * { pin_name, local_version, latest_version, drift: bool, source_url, error? }
@@ -29,24 +38,35 @@ const PINS = [
29
38
  repo: "mitre-atlas/atlas-data",
30
39
  local_path_hint: "manifest.json — atlas_version",
31
40
  strip_v_prefix: true,
41
+ github_releases: true,
32
42
  },
33
43
  {
34
44
  pin_name: "attack_version",
35
45
  repo: "mitre-attack/attack-stix-data",
36
46
  local_path_hint: "manifest.json — attack_version",
37
47
  strip_v_prefix: true,
48
+ github_releases: true,
38
49
  },
39
50
  {
51
+ // D3FEND does not tag GitHub releases — currency is tracked via
52
+ // lib/upstream-check.js against the canonical mitre.org endpoint. Listed
53
+ // here for completeness; the GitHub-release check is skipped.
40
54
  pin_name: "d3fend_version",
41
55
  repo: "d3fend/d3fend-data",
42
56
  local_path_hint: "data/d3fend-catalog.json _meta.version",
43
57
  strip_v_prefix: true,
58
+ github_releases: false,
59
+ tracked_via: "lib/upstream-check.js (d3fend.mitre.org)",
44
60
  },
45
61
  {
62
+ // CWE distributes XML from cwe.mitre.org with no tagged GitHub releases —
63
+ // currency is tracked via lib/upstream-check.js. GitHub-release check skipped.
46
64
  pin_name: "cwe_version",
47
65
  repo: "mitre/cwe",
48
66
  local_path_hint: "data/cwe-catalog.json _meta.version",
49
67
  strip_v_prefix: true,
68
+ github_releases: false,
69
+ tracked_via: "lib/upstream-check.js (cwe.mitre.org)",
50
70
  },
51
71
  ];
52
72
 
@@ -113,6 +133,23 @@ async function checkAllPins(ctx) {
113
133
  const out = [];
114
134
  for (const pin of PINS) {
115
135
  const local = normalize(resolveLocalVersion(pin.pin_name, ctx), pin.strip_v_prefix);
136
+ // Pins whose upstream does not publish GitHub releases (D3FEND, CWE) have
137
+ // no release tag to compare against — calling the releases API would always
138
+ // fail and surface a spurious `unreachable`. Report them as tracked
139
+ // elsewhere (drift:null, no error) so the live path checks exactly the same
140
+ // GitHub-release repos as the cache path.
141
+ if (pin.github_releases === false) {
142
+ out.push({
143
+ pin_name: pin.pin_name,
144
+ local_version: local,
145
+ latest_version: null,
146
+ drift: null,
147
+ tracked_elsewhere: true,
148
+ tracked_via: pin.tracked_via || null,
149
+ local_path_hint: pin.local_path_hint,
150
+ });
151
+ continue;
152
+ }
116
153
  const release = await latestGithubRelease(pin.repo);
117
154
  if (release.error) {
118
155
  out.push({
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "worker-pool.js": {
36
36
  "vendored_path": "vendor/blamejs/worker-pool.js",
37
- "vendored_sha256": "fa9814c2d18db221a2dc552cf2a5047467d87a2590cbc9d64b8a0a340e545b55",
37
+ "vendored_sha256": "948549d82e481f241e5babb6bdddd27bf7148fb8ed1c389b9f2f7ad035e4e56b",
38
38
  "upstream_path": "lib/worker-pool.js",
39
39
  "upstream_sha256_at_pin": "262f99e9cc3d4a8f4eba9ad3e28401e8a1f47f78040afa63c9b17eb998437171",
40
40
  "stripped": [
@@ -50,7 +50,8 @@
50
50
  "worker recycle on uncaught error / timeout / exit"
51
51
  ],
52
52
  "exceptd_deltas": [
53
- "scriptPath validator rejects Windows UNC + extended-path prefixes (\\\\?\\, \\\\.\\, \\\\<server>\\) — defense-in-depth against worker-spawn from network shares on win32 platforms"
53
+ "scriptPath validator rejects Windows UNC + extended-path prefixes (\\\\?\\, \\\\.\\, \\\\<server>\\) — defense-in-depth against worker-spawn from network shares on win32 platforms",
54
+ "_onWorkerExit respawn branch: call _maybeResolveDrain() after _drainQueue() so drain() settles when a worker recycles with an empty queue (the no-respawn branch already did; the respawn branch could hang pending drain waiters)."
54
55
  ]
55
56
  },
56
57
  "codepoint-class.js": {
@@ -322,6 +322,12 @@ function create(scriptPath, opts) {
322
322
  if (!terminated && workerSlots.length < size) {
323
323
  try { _spawnWorker(); } catch (_e) { /* already audited */ }
324
324
  _drainQueue();
325
+ // exceptd delta: also settle pending drain() waiters after a respawn.
326
+ // _drainQueue() only schedules queued tasks; if the queue is already
327
+ // empty (a worker recycled with nothing left to do) the pool is now idle
328
+ // and a caller awaiting drain() must be resolved, exactly as the
329
+ // no-respawn branch below does — otherwise drain() hangs forever.
330
+ _maybeResolveDrain();
325
331
  } else {
326
332
  _maybeResolveDrain();
327
333
  }