@blamejs/exceptd-skills 0.15.53 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.16.0 — 2026-05-31
4
+
5
+ Supply-chain playbook gains reachability-aware triage and publisher-identity detection. A CVE-reachability demoter flags a matched-CVE dependency whose vulnerable module is never imported on a path from your own code, supporting exploit-priority triage of the runtime-vs-build-only distinction — it over-approximates toward reachable (any dynamic / plugin / reflective load counts as reachable) so it only demotes a match when reachability is explicitly attested, and the CVE matcher itself is unchanged. A publisher-identity-change detector flags an account-takeover precursor: a dependency whose publishing account, maintainer set, or provenance identity changed across an update while its capability surface stayed identical — the silent ownership-handoff release that precedes a payload, which the capability-creep detector cannot see.
6
+
7
+ Two compliance-theater fingerprints are added — a declared license policy that no build gate actually enforces against the resolved tree, and a declared publisher-trust control (maintainer vetting / MFA-on-publish / registry cooldown) that no intake gate blocks on.
8
+
3
9
  ## 0.15.53 — 2026-05-30
4
10
 
5
11
  Catalog: package-class entries can now carry an optional package-confidence signal — a 0–100 supply-chain trustworthiness score with inverse polarity to RWEP (high = trustworthy provenance, low = behaves like malware), derived from maintainer, code-quality, behavioral, and provenance sub-signals. It is surfaced alongside RWEP and never feeds or replaces it: RWEP answers "how urgently must I act on this known vulnerability," while package-confidence answers "how much do I trust this package's provenance." Populated on the supply-chain malware entries (the MOIKA dependency-confusion campaign, TrapDoor, Shai-Hulud, the node-ipc credential-stealer, and the node-ipc protestware incident).
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schema_version": "1.1.0",
3
- "generated_at": "2026-05-31T05:03:02.966Z",
3
+ "generated_at": "2026-05-31T10:26:41.259Z",
4
4
  "generator": "scripts/build-indexes.js",
5
5
  "source_count": 54,
6
6
  "source_hashes": {
7
- "manifest.json": "4359446f2ab6bfb0484b716ca15b81755ca4075d941b0c8caa5d2d4ad1c4f0a7",
7
+ "manifest.json": "b2470edc747a7cb7f4d2d31e94bccead4ac79a5b605ea67ef12757c9353c186d",
8
8
  "data/atlas-ttps.json": "878b4a08bb73c8d20396d85cf433a88f2bc5e7a8cbf7f6ab773ce7ede0a11251",
9
9
  "data/attack-techniques.json": "318bf8e9c5aee1d0a4a1dc37c4b211f2fbc937bf332a401a22483cc7d0547252",
10
10
  "data/cve-catalog.json": "1aac7e75eae24ece2ef09d1c63977bdd7a1f81a9f11609ebb966109be316426c",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_meta": {
3
3
  "id": "sbom",
4
- "version": "1.3.1",
4
+ "version": "1.4.0",
5
5
  "last_threat_review": "2026-05-13",
6
6
  "threat_currency_score": 96,
7
7
  "changelog": [
@@ -58,6 +58,11 @@
58
58
  "version": "1.3.1",
59
59
  "date": "2026-05-30",
60
60
  "summary": "Add three supply-chain detection-depth indicators: typosquat/homoglyph package-name detection (reusing the vendored codepoint-class confusable tables), a static content red-flag screen (obfuscation / high-entropy / trivial-package / eval+dynamic-require, T1027), and a dependency-confusion resolution-source check (internal scope served by the public registry / inflated-version squat, correlating to MAL-2026-MOIKA-DEPCONFUSION) — each with a paired look artifact and false-positive profile."
61
+ },
62
+ {
63
+ "version": "1.4.0",
64
+ "date": "2026-05-31",
65
+ "summary": "Add a CVE-reachability demoter (dependency-cve-unreachable: flags a matched-CVE dependency whose vulnerable module is not imported on a first-party path, over-approximating to reachable so it only demotes with an explicit reachability attestation; the package-matches-catalogued-cve matcher is unchanged), a publisher-identity-change detector (account-takeover/ownership-handoff precursor that fires on a publisher/provenance-identity change absent a capability change), and two compliance-theater fingerprints (license-policy and publisher-trust attested-but-not-enforced). Theater-fingerprint count 6 -> 8."
61
66
  }
62
67
  ],
63
68
  "owner": "@blamejs/supply-chain",
@@ -321,6 +326,26 @@
321
326
  "openssf-model-signing",
322
327
  "atlas-aml-t0018"
323
328
  ]
329
+ },
330
+ {
331
+ "pattern_id": "license-policy-attested-but-not-enforced",
332
+ "claim": "We have an approved open-source license policy — copyleft / non-permissive dependencies are governed.",
333
+ "fast_detection_test": "Locate the declared license policy (allowlist/denylist in a LICENSE-POLICY doc, OSS-governance config, or contractual SBOM clause). Then walk the resolved dependency tree (license field per node in package-lock.json/yarn.lock/pnpm-lock.yaml, PyPI METADATA, Cargo metadata, go-licenses) and confirm a build-time gate actually fails the build on a policy-violating, license-change-across-version, or missing/ambiguous license. Theater if the policy exists as a document but (a) no CI/build step enforces it (no license-check / dependency-review / scancode / FOSSA gate wired into the pipeline that can BLOCK a merge or build), OR (b) the produced SBOM carries no per-component license field to enforce against, OR (c) dependencies resolve with missing/UNKNOWN license strings that the gate does not reject. Policy-as-attestation without a blocking gate against the live resolved tree = paper compliance.",
334
+ "implicated_controls": [
335
+ "eu-cra-art13",
336
+ "nist-800-218-SSDF-PS-3",
337
+ "cyclonedx-1-6"
338
+ ]
339
+ },
340
+ {
341
+ "pattern_id": "publisher-trust-attested-but-not-enforced",
342
+ "claim": "We vet upstream package publishers — maintainer identity, account MFA, and publish recency are part of our supply-chain controls.",
343
+ "fast_detection_test": "Locate the declared publisher-trust control (a maintainer-vetting policy, an MFA-on-publish requirement, a registry-cooldown / minimumReleaseAge setting, an abandoned/unmaintained-dependency review). Then confirm a build-time or intake gate actually ENFORCES it against the live resolved tree: does any pipeline step BLOCK on a dependency whose publishing account changed (ownership handoff / new-or-nonexistent author), whose maintainer lacks 2FA, that was published inside the cooldown window, or that is deprecated/unmaintained? Theater if the policy exists as a document but (a) no .npmrc before= / minimumReleaseAge cooldown is configured, (b) no dependency-review / publisher-identity gate can fail a build on an ownership change, or (c) deprecated/unmaintained dependencies are not surfaced for review. Publisher-trust as attestation without a blocking intake gate = paper compliance; the identity discontinuity that precedes account-takeover payloads (PyPI Revival Hijack class) passes an unenforced policy untouched.",
344
+ "implicated_controls": [
345
+ "nist-800-218-SSDF",
346
+ "eu-cra-art13",
347
+ "nist-800-53-SA-12"
348
+ ]
324
349
  }
