@blamejs/exceptd-skills 0.12.28 → 0.12.30
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/AGENTS.md +1 -1
- package/CHANGELOG.md +53 -0
- package/bin/exceptd.js +30 -20
- package/data/_indexes/_meta.json +9 -9
- package/data/_indexes/activity-feed.json +7 -7
- package/data/_indexes/chains.json +9 -9
- package/data/_indexes/currency.json +43 -43
- package/data/_indexes/stale-content.json +1 -1
- package/data/atlas-ttps.json +61 -111
- package/data/cve-catalog.json +136 -65
- package/data/cwe-catalog.json +151 -95
- package/data/d3fend-catalog.json +201 -54
- package/data/dlp-controls.json +2 -1
- package/data/framework-control-gaps.json +1214 -110
- package/data/playbooks/crypto-codebase.json +1 -1
- package/data/rfc-references.json +23 -67
- package/lib/exit-codes.js +2 -0
- package/lib/playbook-runner.js +25 -1
- package/manifest-snapshot.json +2 -2
- package/manifest-snapshot.sha256 +1 -1
- package/manifest.json +49 -48
- package/package.json +3 -2
- package/sbom.cdx.json +1853 -10
- package/scripts/backfill-theater-test.js +806 -0
- package/scripts/check-test-coverage.js +18 -4
- package/scripts/refresh-reverse-refs.js +171 -0
- package/scripts/refresh-sbom.js +155 -8
package/data/rfc-references.json
CHANGED
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
"stale_after_days": 180,
|
|
25
25
|
"rebuild_after_days": 365,
|
|
26
26
|
"note": "Per-entry last_verified governs decay. Skills depending on this catalog must check entry freshness before high-stakes use."
|
|
27
|
-
}
|
|
27
|
+
},
|
|
28
|
+
"last_threat_review": "2026-05-15"
|
|
28
29
|
},
|
|
29
30
|
"RFC-4301": {
|
|
30
31
|
"number": 4301,
|
|
@@ -59,9 +60,7 @@
|
|
|
59
60
|
"published": "2011-09",
|
|
60
61
|
"tracker": "https://www.rfc-editor.org/info/rfc6376",
|
|
61
62
|
"relevance": "Cryptographic signing of email by the originating domain. DMARC verification relies on either SPF or DKIM aligning with the From-header domain. Operationally, DKIM is the load-bearing half of DMARC — SPF breaks on legitimate forwarding paths; DKIM survives them. Key-length lag is the recurring framework gap: many deployments still use 1024-bit RSA keys despite IETF guidance to rotate to ≥2048-bit.",
|
|
62
|
-
"skills_referencing": [
|
|
63
|
-
"email-security-anti-phishing"
|
|
64
|
-
],
|
|
63
|
+
"skills_referencing": [],
|
|
65
64
|
"last_verified": "2026-05-13"
|
|
66
65
|
},
|
|
67
66
|
"RFC-6545": {
|
|
@@ -71,9 +70,7 @@
|
|
|
71
70
|
"published": "2012-04",
|
|
72
71
|
"tracker": "https://www.rfc-editor.org/info/rfc6545",
|
|
73
72
|
"relevance": "Defines the RID schema for exchanging incident-response data between organizations and CSIRTs. Operator-facing relevance is via the IODEF (RFC 7970) payload that RID transports — the pair is the IETF-standardized cross-organizational incident-coordination protocol. Adoption lags; in practice many SOCs use ad-hoc CSV/JSON exchanges instead, leaving compliance with 'documented coordination channel' requirements weakly evidenced.",
|
|
74
|
-
"skills_referencing": [
|
|
75
|
-
"incident-response-playbook"
|
|
76
|
-
],
|
|
73
|
+
"skills_referencing": [],
|
|
77
74
|
"last_verified": "2026-05-13"
|
|
78
75
|
},
|
|
79
76
|
"RFC-6546": {
|
|
@@ -83,9 +80,7 @@
|
|
|
83
80
|
"published": "2012-04",
|
|
84
81
|
"tracker": "https://www.rfc-editor.org/info/rfc6546",
|
|
85
82
|
"relevance": "Specifies the HTTP-over-TLS transport for RID (RFC 6545) messages. Operator-facing: provides the wire-level protocol for IODEF/RID message exchange when an organization commits to standardized incident-data coordination. Pair this with RFC 6545 (schema) and RFC 7970 (IODEF v2 payload).",
|
|
86
|
-
"skills_referencing": [
|
|
87
|
-
"incident-response-playbook"
|
|
88
|
-
],
|
|
83
|
+
"skills_referencing": [],
|
|
89
84
|
"last_verified": "2026-05-13"
|
|
90
85
|
},
|
|
91
86
|
"RFC-6749": {
|
|
@@ -110,9 +105,7 @@
|
|
|
110
105
|
"published": "2014-04",
|
|
111
106
|
"tracker": "https://www.rfc-editor.org/info/rfc7208",
|
|
112
107
|
"relevance": "Authorizes which IPs may send mail on behalf of a domain. DMARC's path-based authentication half. Limits: a strict 10-DNS-lookup ceiling that operators routinely blow past through nested includes, leading to permerror DMARC outcomes; SPF breaks across legitimate forwarders, which is why DKIM (RFC 6376) is the load-bearing half operationally.",
|
|
113
|
-
"skills_referencing": [
|
|
114
|
-
"email-security-anti-phishing"
|
|
115
|
-
],
|
|
108
|
+
"skills_referencing": [],
|
|
116
109
|
"last_verified": "2026-05-13"
|
|
117
110
|
},
|
|
118
111
|
"RFC-7296": {
|
|
@@ -136,9 +129,7 @@
|
|
|
136
129
|
"published": "2015-03",
|
|
137
130
|
"tracker": "https://www.rfc-editor.org/info/rfc7489",
|
|
138
131
|
"relevance": "Defines DMARC — the email-authentication policy framework that binds SPF + DKIM results to a published domain-owner policy. Operator-facing email security depends on a published DMARC record with `p=reject` or `p=quarantine`; relaxed policies (`p=none`) are equivalent to no DMARC for spoofing-defense purposes. Cited alongside DKIM (RFC 6376) and SPF (RFC 7208) as the authoritative tri-RFC for anti-spoofing posture.",
|
|
139
|
-
"skills_referencing": [
|
|
140
|
-
"email-security-anti-phishing"
|
|
141
|
-
],
|
|
132
|
+
"skills_referencing": [],
|
|
142
133
|
"last_verified": "2026-05-13"
|
|
143
134
|
},
|
|
144
135
|
"RFC-7519": {
|
|
@@ -170,10 +161,7 @@
|
|
|
170
161
|
"published": "2015-09",
|
|
171
162
|
"tracker": "https://www.rfc-editor.org/info/rfc7644",
|
|
172
163
|
"relevance": "SCIM 2.0 is the dominant standard for federated identity-store synchronisation between IdPs and downstream applications (Okta, Entra ID, Workday → SaaS). Operator-facing: SCIM endpoints are a recurring credential-store soft target — bearer-token misconfigurations expose full directory enumeration + write access. AI-agent contexts add a new class: agent-identity provisioning at scale via SCIM, where over-broad attribute filters expose human identity data to agent-tenants. Pair with RFC 7643 (SCIM Schema) when implementing.",
|
|
173
|
-
"skills_referencing": [
|
|
174
|
-
"identity-assurance",
|
|
175
|
-
"cred-stores"
|
|
176
|
-
],
|
|
164
|
+
"skills_referencing": [],
|
|
177
165
|
"last_verified": "2026-05-15"
|
|
178
166
|
},
|
|
179
167
|
"RFC-7970": {
|
|
@@ -183,9 +171,7 @@
|
|
|
183
171
|
"published": "2016-11",
|
|
184
172
|
"tracker": "https://www.rfc-editor.org/info/rfc7970",
|
|
185
173
|
"relevance": "IODEF v2 — the structured-incident payload format carried by RID. Operator-facing: IODEF v2 is the canonical machine-readable incident record. Use cases include cross-CSIRT coordination, regulator submissions where structured data is requested, and SIEM-to-SIEM federation. Adoption is sector-uneven; healthcare and financial sectors have stronger uptake than general industry.",
|
|
186
|
-
"skills_referencing": [
|
|
187
|
-
"incident-response-playbook"
|
|
188
|
-
],
|
|
174
|
+
"skills_referencing": [],
|
|
189
175
|
"last_verified": "2026-05-13"
|
|
190
176
|
},
|
|
191
177
|
"RFC-8032": {
|
|
@@ -239,9 +225,7 @@
|
|
|
239
225
|
"published": "2018-09",
|
|
240
226
|
"tracker": "https://www.rfc-editor.org/info/rfc8460",
|
|
241
227
|
"relevance": "Defines a DNS-published TLSRPT policy and an aggregate-reporting mechanism (RUA endpoint) where receiving MTAs report success / failure of inbound TLS negotiation. Operator-facing: TLSRPT is the monitoring half of the MTA-STS pair (RFC 8461) — without it, an MTA-STS `enforce` policy silently degrades when downgrade attempts occur or receiver-side TLS configurations break. Phishing-defense relevance is indirect but load-bearing: visibility into STARTTLS-stripping attempts is otherwise absent.",
|
|
242
|
-
"skills_referencing": [
|
|
243
|
-
"email-security-anti-phishing"
|
|
244
|
-
],
|
|
228
|
+
"skills_referencing": [],
|
|
245
229
|
"last_verified": "2026-05-15"
|
|
246
230
|
},
|
|
247
231
|
"RFC-8461": {
|
|
@@ -251,9 +235,7 @@
|
|
|
251
235
|
"published": "2018-09",
|
|
252
236
|
"tracker": "https://www.rfc-editor.org/info/rfc8461",
|
|
253
237
|
"relevance": "Forces TLS on inbound SMTP between MTAs that publish a `_mta-sts` policy. Closes the historical 'opportunistic-TLS-downgrade' attack window where a network-positioned attacker stripped the STARTTLS handshake. Operator-facing: an MTA-STS policy in `enforce` mode plus monitoring via TLSRPT (RFC 8460) is the baseline for inbound email confidentiality. Phishing-defense relevance is indirect — STARTTLS stripping enables session-layer manipulation that downstream defenses (DMARC, content classifiers) cannot recover from.",
|
|
254
|
-
"skills_referencing": [
|
|
255
|
-
"email-security-anti-phishing"
|
|
256
|
-
],
|
|
238
|
+
"skills_referencing": [],
|
|
257
239
|
"last_verified": "2026-05-13"
|
|
258
240
|
},
|
|
259
241
|
"RFC-8616": {
|
|
@@ -263,9 +245,7 @@
|
|
|
263
245
|
"published": "2019-06",
|
|
264
246
|
"tracker": "https://www.rfc-editor.org/info/rfc8616",
|
|
265
247
|
"relevance": "Updates DKIM / SPF / DMARC handling for internationalized domain names (IDN) and internationalized email-address local parts. Operator-facing: phishing campaigns increasingly leverage IDN homoglyphs (e.g. Cyrillic `а` for Latin `a`), and a DMARC implementation that doesn't honor RFC 8616 normalization rules can fail to align IDN-bearing From-headers correctly. Treat as a compatibility prerequisite for any anti-spoofing posture covering global mail flows.",
|
|
266
|
-
"skills_referencing": [
|
|
267
|
-
"email-security-anti-phishing"
|
|
268
|
-
],
|
|
248
|
+
"skills_referencing": [],
|
|
269
249
|
"last_verified": "2026-05-13"
|
|
270
250
|
},
|
|
271
251
|
"RFC-8617": {
|
|
@@ -275,10 +255,7 @@
|
|
|
275
255
|
"published": "2019-07",
|
|
276
256
|
"tracker": "https://www.rfc-editor.org/info/rfc8617",
|
|
277
257
|
"relevance": "ARC preserves authentication results across legitimate forwarding paths (mailing lists, alias services) where SPF + DKIM alignment would otherwise break, producing false DMARC failures. Operator-facing: ARC is the load-bearing complement to DMARC for organisations that receive mail via forwarders — anti-phishing programs that publish `p=reject` without an ARC strategy face increased false-positive bounce rates that pressure operators to relax DMARC. The skill-update-loop tracks ARC adoption signals as a forward-watch indicator for email-authentication posture changes.",
|
|
278
|
-
"skills_referencing": [
|
|
279
|
-
"email-security-anti-phishing",
|
|
280
|
-
"skill-update-loop"
|
|
281
|
-
],
|
|
258
|
+
"skills_referencing": [],
|
|
282
259
|
"last_verified": "2026-05-15"
|
|
283
260
|
},
|
|
284
261
|
"RFC-8705": {
|
|
@@ -288,9 +265,7 @@
|
|
|
288
265
|
"published": "2020-02",
|
|
289
266
|
"tracker": "https://www.rfc-editor.org/info/rfc8705",
|
|
290
267
|
"relevance": "Defines two mechanisms: mTLS client authentication to OAuth authorisation servers, and certificate-bound access tokens that prevent token theft from being exploitable without the original mTLS client certificate. Operator-facing: mTLS-bound tokens are the canonical mitigation for bearer-token theft in high-assurance contexts (open-banking under PSD2 / UK FCA SCA-RTS, FAPI 2.0, government SSO). DPoP (RFC 9449) is the lighter-weight alternative for browser / mobile contexts where client TLS certificates are impractical.",
|
|
291
|
-
"skills_referencing": [
|
|
292
|
-
"identity-assurance"
|
|
293
|
-
],
|
|
268
|
+
"skills_referencing": [],
|
|
294
269
|
"last_verified": "2026-05-15"
|
|
295
270
|
},
|
|
296
271
|
"RFC-8725": {
|
|
@@ -348,11 +323,7 @@
|
|
|
348
323
|
"tracker": "https://www.rfc-editor.org/info/rfc9112",
|
|
349
324
|
"relevance": "The current authoritative HTTP/1.1 specification, supersedes RFC 7230. Operator-facing: every HTTP/1.1 deployment — including MCP server transports, AI-API client libraries, and legacy webapp middle-tiers — should reference RFC 9112 rather than the older RFC 7230. Re-specification clarified request/response framing in ways that affect smuggling-class attack surfaces (CL.TE / TE.CL / CL.CL desync) which remain the dominant HTTP/1.1 vulnerability class.",
|
|
350
325
|
"lag_notes": "Supersedes RFC 7230. Many security-tool rulesets still cite the obsolete number; check any control mapping that references 'RFC 7230' as the HTTP/1.1 authority and update to 9112.",
|
|
351
|
-
"skills_referencing": [
|
|
352
|
-
"api-security",
|
|
353
|
-
"webapp-security",
|
|
354
|
-
"mcp-agent-trust"
|
|
355
|
-
],
|
|
326
|
+
"skills_referencing": [],
|
|
356
327
|
"last_verified": "2026-05-15"
|
|
357
328
|
},
|
|
358
329
|
"RFC-9114": {
|
|
@@ -379,9 +350,7 @@
|
|
|
379
350
|
"published": "2022-04",
|
|
380
351
|
"tracker": "https://www.rfc-editor.org/info/rfc9116",
|
|
381
352
|
"relevance": "Defines the `/.well-known/security.txt` file format. Operator-facing CVD entry point: researchers reaching a domain consult `/.well-known/security.txt` for the disclosure contact + policy URL + preferred encryption + acknowledgments page. Absence is a recurring CVD-friction finding; presence with a stale `Expires` header is equivalent to absence. Pair with ISO 29147 receipt requirements.",
|
|
382
|
-
"skills_referencing": [
|
|
383
|
-
"coordinated-vuln-disclosure"
|
|
384
|
-
],
|
|
353
|
+
"skills_referencing": [],
|
|
385
354
|
"last_verified": "2026-05-13"
|
|
386
355
|
},
|
|
387
356
|
"RFC-9180": {
|
|
@@ -439,10 +408,7 @@
|
|
|
439
408
|
"published": "2023-09",
|
|
440
409
|
"tracker": "https://www.rfc-editor.org/info/rfc9449",
|
|
441
410
|
"relevance": "DPoP binds OAuth access + refresh tokens to a client-held key pair via per-request JWTs, defending against bearer-token theft in contexts where mTLS (RFC 8705) is impractical (single-page apps, mobile apps, AI-agent runtimes lacking client-certificate infrastructure). Operator-facing: DPoP is the recommended sender-constraint for FAPI 2.0 + MCP server-to-client OAuth flows where the client cannot present a TLS client certificate. Pairs with RFC 9700 (OAuth 2.0 Security BCP) recommendations.",
|
|
442
|
-
"skills_referencing": [
|
|
443
|
-
"identity-assurance",
|
|
444
|
-
"api-security"
|
|
445
|
-
],
|
|
411
|
+
"skills_referencing": [],
|
|
446
412
|
"last_verified": "2026-05-15"
|
|
447
413
|
},
|
|
448
414
|
"RFC-9458": {
|
|
@@ -468,7 +434,6 @@
|
|
|
468
434
|
"relevance": "Transport Services (TAPS) architecture — abstracts the choice of underlying transport (TCP, QUIC, SCTP) behind a unified API that selects the protocol at runtime based on path conditions. Forward-watch relevance: webapp / AI-API client libraries that adopt TAPS may transparently shift between TCP-HTTP/2 and QUIC-HTTP/3 mid-session, complicating boundary inspection assumptions that pin to a single transport. Currently tracked as a deployment-watch item rather than an operational control point.",
|
|
469
435
|
"lag_notes": "Architecture document; companion documents (TAPS implementation, TAPS programming interface) are still in progress at IETF TAPS WG. Enterprise tooling impact is forward-looking.",
|
|
470
436
|
"skills_referencing": [
|
|
471
|
-
"webapp-security",
|
|
472
437
|
"sector-telecom"
|
|
473
438
|
],
|
|
474
439
|
"last_verified": "2026-05-15"
|
|
@@ -507,9 +472,7 @@
|
|
|
507
472
|
"published": "2022-11",
|
|
508
473
|
"tracker": "https://docs.oasis-open.org/csaf/csaf/v2.0/csaf-v2.0.html",
|
|
509
474
|
"relevance": "Machine-readable security advisory format adopted by EU CRA, CISA, and major vendor PSIRTs. Replaces the CVRF-1.2 format. Operator-facing: CSAF 2.0 documents carry the same advisory content traditionally found in vendor PDFs but in a parseable JSON form that consumers can ingest for fleet-wide impact assessment. exceptd emits CSAF-2.0 close.evidence_package bundles from `exceptd run --format csaf-2.0` for downstream auditor consumption.",
|
|
510
|
-
"skills_referencing": [
|
|
511
|
-
"coordinated-vuln-disclosure"
|
|
512
|
-
],
|
|
475
|
+
"skills_referencing": [],
|
|
513
476
|
"last_verified": "2026-05-13"
|
|
514
477
|
},
|
|
515
478
|
"DRAFT-IETF-TLS-ECDHE-MLKEM": {
|
|
@@ -546,9 +509,7 @@
|
|
|
546
509
|
"published": "2018-10",
|
|
547
510
|
"tracker": "https://www.iso.org/standard/72311.html",
|
|
548
511
|
"relevance": "Internationally-recognized vulnerability-disclosure procedure standard. Operator-facing: an org claiming a CVD program must demonstrate the documented procedures cover receipt, triage, advisory drafting, notification, and post-disclosure review. Twin to ISO 30111 (handling); together they form the disclosure ↔ handling pair. The RFC 9116 (security.txt) artifact is the operator-facing surface that operationalizes ISO 29147 receipt requirements.",
|
|
549
|
-
"skills_referencing": [
|
|
550
|
-
"coordinated-vuln-disclosure"
|
|
551
|
-
],
|
|
512
|
+
"skills_referencing": [],
|
|
552
513
|
"last_verified": "2026-05-13"
|
|
553
514
|
},
|
|
554
515
|
"ISO-30111": {
|
|
@@ -558,9 +519,7 @@
|
|
|
558
519
|
"published": "2019-10",
|
|
559
520
|
"tracker": "https://www.iso.org/standard/69725.html",
|
|
560
521
|
"relevance": "Internal handling counterpart to ISO 29147. Defines the internal processes (investigation, resolution, release) that follow a disclosed vulnerability through to fix. Operator-facing: paired with ISO 29147 it supplies the end-to-end CVD lifecycle. Many compliance frameworks (NIS2, EU CRA) reference 'a documented vulnerability handling process'; ISO 30111 is the canonical artifact that satisfies the wording.",
|
|
561
|
-
"skills_referencing": [
|
|
562
|
-
"coordinated-vuln-disclosure"
|
|
563
|
-
],
|
|
522
|
+
"skills_referencing": [],
|
|
564
523
|
"last_verified": "2026-05-13"
|
|
565
524
|
},
|
|
566
525
|
"RFC-7591": {
|
|
@@ -571,8 +530,7 @@
|
|
|
571
530
|
"tracker": "https://www.rfc-editor.org/info/rfc7591",
|
|
572
531
|
"relevance": "Dynamic Client Registration is the legitimate OAuth flow for self-service app onboarding into an IdP. Operator-facing: when DCR is enabled without strong attestation, a compromised tenant or compromised admin can register a malicious app whose redirect_uri exfiltrates auth codes — the 2023-2024 Microsoft Storm-0558 / Midnight Blizzard incidents exercised this surface via consent abuse on tenant-published apps. Pair with RFC 7592 (DCR Management Protocol) for full lifecycle controls.",
|
|
573
532
|
"skills_referencing": [
|
|
574
|
-
"idp-incident-response"
|
|
575
|
-
"identity-assurance"
|
|
533
|
+
"idp-incident-response"
|
|
576
534
|
],
|
|
577
535
|
"last_verified": "2026-05-15"
|
|
578
536
|
},
|
|
@@ -584,8 +542,7 @@
|
|
|
584
542
|
"tracker": "https://www.rfc-editor.org/info/rfc8693",
|
|
585
543
|
"relevance": "Token exchange is the canonical mechanism for cloud IAM impersonation and service-account delegation chains (AWS STS AssumeRoleWithWebIdentity, GCP Workload Identity Federation, Azure Workload Identity). Operator-facing: token-exchange chains are the modern equivalent of pass-the-token — a compromised upstream token mints downstream tokens with widened audience claims. Audit chain depth + audience expansion + lifetime ladder.",
|
|
586
544
|
"skills_referencing": [
|
|
587
|
-
"cloud-iam-incident"
|
|
588
|
-
"identity-assurance"
|
|
545
|
+
"cloud-iam-incident"
|
|
589
546
|
],
|
|
590
547
|
"last_verified": "2026-05-15"
|
|
591
548
|
},
|
|
@@ -597,8 +554,7 @@
|
|
|
597
554
|
"tracker": "https://www.rfc-editor.org/info/rfc9068",
|
|
598
555
|
"relevance": "Standardises the JWT claim set for OAuth access tokens (typ, scope, client_id, etc.) that cloud IAM and SaaS APIs accept as bearer credentials. Operator-facing: when tokens omit the audience claim or accept loose typ values, replay across services becomes trivial — most cloud-IAM token-forgery incidents (Azure storm-0558 key-leak class) reduce to insufficient claim validation. Pair with RFC 8725 (JWT BCP) for hardening.",
|
|
599
556
|
"skills_referencing": [
|
|
600
|
-
"cloud-iam-incident"
|
|
601
|
-
"identity-assurance"
|
|
557
|
+
"cloud-iam-incident"
|
|
602
558
|
],
|
|
603
559
|
"last_verified": "2026-05-15"
|
|
604
560
|
}
|
package/lib/exit-codes.js
CHANGED
|
@@ -26,6 +26,7 @@ const EXIT_CODES = Object.freeze({
|
|
|
26
26
|
SESSION_ID_COLLISION: 7,
|
|
27
27
|
LOCK_CONTENTION: 8,
|
|
28
28
|
STORAGE_EXHAUSTED: 9,
|
|
29
|
+
UNKNOWN_COMMAND: 10,
|
|
29
30
|
});
|
|
30
31
|
|
|
31
32
|
/**
|
|
@@ -43,6 +44,7 @@ const EXIT_CODE_DESCRIPTIONS = Object.freeze({
|
|
|
43
44
|
7: { name: 'SESSION_ID_COLLISION', summary: 'Persisting attestation would overwrite an existing session; pass --force-overwrite to replace or supply a fresh --session-id.' },
|
|
44
45
|
8: { name: 'LOCK_CONTENTION', summary: 'Concurrent invocation holds the per-playbook attestation lock; retry after the busy run releases.' },
|
|
45
46
|
9: { name: 'STORAGE_EXHAUSTED', summary: 'Disk full, quota exceeded, or read-only filesystem prevented attestation write (ENOSPC, EDQUOT, EROFS).' },
|
|
47
|
+
10: { name: 'UNKNOWN_COMMAND', summary: 'Unknown verb / dispatcher refused the requested command. Distinct from DETECTED_ESCALATE (2) which means a verb ran and detected an escalation-worthy finding.' },
|
|
46
48
|
});
|
|
47
49
|
|
|
48
50
|
/**
|
package/lib/playbook-runner.js
CHANGED
|
@@ -2708,6 +2708,30 @@ function buildEvidenceBundle(format, playbook, analyze, validate, agentSignals,
|
|
|
2708
2708
|
}
|
|
2709
2709
|
return stmt;
|
|
2710
2710
|
});
|
|
2711
|
+
// Cycle 9 C1: OpenVEX `author` identifies the entity attesting to the
|
|
2712
|
+
// disposition — for an operator-run scan that is the operator, not the
|
|
2713
|
+
// tool vendor. Mirror the CSAF publisher.namespace fallback ladder so a
|
|
2714
|
+
// downstream supply-chain consumer keying on `author` resolves to the
|
|
2715
|
+
// operator URN. Pre-fix every OpenVEX document falsely attributed
|
|
2716
|
+
// dispositions to the tooling provider. Falls back to
|
|
2717
|
+
// urn:exceptd:operator:unknown + bundle_publisher_unclaimed runtime
|
|
2718
|
+
// warning if neither runOpts.operator nor runOpts.publisherNamespace
|
|
2719
|
+
// is supplied.
|
|
2720
|
+
const vexOperatorClean = sanitizeOperatorText(runOpts.operator);
|
|
2721
|
+
const vexExplicitNs = sanitizeOperatorText(runOpts.publisherNamespace);
|
|
2722
|
+
let vexAuthor;
|
|
2723
|
+
if (vexExplicitNs) {
|
|
2724
|
+
vexAuthor = vexExplicitNs;
|
|
2725
|
+
} else if (vexOperatorClean) {
|
|
2726
|
+
vexAuthor = vexOperatorClean;
|
|
2727
|
+
} else {
|
|
2728
|
+
vexAuthor = 'urn:exceptd:operator:unknown';
|
|
2729
|
+
pushRunError(runOpts._runErrors, {
|
|
2730
|
+
kind: 'bundle_publisher_unclaimed',
|
|
2731
|
+
format: 'openvex',
|
|
2732
|
+
message: 'OpenVEX author falls back to urn:exceptd:operator:unknown — supply runOpts.operator or runOpts.publisherNamespace to claim disposition attribution.',
|
|
2733
|
+
});
|
|
2734
|
+
}
|
|
2711
2735
|
return {
|
|
2712
2736
|
'@context': 'https://openvex.dev/ns/v0.2.0',
|
|
2713
2737
|
// F2/F9: OpenVEX @id baked from session_id (not Date.now()) so the
|
|
@@ -2715,7 +2739,7 @@ function buildEvidenceBundle(format, playbook, analyze, validate, agentSignals,
|
|
|
2715
2739
|
// attestation file name. Falls back to a urnSlug if sessionId
|
|
2716
2740
|
// somehow arrived empty.
|
|
2717
2741
|
'@id': `https://exceptd.com/vex/${playbookSlug}/${urnSlug(sessionId || 'session')}`,
|
|
2718
|
-
author:
|
|
2742
|
+
author: vexAuthor,
|
|
2719
2743
|
timestamp: issued,
|
|
2720
2744
|
version: 1,
|
|
2721
2745
|
statements: (function () {
|
package/manifest-snapshot.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_comment": "Auto-generated by scripts/refresh-manifest-snapshot.js — do not hand-edit. Public skill surface used by check-manifest-snapshot.js to detect breaking removals.",
|
|
3
|
-
"_generated_at": "2026-05-
|
|
4
|
-
"atlas_version": "5.
|
|
3
|
+
"_generated_at": "2026-05-16T02:01:45.936Z",
|
|
4
|
+
"atlas_version": "5.4.0",
|
|
5
5
|
"skill_count": 42,
|
|
6
6
|
"skills": [
|
|
7
7
|
{
|
package/manifest-snapshot.sha256
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
3cc97ea81650ff630b335d8bb83a11ba5a847ac0dcada34ff0e36e24055d551e manifest-snapshot.json
|