325
350
  ],
326
351
  "framework_context": {
@@ -442,7 +467,7 @@
442
467
  },
443
468
  {
444
469
  "skill": "compliance-theater",
445
- "purpose": "Run the six theater fingerprints in govern.theater_fingerprints; emit verdict per pattern.",
470
+ "purpose": "Run the eight theater fingerprints in govern.theater_fingerprints; emit verdict per pattern.",
446
471
  "required": true
447
472
  },
448
473
  {
@@ -645,6 +670,13 @@
645
670
  "source": "Read scope-to-registry resolution config: .npmrc + $HOME/.npmrc (@scope:registry= lines, registry=, always-auth), .yarnrc.yml (npmScopes), pip.conf / pip.ini (index-url, extra-index-url), and any private-registry manifest listing internal @scopes / package names. Cross with repo-lockfiles resolved URLs to determine which registry actually served each internal-scope name.",
646
671
  "description": "Resolution-source configuration — distinguishes an internal-namespace package correctly pinned to a private registry (safe) from one resolvable off the public registry (dependency-confusion exposed). Without it the indicator can only see inflated-version heuristics; with it the resolution-source check becomes high-confidence.",
647
672
  "required": false
673
+ },
674
+ {
675
+ "id": "cve-reachability-surface",
676
+ "type": "config_file",
677
+ "source": "For each dependency that matched a catalogued CVE (the package-matches-catalogued-cve hit set), statically resolve whether the catalogued-vulnerable module is imported on a first-party call path: grep the repo's own source for import/require of the matched package's vulnerable module/submodule/symbol; build the first-party import graph through direct dependencies; flag uncertainty edges (dynamic import, plugin discovery, native/FFI). Records reachable | unreachable | uncertain per matched CVE; uncertainty is recorded as reachable.",
678
+ "description": "CVE reachability surface — the static import-graph evidence the dependency-cve-unreachable demoter reads. Over-approximates: any uncertainty is recorded as reachable so the demoter cannot fire on it. Optional sweep; absence leaves every matched CVE treated as reachable (the matcher stands unchanged).",
679
+ "required": false
648
680
  }
649
681
  ],
650
682
  "collection_scope": {
@@ -924,6 +956,39 @@
924
956
  "Distinguish an inflated version that reflects a real (if unusual) upstream release from a squat. Check the package real release history on the AUTHORITATIVE registry for this scope: a genuine 99.x maintained release is not a squat. Demote when the inflated version is the legitimate publisher actual latest on the correct registry.",
925
957
  "Confirm the resolved artifact actually came from the public registry for this run (lockfile resolved/resolution URL host = registry.npmjs.org / files.pythonhosted.org), not the private mirror that merely proxies public names. A private proxy serving a vetted copy under the internal scope is not confusion-exposed. Demote when the resolution host is the internal/proxy registry."
926
958
  ]
959
+ },
960
+ {
961
+ "id": "dependency-cve-unreachable",
962
+ "type": "behavioral_signal",
963
+ "value": "For a dependency that already fired package-matches-catalogued-cve, statically determine whether the catalogued-vulnerable module is reachable from first-party code: within the cve-reachability-surface artifact, the matched package's vulnerable entry-point (the import name / submodule / exported symbol associated with the catalogued CVE) is NOT imported/required on any static call path originating in the repo's own source. FIRES as an INFORMATIONAL demotion candidate — the matched CVE is present in the dependency tree but no first-party import reaches the vulnerable module. OVER-APPROXIMATES toward reachable: any uncertainty (dynamic import, plugin loader, reflective require, unresolved alias, native/FFI edge) is treated as REACHABLE and this indicator does NOT fire. Surfaces ALONGSIDE package-matches-catalogued-cve; never replaces or suppresses it.",
964
+ "description": "Reachability demoter — flags a matched-CVE dependency whose vulnerable module has no static import/require path from first-party source, to support RWEP triage (the runtime-presence-vs-build-only distinction the matcher does not compute). Low-confidence + non-deterministic, so a firing hit never reaches the 'detected' classification branch and cannot mute a real match; the package-matches-catalogued-cve matcher remains high-confidence on tree presence and is unchanged. Behavior note: when this fires unattested, the false-positive gate downgrades it to inconclusive, so a tree whose ONLY signal is an unreachable matched-CVE reports inconclusive rather than not_detected — the intended, correctly-surfaced reachability question.",
965
+ "confidence": "low",
966
+ "deterministic": false,
967
+ "attack_ref": "T1195.002",
968
+ "atlas_ref": "AML.T0010",
969
+ "false_positive_checks_required": [
970
+ "Over-approximate uncertain to reachable: any dynamic-import / dynamic-require / reflective or computed module load (require(variable), import(expr), importlib.import_module, __import__, entry-point/plugin discovery, dependency-injection wiring, monkeypatch) anywhere in scope means the vulnerable module reachability cannot be statically excluded — do NOT fire; treat as reachable and let the unchanged matcher stand. This is the load-bearing check: it makes the indicator demote-only-with-attestation, never mute-by-default.",
971
+ "Plugin-loader / framework auto-registration reachability: confirm the matched package is not loaded implicitly by a framework's convention-based discovery (webpack/vite plugin arrays, pytest entry-points, setuptools console_scripts, Spring/DI auto-wiring, eager package __init__ side effects). Do NOT fire when implicit loading is possible.",
972
+ "Build/dev-only carve-out: a vulnerable module reachable ONLY from devDependencies / build tooling / test harness (not bundled into and not loaded by the shipped runtime artifact) is lower-priority, but confirm it is build/dev-only by checking the dependency manifest section AND that no runtime code path imports it. Record build-dev-only=true rather than asserting full unreachability when the only reachers are build/test files.",
973
+ "Transitive-only relocation: when the matched package is transitive-only, confirm the first-party graph does not reach it through an intermediate direct dependency that re-exports or proxies the vulnerable symbol. Walk the effective import graph through direct deps, not just first-party files; do NOT fire when an in-path direct dependency reaches the vulnerable module."
974
+ ]
975
+ },
976
+ {
977
+ "id": "dependency-publisher-identity-change-without-capability-change",
978
+ "type": "behavioral_signal",
979
+ "value": "For any dependency present in repo-lockfiles / npm-global-packages / container-image-layers whose resolved version advanced (or whose content changed under an unchanged version string) since the last recorded inventory, compare PUBLISHER IDENTITY across the two points WITHOUT requiring any capability-surface change. PUBLISHER IDENTITY = (a) the npm/PyPI publishing account(s) / maintainer set on the package metadata, (b) the provenance/signing identity (npm --provenance OIDC subject, Sigstore certificate identity, GPG/maintainer key fingerprint), (c) the publish-source repository / CI identity in the provenance statement. FIRES when ANY of: the maintainer set gained a new or previously-unseen publisher, the sole prior maintainer was replaced (ownership handoff), the publishing account is newly-created / has no prior publish history on this package (new-author), the named maintainer account no longer resolves (non-existent-author / deleted-then-reclaimed handle), or the provenance/signing identity changed — AND the capability surface is UNCHANGED across the bump (so dependency-capability-creep-across-version-bump did not fire). The defining condition is identity discontinuity ABSENT a behavior delta: a silent ownership handoff that ships no new capability yet — the trust-establishment release that precedes a payload release (PyPI Revival Hijack / abandoned-package re-registration / account-takeover staging).",
980
+ "description": "Publisher-identity-change detector — flags a same-name dependency whose publishing account, maintainer set, or provenance/signing identity changed across an update while its capability surface stayed identical. Catches the account-takeover / ownership-handoff PRECURSOR that capability-creep cannot see: capability-creep only fires on a behavior delta, so a takeover release that ships no new capability (the trust-staging version before the payload version) is invisible to it. Pre-disclosure, identity-axis signal complementary to the capability, name-similarity, and resolution-source axes.",
981
+ "confidence": "medium",
982
+ "deterministic": false,
983
+ "attack_ref": "T1195.001",
984
+ "atlas_ref": "AML.T0010",
985
+ "false_positive_checks_required": [
986
+ "Confirm the identity change is not a documented, legitimate maintainer transition: many healthy projects hand off to a new maintainer, add a co-maintainer, or migrate the org scope. Benign when the new publisher is announced in the project release notes / GOVERNANCE / README / a pinned issue AND the handoff is corroborated by the project own VCS (the new identity is an existing committer with merge rights, not an outside account). Demote to inconclusive and record the citation when the transition is publicly documented and VCS-corroborated.",
987
+ "Distinguish an identity-STRING change from an identity-PRINCIPAL change: npm provenance OIDC subjects, CI runner identities, and signing-key rotations change routinely on legitimate infra migrations. Demote when the underlying principal is unchanged — same GitHub org/repo as the provenance source, key rotation cross-signed by the prior key, or 2FA-enforced account simply re-issuing a token. Elevate only when the principal itself (the human/org behind the publish) changed.",
988
+ "Rule out first-publish / metadata-backfill noise: a package that had no prior recorded publisher in scope (first time this dependency entered the inventory) has nothing to diff against. Require a recorded prior publisher identity for this exact package before firing; demote to inconclusive when the prior-inventory identity is simply missing.",
989
+ "Confirm the new release publish age and cadence: a documented handoff that then publishes on the project normal cadence (not a sub-72h fresh publish, npm before=/minimumReleaseAge cooldown satisfied) is far lower risk. Demote normal-cadence post-handoff releases; ELEVATE when the identity change co-occurs with an off-cadence / sub-cooldown publish, a deleted-then-reclaimed maintainer handle, or a publishing account with zero prior history on any package.",
990
+ "Verify the package is actually a trust-bearing dependency in scope, not a dev/test-only artifact whose maintainer change cannot reach a runtime or build-output path. Confirm runtime or build-pipeline reachability before elevating; demote dev-only to low."
991
+ ]
927
992
  }
928
993
  ],
929
994
  "false_positive_profile": [
@@ -966,6 +1031,16 @@
966
1031
  "indicator_id": "dependency-confusion-internal-scope-public-resolution",
967
1032
  "benign_pattern": "An org legitimately consumes a public scoped package (@types/*, @babel/*, @aws-sdk/*) that superficially resembles an internal naming convention; OR an internal scope is already correctly pinned to the private registry so the public squat cannot win resolution.",
968
1033
  "distinguishing_test": "Resolve each flagged @scope against (1) the org private-registry internal-scope list and (2) the .npmrc/.yarnrc/pip index scope-to-registry mapping. Dependency-confusion-exposed only when ALL hold: the scope is an internal namespace, a same-name private package exists, the scope is NOT pinned to the private registry, and the lockfile resolved host is the public registry. If any fails, downgrade to medium/informational."
1034
+ },
1035
+ {
1036
+ "indicator_id": "dependency-cve-unreachable",
1037
+ "benign_pattern": "A matched CVE whose vulnerable module IS reached — directly imported, loaded by a framework plugin convention, pulled in by a direct dependency that re-exports it, or reachable through a dynamic/reflective import the static walk cannot exclude.",
1038
+ "distinguishing_test": "Likely-unreachable (demote the match in RWEP triage) ONLY when ALL hold: a cve-reachability-surface walk ran, no first-party static import path reaches the vulnerable module, no dynamic/plugin/reflective edge introduces uncertainty, and no in-path direct dependency re-exports the vulnerable symbol. Any uncertainty -> reachable -> do not fire. Reachable or uncertain demotes this indicator to a miss and leaves package-matches-catalogued-cve standing at high confidence."
1039
+ },
1040
+ {
1041
+ "indicator_id": "dependency-publisher-identity-change-without-capability-change",
1042
+ "benign_pattern": "A healthy open-source project legitimately transitions maintainers, adds a co-maintainer, migrates its org scope, or rotates its signing key / CI provenance identity on a scheduled infra change. The new publisher is an existing committer, the handoff is announced, and releases continue on normal cadence with no new capability and no off-cadence fresh publish.",
1043
+ "distinguishing_test": "Takeover-precursor-leaning only when ALL hold: a recorded prior publisher identity existed for this exact package, the new publishing principal (not merely an OIDC-subject/CI string) differs, the transition is NOT documented in the project release notes/governance and NOT corroborated by the VCS committer history, and the identity change co-occurs with at least one of {off-cadence or sub-cooldown fresh publish, a deleted-then-reclaimed maintainer handle, a zero-history publishing account, an abandoned/revived package}. A documented, VCS-corroborated, normal-cadence handoff with no capability change demotes to informational."
969
1044
  }
970
1045
  ],
971
1046
  "minimum_signal": {
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exceptd-security",
3
- "version": "0.15.53",
3
+ "version": "0.16.0",
4
4
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation",
5
5
  "homepage": "https://exceptd.com",
6
6
  "license": "Apache-2.0",
@@ -53,7 +53,7 @@
53
53
  ],
54
54
  "last_threat_review": "2026-05-15",
55
55
  "signature": "0H+JfyUVmo/pVFEi5rLENATHjlukPVUqnOWmNPEH77wm8svKGK0aNJ46k6QU5GdHb8c9X9pVJKiuhON6AxDjDw==",
56
- "signed_at": "2026-05-31T04:48:21.114Z",
56
+ "signed_at": "2026-05-31T10:22:24.320Z",
57
57
  "cwe_refs": [
58
58
  "CWE-125",
59
59
  "CWE-362",
@@ -123,7 +123,7 @@
123
123
  ],
124
124
  "last_threat_review": "2026-05-17",
125
125
  "signature": "PHwHEsoy7ctBYOtlAfAdCDVfsq2Bpk9+qESSF+5dVkDcez2zp2v9Ihsv2vqMEs3QxMndyQ+t7NVezyt5VamSCg==",
126
- "signed_at": "2026-05-31T04:48:21.116Z",
126
+ "signed_at": "2026-05-31T10:22:24.321Z",
127
127
  "cwe_refs": [
128
128
  "CWE-1039",
129
129
  "CWE-1426",
@@ -196,7 +196,7 @@
196
196
  ],
197
197
  "last_threat_review": "2026-05-17",
198
198
  "signature": "dD4p7lcRtMyfITOncqLkpOeMy6x6gM0V7UlWHgLEdcxqODb1s75ar1cBtTqDWPbMv6ZAzVo2HJLDK1hVjjU2AQ==",
199
- "signed_at": "2026-05-31T04:48:21.116Z",
199
+ "signed_at": "2026-05-31T10:22:24.322Z",
200
200
  "cwe_refs": [
201
201
  "CWE-22",
202
202
  "CWE-345",
@@ -248,7 +248,7 @@
248
248
  "framework_gaps": [],
249
249
  "last_threat_review": "2026-05-22",
250
250
  "signature": "wsw8Mlr/gyw6S7Iaao9BVHdU5LFPWl8WVymW17Lkq9J1Mui0+fCrTg6UbrsaeE3s7EW3TVgzBuK+8EFd1+H5AA==",
251
- "signed_at": "2026-05-31T04:48:21.117Z"
251
+ "signed_at": "2026-05-31T10:22:24.322Z"
252
252
  },
253
253
  {
254
254
  "name": "compliance-theater",
@@ -279,7 +279,7 @@
279
279
  ],
280
280
  "last_threat_review": "2026-05-22",
281
281
  "signature": "uVTc1QRKOKcIVDajBz+q2egjiEAyOQaDNsvVI2ghj5FD0VvquoUBBE5Naca2FkaZa790EHWCsVZ4hhdaSQs2DQ==",
282
- "signed_at": "2026-05-31T04:48:21.117Z"
282
+ "signed_at": "2026-05-31T10:22:24.323Z"
283
283
  },
284
284
  {
285
285
  "name": "exploit-scoring",
@@ -308,7 +308,7 @@
308
308
  ],
309
309
  "last_threat_review": "2026-05-18",
310
310
  "signature": "QuNpwnZ6HkCEAXTPC/jLbXSmMIc1JnBczqZAAIZmZj8OcEMVnw9mJYAnU3CxaEI7rvbcMkN2uS5E8yUCm/NiAg==",
311
- "signed_at": "2026-05-31T04:48:21.118Z"
311
+ "signed_at": "2026-05-31T10:22:24.323Z"
312
312
  },
313
313
  {
314
314
  "name": "rag-pipeline-security",
@@ -345,7 +345,7 @@
345
345
  ],
346
346
  "last_threat_review": "2026-05-22",
347
347
  "signature": "5rw2i39SxY2WphBbDLEP28wufnbPPE9+PWt54hmaGdwHXr9RLiVt5liL/5xp14sehlVgFsfpR/bg9vy//xV0DA==",
348
- "signed_at": "2026-05-31T04:48:21.118Z",
348
+ "signed_at": "2026-05-31T10:22:24.323Z",
349
349
  "cwe_refs": [
350
350
  "CWE-1395",
351
351
  "CWE-1426"
@@ -405,7 +405,7 @@
405
405
  ],
406
406
  "last_threat_review": "2026-05-17",
407
407
  "signature": "Vqu49nzntFWjn9A/QeJzm7q/2xk/cZJ6HFQKtiNi1zgcxzXKm+MlFdkaLgYHWj5/9HJohxyIDyBJQTvcJ20eDQ==",
408
- "signed_at": "2026-05-31T04:48:21.118Z",
408
+ "signed_at": "2026-05-31T10:22:24.324Z",
409
409
  "d3fend_refs": [
410
410
  "D3-CA",
411
411
  "D3-CSPP",
@@ -440,7 +440,7 @@
440
440
  "framework_gaps": [],
441
441
  "last_threat_review": "2026-05-22",
442
442
  "signature": "W87VdyVdAxAdcRI6P/8StaV+MS8ZSPKM9HOCK9n/bBO6BM3ZSE3uImVoyJVpAXQlUpUGN+A3lCJZXv64LuxwDg==",
443
- "signed_at": "2026-05-31T04:48:21.119Z",
443
+ "signed_at": "2026-05-31T10:22:24.324Z",
444
444
  "cwe_refs": [
445
445
  "CWE-1188"
446
446
  ],
@@ -474,7 +474,7 @@
474
474
  "framework_gaps": [],
475
475
  "last_threat_review": "2026-05-18",
476
476
  "signature": "wdVX+edeNekpaIldqkhvtraV6DquLvIsKAjuZVwPQYn3l1vS99HXuFxmNsD7UeMlO3qgC6Dysfsto9EnuH0RBg==",
477
- "signed_at": "2026-05-31T04:48:21.119Z",
477
+ "signed_at": "2026-05-31T10:22:24.324Z",
478
478
  "forward_watch": [
479
479
  "New AI attack classes as ATLAS v6 publishes",
480
480
  "Post-quantum adversary capability timeline",
@@ -513,7 +513,7 @@
513
513
  "framework_gaps": [],
514
514
  "last_threat_review": "2026-05-01",
515
515
  "signature": "b5miTiY0cnxETd2btxorfZBdJKt/fLnQx20sGYUb9zEqGqtm0LMLpghkW68j4/9k48KNyuGMtNWiKTSnodUGBw==",
516
- "signed_at": "2026-05-31T04:48:21.119Z"
516
+ "signed_at": "2026-05-31T10:22:24.325Z"
517
517
  },
518
518
  {
519
519
  "name": "zeroday-gap-learn",
@@ -540,7 +540,7 @@
540
540
  "framework_gaps": [],
541
541
  "last_threat_review": "2026-05-18",
542
542
  "signature": "xbkip0AQtWQKAu+O6r/gYECNjezS6O9k9xkkJsYbMlr+j8CdqH3p5/0l+GZmDidImRC/DL07GCnKrk9HRR/yDQ==",
543
- "signed_at": "2026-05-31T04:48:21.120Z",
543
+ "signed_at": "2026-05-31T10:22:24.325Z",
544
544
  "forward_watch": [
545
545
  "New CISA KEV entries",
546
546
  "New ATLAS TTP additions in each ATLAS release",
@@ -604,7 +604,7 @@
604
604
  ],
605
605
  "last_threat_review": "2026-05-22",
606
606
  "signature": "li2NnC1oeVIr22ComP5QbcQoh5xpWITuaKpza1s2SsUkH6kGnnt4wFfFAzaC1ORmH9x2cr8hN8kaNANG/eIMBQ==",
607
- "signed_at": "2026-05-31T04:48:21.120Z",
607
+ "signed_at": "2026-05-31T10:22:24.325Z",
608
608
  "cwe_refs": [
609
609
  "CWE-327"
610
610
  ],
@@ -652,7 +652,7 @@
652
652
  ],
653
653
  "last_threat_review": "2026-05-22",
654
654
  "signature": "sZHlJ7ueHPdtzVbR+yXQ5+wKgNyjWsa1LKVg9aWTmg/Onl71DvEILMyJiLpPQjseT56Mnr1DMYJE8xOGlffBAw==",
655
- "signed_at": "2026-05-31T04:48:21.121Z"
655
+ "signed_at": "2026-05-31T10:22:24.326Z"
656
656
  },
657
657
  {
658
658
  "name": "security-maturity-tiers",
@@ -689,7 +689,7 @@
689
689
  ],
690
690
  "last_threat_review": "2026-05-01",
691
691
  "signature": "3AwFnEJu6DukPPNep/3SnuPWEuV060fJEQIwThFm7ujmdbFk0/Ii0XwGv1dkvbbK7ymMdOQpp35l4aLONAucDA==",
692
- "signed_at": "2026-05-31T04:48:21.121Z",
692
+ "signed_at": "2026-05-31T10:22:24.326Z",
693
693
  "cwe_refs": [
694
694
  "CWE-1188"
695
695
  ]
@@ -724,7 +724,7 @@
724
724
  "framework_gaps": [],
725
725
  "last_threat_review": "2026-05-11",
726
726
  "signature": "iJWevUBurLvt2v8X+Ch2eHmZkPWpKeAtIpxTIP4MwbUHyco3igDeBywJCyaR2vURYRx8LkzzIMM8DxQM4LAXBQ==",
727
- "signed_at": "2026-05-31T04:48:21.121Z"
727
+ "signed_at": "2026-05-31T10:22:24.327Z"
728
728
  },
729
729
  {
730
730
  "name": "attack-surface-pentest",
@@ -796,7 +796,7 @@
796
796
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — Microsoft Edge 4-bug sandbox escape by Orange Tsai (DEVCORE); forward-watch only (browser sandbox, out of current playbook scope); track Microsoft Edge security advisory and KEV add"
797
797
  ],
798
798
  "signature": "DDMzI+4En4aIkwBUCGW6nj1eEkCyLqHGn2LJ2rnwWfYatjPI1U5HrTZNAN/n9JqWtAzk8F3rmsKehaaz5iNWDA==",
799
- "signed_at": "2026-05-31T04:48:21.121Z"
799
+ "signed_at": "2026-05-31T10:22:24.327Z"
800
800
  },
801
801
  {
802
802
  "name": "fuzz-testing-strategy",
@@ -856,7 +856,7 @@
856
856
  "OSS-Fuzz-Gen / AI-assisted harness generation becoming the default expectation for OSS maintainers"
857
857
  ],
858
858
  "signature": "dJB0iAstIUbyny+udl3OIkaLScEmqS97LNP73yQ8mxt+0bcqxZjpfXaWLzLuIQblGYvUvz75/H6rO2EJuGd4AQ==",
859
- "signed_at": "2026-05-31T04:48:21.122Z"
859
+ "signed_at": "2026-05-31T10:22:24.327Z"
860
860
  },
861
861
  {
862
862
  "name": "dlp-gap-analysis",
@@ -931,7 +931,7 @@
931
931
  "Quebec Law 25, India DPDPA, KSA PDPL enforcement actions naming AI-tool prompt data as in-scope personal information"
932
932
  ],
933
933
  "signature": "KEAoMji3VcPX/ZXXqVe6OStxSkTssfY9fIRPyPcDYqh50GzOFQ6koNOTBVAiWOvjDjQ38g12xun5srbqgmvRAw==",
934
- "signed_at": "2026-05-31T04:48:21.122Z"
934
+ "signed_at": "2026-05-31T10:22:24.328Z"
935
935
  },
936
936
  {
937
937
  "name": "supply-chain-integrity",
@@ -1010,7 +1010,7 @@
1010
1010
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — NVIDIA Megatron Bridge path traversal by haehae; AI training-stack file-system trust boundary; track patch and SBOM-attestation impact"
1011
1011
  ],
1012
1012
  "signature": "zuW8T0EMbVV83GsUP/W20Use2gBTicBW021T0sY7qsRY/U5qsPWkXYIWp3SdiKLTIKqTEd/0T7LQebjIs2QKCA==",
1013
- "signed_at": "2026-05-31T04:48:21.123Z"
1013
+ "signed_at": "2026-05-31T10:22:24.328Z"
1014
1014
  },
1015
1015
  {
1016
1016
  "name": "defensive-countermeasure-mapping",
@@ -1067,7 +1067,7 @@
1067
1067
  ],
1068
1068
  "last_threat_review": "2026-05-11",
1069
1069
  "signature": "Qe0Hg9BrX3Zm5pj0n2z/oiHbAXWdA2Dq461zc4izkkUjEX2CZ02rODjCI2ELbrVOU3GC7edxqAxA+5U/ObnHDQ==",
1070
- "signed_at": "2026-05-31T04:48:21.123Z"
1070
+ "signed_at": "2026-05-31T10:22:24.328Z"
1071
1071
  },
1072
1072
  {
1073
1073
  "name": "identity-assurance",
@@ -1134,7 +1134,7 @@
1134
1134
  "d3fend_refs": [],
1135
1135
  "last_threat_review": "2026-05-11",
1136
1136
  "signature": "UV3458QXSkEpenzrOmdlTTfPHUD4hNyKMDHoeZDq/kiFb4mAG0ghQGTTgI9Ru8cJbSmYM1++m9N5TFIJ6JJPBg==",
1137
- "signed_at": "2026-05-31T04:48:21.123Z"
1137
+ "signed_at": "2026-05-31T10:22:24.329Z"
1138
1138
  },
1139
1139
  {
1140
1140
  "name": "ot-ics-security",
@@ -1190,7 +1190,7 @@
1190
1190
  "d3fend_refs": [],
1191
1191
  "last_threat_review": "2026-05-11",
1192
1192
  "signature": "kIVzsPsJ72PzzWQwTuvjoHHoVEDCday5I52M9ohjB3/Ak+zlA8oyWLO/BKb/XuYY4fOApjfxTErSWv5uHQ2zDw==",
1193
- "signed_at": "2026-05-31T04:48:21.123Z"
1193
+ "signed_at": "2026-05-31T10:22:24.329Z"
1194
1194
  },
1195
1195
  {
1196
1196
  "name": "coordinated-vuln-disclosure",
@@ -1242,7 +1242,7 @@
1242
1242
  "NYDFS 23 NYCRR 500 amendments potentially adding explicit CVD program requirements"
1243
1243
  ],
1244
1244
  "signature": "bWr27Q1uN9xCe1ib4QulszBa7YIDNkGqo72k5nm2cK98LyPblicD+sO9MnGckAyB22BTN/cIB+FwFMcI5IxvBw==",
1245
- "signed_at": "2026-05-31T04:48:21.124Z"
1245
+ "signed_at": "2026-05-31T10:22:24.329Z"
1246
1246
  },
1247
1247
  {
1248
1248
  "name": "threat-modeling-methodology",
@@ -1292,7 +1292,7 @@
1292
1292
  "PASTA v2 updates incorporating AI/ML application threats"
1293
1293
  ],
1294
1294
  "signature": "Q854yzLqXdOazc6EyQbZzgAlivuq2vGFDVUCrxSldSvx/HX/ZM/uzmJyP7aBG7ZsMHxj6Lmj/H82YQoo1e+NCQ==",
1295
- "signed_at": "2026-05-31T04:48:21.124Z"
1295
+ "signed_at": "2026-05-31T10:22:24.330Z"
1296
1296
  },
1297
1297
  {
1298
1298
  "name": "webapp-security",
@@ -1366,7 +1366,7 @@
1366
1366
  "d3fend_refs": [],
1367
1367
  "last_threat_review": "2026-05-11",
1368
1368
  "signature": "4ccahkJpGJZtwD7EBpnGcN0sEGPMEw8eqV+tvePVS04YAkLgYVWtlkasI/8n0be9xB+77x+Sjj3kIi2j2Lf9CA==",
1369
- "signed_at": "2026-05-31T04:48:21.124Z",
1369
+ "signed_at": "2026-05-31T10:22:24.330Z",
1370
1370
  "forward_watch": [
1371
1371
  "NGINX Rift CVE-2026-42945 (disclosed 2026-05-13, source depthfirst) — KEV-watch predicted CISA KEV listing by 2026-05-29; AI-assisted discovery angle; track for active-exploitation confirmation and patch advisory affecting front-door web app deployments"
1372
1372
  ]
@@ -1419,7 +1419,7 @@
1419
1419
  "d3fend_refs": [],
1420
1420
  "last_threat_review": "2026-05-15",
1421
1421
  "signature": "SBB7c3wNYfIdkyOp4g4nW0WP7xS+YokMzg32aaeJdbf14LTGQRzQUvSqb2TCj2HFUSHESOyKT1JpkAfyHLSQBQ==",
1422
- "signed_at": "2026-05-31T04:48:21.125Z"
1422
+ "signed_at": "2026-05-31T10:22:24.331Z"
1423
1423
  },
1424
1424
  {
1425
1425
  "name": "sector-healthcare",
@@ -1479,7 +1479,7 @@
1479
1479
  "d3fend_refs": [],
1480
1480
  "last_threat_review": "2026-05-11",
1481
1481
  "signature": "U04GNLyRas1VmfEsB8khH4iqFZPwx96sPY0Kw9iVsSPU+KTeEFqwgtWK1X1pzgb+T16Pc7HSrCaXDOpTFvQEDw==",
1482
- "signed_at": "2026-05-31T04:48:21.125Z"
1482
+ "signed_at": "2026-05-31T10:22:24.331Z"
1483
1483
  },
1484
1484
  {
1485
1485
  "name": "sector-financial",
@@ -1560,7 +1560,7 @@
1560
1560
  "TIBER-EU framework v2.0 alignment with DORA TLPT RTS (JC 2024/40); cross-recognition with CBEST and iCAST"
1561
1561
  ],
1562
1562
  "signature": "xbylLqNPBuEsFE/MNVeGy/01K6yiJXMxQbzC1F4RWU5aseDGbNy5HrAv2JWI2+Aft05ozreNPjccvu66yJ5EBw==",
1563
- "signed_at": "2026-05-31T04:48:21.126Z"
1563
+ "signed_at": "2026-05-31T10:22:24.331Z"
1564
1564
  },
1565
1565
  {
1566
1566
  "name": "sector-federal-government",
@@ -1629,7 +1629,7 @@
1629
1629
  "Australia PSPF 2024 revision and ISM quarterly updates — track for Essential Eight Maturity Level requirements for federal entities"
1630
1630
  ],
1631
1631
  "signature": "C9c3JuBhUbwcb7uZpDdy+PNT8sYmYIxzD4uRHu421ePW1aSFJ8fkMvuTzSO8vD/F/jOOg5opM4kov/xSAn+qCg==",
1632
- "signed_at": "2026-05-31T04:48:21.126Z"
1632
+ "signed_at": "2026-05-31T10:22:24.332Z"
1633
1633
  },
1634
1634
  {
1635
1635
  "name": "sector-energy",
@@ -1694,7 +1694,7 @@
1694
1694
  "ICS-CERT advisory feed (https://www.cisa.gov/news-events/cybersecurity-advisories/ics-advisories) for vendor CVEs in Siemens, Rockwell, Schneider Electric, ABB, GE Vernova, Hitachi Energy, AVEVA / OSIsoft PI"
1695
1695
  ],
1696
1696
  "signature": "oz8Q5WVaY8au4IjbaZahx/DSaC00Q44ylSL3mDkTerCEpW/EyPUeiLeGxSrWxBCwVFEKSSJvnhJjhvX5lDPcCg==",
1697
- "signed_at": "2026-05-31T04:48:21.126Z"
1697
+ "signed_at": "2026-05-31T10:22:24.332Z"
1698
1698
  },
1699
1699
  {
1700
1700
  "name": "sector-telecom",
@@ -1780,7 +1780,7 @@
1780
1780
  "O-RAN SFG / WG11 security specifications"
1781
1781
  ],
1782
1782
  "signature": "NAtyzfLPXlUuB78Snb9nWmbZalC1CNlIYN9rYhdEmtB/xQGC6vVnThgrEAHlm7v/jMCFuknvEpUHKdscUnUADw==",
1783
- "signed_at": "2026-05-31T04:48:21.127Z"
1783
+ "signed_at": "2026-05-31T10:22:24.332Z"
1784
1784
  },
1785
1785
  {
1786
1786
  "name": "api-security",
@@ -1849,7 +1849,7 @@
1849
1849
  "d3fend_refs": [],
1850
1850
  "last_threat_review": "2026-05-18",
1851
1851
  "signature": "1UTjZNC5Lyrgw93LAizdXVeSmv3jS8YQNT1db5OKsldub50+o1FXmAH4+3MxZozaOGDCX3yXbdDJSJaaSmfuAA==",
1852
- "signed_at": "2026-05-31T04:48:21.127Z",
1852
+ "signed_at": "2026-05-31T10:22:24.333Z",
1853
1853
  "forward_watch": [
1854
1854
  "NGINX Rift CVE-2026-42945 (disclosed 2026-05-13, source depthfirst) — KEV-watch predicted CISA KEV listing by 2026-05-29; track for active-exploitation confirmation and patch advisory affecting API gateway / reverse-proxy deployments",
1855
1855
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — LiteLLM 3-bug SSRF + Code Injection chain by k3vg3n; LLM-proxy API surface; track upstream patch and CVE assignments",
@@ -1935,7 +1935,7 @@
1935
1935
  "CISA KEV additions for cloud-control-plane CVEs (IMDSv1 abuses, federation token mishandling, cross-tenant boundary failures); CISA Cybersecurity Advisories for cross-cloud advisories"
1936
1936
  ],
1937
1937
  "signature": "EdsY4xe7YA8X8m+KZUbq49JwoCXgRKEz2eg3m86O37rvBmpm8ppvl9hrsekygvpBh2VmCHL2dEYiOD8OM2n7CA==",
1938
- "signed_at": "2026-05-31T04:48:21.127Z"
1938
+ "signed_at": "2026-05-31T10:22:24.333Z"
1939
1939
  },
1940
1940
  {
1941
1941
  "name": "container-runtime-security",
@@ -1997,7 +1997,7 @@
1997
1997
  "d3fend_refs": [],
1998
1998
  "last_threat_review": "2026-05-15",
1999
1999
  "signature": "fnLKPLkjjRCJ/F9wdmZ1w1lXmqEJvTYkv6Uu+9OTd5vZTWKz3QMuxKOsas+ctCdOvTaeloqPUUprXx+ZZdDpCg==",
2000
- "signed_at": "2026-05-31T04:48:21.128Z",
2000
+ "signed_at": "2026-05-31T10:22:24.333Z",
2001
2001
  "forward_watch": [
2002
2002
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — NVIDIA Container Toolkit container escape ($50K award) by chompie / IBM X-Force XOR; high-severity container/hypervisor boundary break; track patch and KEV add post-embargo"
2003
2003
  ]
@@ -2071,7 +2071,7 @@
2071
2071
  "MITRE ATLAS v5.6.0 (released May 2026) shipped the AML.T0010 sub-technique expansion this forecast tracked plus new techniques (\"Publish Poisoned AI Agent Tool\", \"Escape to Host\"); inventory now 16 tactics, 84 techniques, 56 sub-techniques. Forward watch: subsequent ATLAS minor and major releases — track next-cadence updates to agentic-AI TTPs and MLOps-pipeline-specific techniques"
2072
2072
  ],
2073
2073
  "signature": "t3dkdpTX04zvjitEeOJThpgjurLd1UO9GOut4LXSZgY3ULhfknI4zT7G5+m2RSZZTo7yyeZrwpg+7vEg9K6mAw==",
2074
- "signed_at": "2026-05-31T04:48:21.128Z"
2074
+ "signed_at": "2026-05-31T10:22:24.334Z"
2075
2075
  },
2076
2076
  {
2077
2077
  "name": "incident-response-playbook",
@@ -2133,7 +2133,7 @@
2133
2133
  "NYDFS 23 NYCRR 500.17 amendments tightening ransom-payment 24h disclosure operationalization"
2134
2134
  ],
2135
2135
  "signature": "+1kmtA6rAvIyDjjy+cJHK6BcfylyVsa5cUjRFijlFR9GsQfB93JnmkEJOqML50pdlcxtJI3yUodHpL3/YJGtCA==",
2136
- "signed_at": "2026-05-31T04:48:21.129Z"
2136
+ "signed_at": "2026-05-31T10:22:24.334Z"
2137
2137
  },
2138
2138
  {
2139
2139
  "name": "ransomware-response",
@@ -2213,7 +2213,7 @@
2213
2213
  ],
2214
2214
  "last_threat_review": "2026-05-22",
2215
2215
  "signature": "h48ASCz63aBfHzLKxMVDADMuT4atriK0iE6bJeVzZTsx/e8+hyv4fLP7+zYxT9Oe0Gss3v/Xy+t+Wd9uwzV+Aw==",
2216
- "signed_at": "2026-05-31T04:48:21.129Z"
2216
+ "signed_at": "2026-05-31T10:22:24.335Z"
2217
2217
  },
2218
2218
  {
2219
2219
  "name": "email-security-anti-phishing",
@@ -2266,7 +2266,7 @@
2266
2266
  "d3fend_refs": [],
2267
2267
  "last_threat_review": "2026-05-18",
2268
2268
  "signature": "FVBn4ex2qPIo9SHMVJ6tntoz4tVwjbIq3m6wDjjZyv2JODlS+90GBYCOkNamxxkmw/6de6SMs0YHQiF/xjo/DQ==",
2269
- "signed_at": "2026-05-31T04:48:21.129Z"
2269
+ "signed_at": "2026-05-31T10:22:24.335Z"
2270
2270
  },
2271
2271
  {
2272
2272
  "name": "age-gates-child-safety",
@@ -2334,7 +2334,7 @@
2334
2334
  "US state adult-site age-verification laws — 19+ states by mid-2026 (TX HB 18 upheld by SCOTUS June 2025 in Free Speech Coalition v. Paxton); track ongoing challenges in remaining states"
2335
2335
  ],
2336
2336
  "signature": "ZHVdGWCcfG98tSVB0b9mwrsYwv71V3uUEl+6ss7omSQhmNvqV5s6MAZM5YladBt9MK/8T/zBrTYN4gAonOP+BQ==",
2337
- "signed_at": "2026-05-31T04:48:21.130Z"
2337
+ "signed_at": "2026-05-31T10:22:24.335Z"
2338
2338
  },
2339
2339
  {
2340
2340
  "name": "cloud-iam-incident",
@@ -2414,7 +2414,7 @@
2414
2414
  ],
2415
2415
  "last_threat_review": "2026-05-15",
2416
2416
  "signature": "r9ii4nb3HJELdtKCGF5qy9PHOiot3GC24yfxfGAKlLENHkdRvRkvvL99eV/6RXyfUaMyrnc2Te8tPQcNu5bsDg==",
2417
- "signed_at": "2026-05-31T04:48:21.130Z",
2417
+ "signed_at": "2026-05-31T10:22:24.336Z",
2418
2418
  "forward_watch": [
2419
2419
  "AWS IAM Identity Center session-policy refresh and step-up-on-admin enforcement (anticipated 2026-H2 release)",
2420
2420
  "GCP Workload Identity Federation principal-set attribute mapping tightening (post-2026 Q3 Federation hardening guide)",
@@ -2508,7 +2508,7 @@
2508
2508
  ],
2509
2509
  "last_threat_review": "2026-05-15",
2510
2510
  "signature": "9mfDtMApMAg9V/lmwpniNxo/6gNZoOEoYDfyFvyWvKrPMtc7H9F8uz06FVoARe/J49saAKTVXOurNE1D/KtpCQ==",
2511
- "signed_at": "2026-05-31T04:48:21.130Z",
2511
+ "signed_at": "2026-05-31T10:22:24.336Z",
2512
2512
  "forward_watch": [
2513
2513
  "Entra ID conditional access evolution post-Midnight Blizzard — Microsoft's 2025-2026 commitments on legacy-tenant MFA enforcement and OAuth-app consent gating",
2514
2514
  "Okta IPSIE (Interoperability Profile for Secure Identity in the Enterprise) OpenID Foundation working-group output and adoption timeline",
@@ -2526,6 +2526,6 @@
2526
2526
  ],
2527
2527
  "manifest_signature": {
2528
2528
  "algorithm": "Ed25519",
2529
- "signature_base64": "Adyk095vyeY0icGDAti1GLURbVDE5HhVHyMtgeQ8WwncoOKIrngDjqi/VU9junhfoQtMCktYjJFE56yoi2DTCw=="
2529
+ "signature_base64": "ZU/5nhmMlrcEw7gL1fKWdlP5dS70Zyejvg7NA5SbrHl6zm+Tmt6FHwpscYFECUxolA/NUF+TdiVhl0fD9eeNBw=="
2530
2530
  }
2531
2531
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blamejs/exceptd-skills",
3
- "version": "0.15.53",
3
+ "version": "0.16.0",
4
4
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 42 skills, 11 catalogs (427 CVEs / 173 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.",
5
5
  "keywords": [
6
6
  "ai-security",
package/sbom.cdx.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.6",
4
- "serialNumber": "urn:uuid:347093c0-9155-471a-9a22-58cb926555f2",
4
+ "serialNumber": "urn:uuid:9bd47470-c59d-4f51-b994-359ef144b4eb",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2053-11-17T18:58:08.000Z",
7
+ "timestamp": "2108-11-06T03:58:40.000Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "blamejs",
11
11
  "name": "scripts/refresh-sbom.js",
12
- "version": "0.15.53"
12
+ "version": "0.16.0"
13
13
  }
14
14
  ],
15
15
  "component": {
16
- "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.15.53",
16
+ "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.16.0",
17
17
  "type": "application",
18
18
  "name": "@blamejs/exceptd-skills",
19
- "version": "0.15.53",
19
+ "version": "0.16.0",
20
20
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 42 skills, 11 catalogs (427 CVEs / 173 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.15.53",
28
+ "purl": "pkg:npm/%40blamejs/exceptd-skills@0.16.0",
29
29
  "hashes": [
30
30
  {
31
31
  "alg": "SHA-256",
32
- "content": "5fde4e0c2d0ef764c883ff21dbe1f4c5dbc9e74c675e59c15a6941a7e6d68c70"
32
+ "content": "1fada9c18f8669821ff1c4a85f283538532fe158641f1029dbf3ddf56a4e04be"
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.15.53"
38
+ "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.16.0"
39
39
  },
40
40
  {
41
41
  "type": "vcs",
@@ -116,11 +116,11 @@
116
116
  "hashes": [
117
117
  {
118
118
  "alg": "SHA-256",
119
- "content": "3f31b297747c16270e24932a2d762bc06655b2d4d7bc2a5c9943e7eccf2a6839"
119
+ "content": "e4a1351eb6f5f70afe3ab2de9241579da509a28a4c8511b22b0ad892b49e9c94"
120
120
  },
121
121
  {
122
122
  "alg": "SHA3-512",
123
- "content": "6489d29205b4185795b070e341e3290de0368f0dafb096907c1a912ccb5576dfb096fa020cff503d24bf830a9f1c3170ca8897daebcef3542ee6af6b6fae86b4"
123
+ "content": "02f1973ac20ca085fdbd22c0e15f178f72511c89eaf55acf454bbe3b03969ce96321c4ac27d2499ecdf4b8eaed46984fd4338d1239fecf1b856b4d3558dff4a2"
124
124
  }
125
125
  ]
126
126
  },
@@ -731,11 +731,11 @@
731
731
  "hashes": [
732
732
  {
733
733
  "alg": "SHA-256",
734
- "content": "1e2f307a7207a260f8c9ab23f95e8eebb4950349d79eceb2af5b8c4df2b37dc4"
734
+ "content": "0aecfdb929d9ab55432905fd8f116f3eaf56d7ebc86a2cc7817686d4ee5e4f8a"
735
735
  },
736
736
  {
737
737
  "alg": "SHA3-512",
738
- "content": "9298e037ccac473c5ac994e5ef4804d93a7abfbb3fa14c836a97c4503de2e9d10b1ad8a2f371115bf17c1f63851fd252214cb183c8655f1f4150b0e3a2dc9248"
738
+ "content": "aa77d3f6b11b13fb5e8745e3ce2f1de20d599efa667c423e454b07d5046188027397b3d52b02c48fc097db276a12611d18a5f329190d92f3295f30d2bc1161c5"
739
739
  }
740
740
  ]
741
741
  },
@@ -1751,11 +1751,11 @@
1751
1751
  "hashes": [
1752
1752
  {
1753
1753
  "alg": "SHA-256",
1754
- "content": "4359446f2ab6bfb0484b716ca15b81755ca4075d941b0c8caa5d2d4ad1c4f0a7"
1754
+ "content": "b2470edc747a7cb7f4d2d31e94bccead4ac79a5b605ea67ef12757c9353c186d"
1755
1755
  },
1756
1756
  {
1757
1757
  "alg": "SHA3-512",
1758
- "content": "26d55c25bbbc0e76e1592fd5633b87858c6cf3ba281e0d6b19ce17761af9468992564c0f040110e541a63492f384e3c982c3afd5f4a05596a08f03e9c93ca2fa"
1758
+ "content": "fe54afcaf4a2e0fff7b9d338f235b7d1227547f8f395b5b3b0d3d8bbf7ddb95d4ed7f08d1ef3b8ab6525c478465292597ccb0c781e1ba468f5fc15bb01fbbc08"
1759
1759
  }
1760
1760
  ]
1761
1761
  },