@blamejs/exceptd-skills 0.18.3 → 0.18.5

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,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.18.5 — 2026-06-14
4
+
5
+ The manifest's per-skill cross-reference arrays — data dependencies, framework gaps, and ATT&CK / ATLAS / D3FEND / RFC / CWE references — now include every reference a skill declares in its own frontmatter. Previously a reference present in a skill's frontmatter but missing from the manifest cache could silently drop out of the reverse-reference surfaces (for instance, a skill not appearing under a D3FEND technique it actually maps). A predeploy gate now holds the manifest cache to cover frontmatter, so the reference graph cannot drift again.
6
+
7
+ ## 0.18.4 — 2026-06-14
8
+
9
+ Correctness fixes in the skill linter, attestation diffing, and the jurisdiction index. The required-section check no longer accepts a heading that appears only inside a fenced code example, nor a deeper sub-heading standing in for a top-level section — both previously let a non-compliant skill pass. `attest diff` no longer reports an object-valued signal override (the per-indicator false-positive-check maps) as changed when its content is identical, so the field-level diff agrees with the overall evidence verdict. ENISA references now index under the dedicated EU_ENISA jurisdiction instead of collapsing into the generic EU bucket, and the indexed-jurisdiction count in the index metadata reflects every mapped jurisdiction.
10
+
3
11
  ## 0.18.3 — 2026-06-14
4
12
 
5
13
  The release pipeline now enforces the project's patch-only version cadence as a predeploy gate: a minor or major version bump fails the gates unless it carries an explicit, committed authorization. A release-engineering safeguard; the CLI surface is unchanged.
package/bin/exceptd.js CHANGED
@@ -6410,7 +6410,11 @@ function diffSignalOverrides(a, b) {
6410
6410
  const allIds = new Set([...Object.keys(a), ...Object.keys(b)]);
6411
6411
  const out = { total_compared: allIds.size, changed: [], unchanged_count: 0 };
6412
6412
  for (const id of allIds) {
6413
- if (a[id] !== b[id]) out.changed.push({ id, a: a[id] || null, b: b[id] || null });
6413
+ // Deep, order-insensitive compare — signal_overrides hold OBJECT values
6414
+ // (the `<indicator-id>__fp_checks` maps), so a reference-strict `!==` would
6415
+ // report byte-identical FP-check content as "changed", contradicting the
6416
+ // evidence_hash verdict. Reuse the same comparator diffArtifacts uses.
6417
+ if (artifactsDiffer(a[id], b[id])) out.changed.push({ id, a: a[id] ?? null, b: b[id] ?? null });
6414
6418
  else out.unchanged_count++;
6415
6419
  }
6416
6420
  return out;
@@ -9316,5 +9320,6 @@ module.exports = {
9316
9320
  _verifyAttestationSidecar: verifyAttestationSidecar,
9317
9321
  _emit: emit,
9318
9322
  _diffArtifacts: diffArtifacts,
9323
+ _diffSignalOverrides: diffSignalOverrides,
9319
9324
  _resolveSelfAttestation: resolveSelfAttestation,
9320
9325
  };
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "schema_version": "1.1.0",
3
- "generated_at": "2026-06-14T14:15:46.628Z",
3
+ "generated_at": "2026-06-14T15:51:29.599Z",
4
4
  "generator": "scripts/build-indexes.js",
5
5
  "source_count": 64,
6
6
  "source_hashes": {
7
- "manifest.json": "58e3b2b80b32fb30a31db9857fcbd356ddd6c61da6dbc3a762c85a4d212dc787",
7
+ "manifest.json": "d6486b4209c765883b69c32a3f52df0956c2e9cb770cc0d603fafb5b15aeb865",
8
8
  "README.md": "e7b854e7db9a364a1b368b5084b4f0c2a8282f0459ce39800ac1d1dabdc06074",
9
9
  "data/atlas-ttps.json": "5bc59e23d6c2defa54168de161a0825299b9cc4a49c6b26df2dae70b4f42eedf",
10
10
  "data/attack-techniques.json": "53c6f248760eecb11a0354f74ab467a5814e95075a686b9b3bf18c34e2f7435e",
11
11
  "data/cve-catalog.json": "eedd129c657e535d53df5d4d44fa54009b69cde85673cf7c9d426054eddc43d2",
12
12
  "data/cwe-catalog.json": "359263361fa52069e2856cc352d8f1c757d614ea840db6ef3ff5e696185ca220",
13
- "data/d3fend-catalog.json": "9a54bccb9f24f84b32024216cc3f53819a053721ac8ab43c326859e68fc0ffaf",
13
+ "data/d3fend-catalog.json": "349d14b2777342d38e5f8b0149a9ebd7703ee59f67a9efee200d1e19313088ac",
14
14
  "data/dlp-controls.json": "d2406c482dddd30e49203879999dc4b3a7fd4d0494d6a61d86b91ee76415df19",
15
15
  "data/exploit-availability.json": "ec2656f0d9a893610e27b43eb6035fe9b18e057c9f6dfaac7e7d4959bbcbb795",
16
16
  "data/framework-control-gaps.json": "760c2275803c6da3665ce538c5176bde6f041b68cc3d4808b8de961dfcdee6b8",
17
17
  "data/global-frameworks.json": "9ba563a85f7f8d6c3c957de64945e20925a89d0ed6ea6fc561cf093811acf558",
18
- "data/rfc-references.json": "b21d03b948c41bc8a854e2f057948ecf844bd8c105848aeb141d1eadf8192c31",
18
+ "data/rfc-references.json": "5db2f7006a1d7f2b8642a3e393213394e92798604576df973d0a0b8550f4b5ac",
19
19
  "data/zeroday-lessons.json": "8c69eec9103eeea236ceb1a157d62b35bafcf8a5de86502e25e4587cc5931247",
20
20
  "skills/kernel-lpe-triage/skill.md": "0f79c641cef6e5f4a942eb94f43c460562bf83dfb67ae112d146c39c6b320fb0",
21
21
  "skills/ai-attack-surface/skill.md": "6eefa7772f1faf9c8ed971f2a827cd48398a12ab3b691b258c7c8364a5deb39c",
@@ -84,7 +84,7 @@
84
84
  "trigger_table_entries": 688,
85
85
  "chains_cve_entries": 446,
86
86
  "chains_cwe_entries": 181,
87
- "jurisdictions_indexed": 29,
87
+ "jurisdictions_indexed": 34,
88
88
  "handoff_dag_nodes": 51,
89
89
  "summary_cards": 51,
90
90
  "section_offsets_skills": 51,
@@ -488,8 +488,23 @@
488
488
  "skill_count": 2
489
489
  },
490
490
  "EU_ENISA": {
491
- "skills": [],
491
+ "skills": [
492
+ "ai-c2-detection",
493
+ "cloud-security",
494
+ "compliance-theater",
495
+ "container-runtime-security",
496
+ "coordinated-vuln-disclosure",
497
+ "incident-response-playbook",
498
+ "pqc-first",
499
+ "researcher",
500
+ "sector-energy",
501
+ "sector-federal-government",
502
+ "sector-financial",
503
+ "sector-healthcare",
504
+ "sector-telecom",
505
+ "skill-update-loop"
506
+ ],
492
507
  "example_excerpts": {},
493
- "skill_count": 0
508
+ "skill_count": 14
494
509
  }
495
510
  }
@@ -51,13 +51,20 @@
51
51
  "Executable Script"
52
52
  ],
53
53
  "skills_referencing": [
54
+ "ai-attack-surface",
54
55
  "attack-surface-pentest",
56
+ "cloud-security",
57
+ "container-runtime-security",
55
58
  "defensive-countermeasure-mapping",
56
59
  "dlp-gap-analysis",
57
60
  "fuzz-testing-strategy",
58
61
  "kernel-lpe-triage",
59
62
  "mcp-agent-trust",
60
- "supply-chain-integrity"
63
+ "mlops-security",
64
+ "sector-energy",
65
+ "sector-federal-government",
66
+ "supply-chain-integrity",
67
+ "webapp-security"
61
68
  ],
62
69
  "implementation_examples": [
63
70
  "AppLocker (Windows)",
@@ -101,8 +108,11 @@
101
108
  "File Hash"
102
109
  ],
103
110
  "skills_referencing": [
111
+ "container-runtime-security",
104
112
  "defensive-countermeasure-mapping",
105
113
  "mcp-agent-trust",
114
+ "mlops-security",
115
+ "sector-federal-government",
106
116
  "supply-chain-integrity"
107
117
  ],
108
118
  "implementation_examples": [
@@ -143,9 +153,11 @@
143
153
  "Process Segment"
144
154
  ],
145
155
  "skills_referencing": [
156
+ "container-runtime-security",
146
157
  "defensive-countermeasure-mapping",
147
158
  "fuzz-testing-strategy",
148
- "kernel-lpe-triage"
159
+ "kernel-lpe-triage",
160
+ "sector-energy"
149
161
  ],
150
162
  "implementation_examples": [
151
163
  "NX bit (x86_64)",
@@ -216,7 +228,8 @@
216
228
  "System Call"
217
229
  ],
218
230
  "skills_referencing": [
219
- "defensive-countermeasure-mapping"
231
+ "defensive-countermeasure-mapping",
232
+ "kernel-lpe-triage"
220
233
  ],
221
234
  "implementation_examples": [
222
235
  "seccomp-bpf profiles (Docker default, gVisor)",
@@ -363,10 +376,14 @@
363
376
  "Authentication Service"
364
377
  ],
365
378
  "skills_referencing": [
379
+ "api-security",
366
380
  "cloud-iam-incident",
381
+ "cloud-security",
367
382
  "defensive-countermeasure-mapping",
368
383
  "idp-incident-response",
369
384
  "mcp-agent-trust",
385
+ "sector-federal-government",
386
+ "sector-financial",
370
387
  "supply-chain-integrity"
371
388
  ],
372
389
  "implementation_examples": [
@@ -405,10 +422,17 @@
405
422
  "Authentication Service"
406
423
  ],
407
424
  "skills_referencing": [
425
+ "age-gates-child-safety",
426
+ "api-security",
408
427
  "cloud-iam-incident",
409
428
  "defensive-countermeasure-mapping",
429
+ "email-security-anti-phishing",
430
+ "identity-assurance",
410
431
  "idp-incident-response",
411
- "mcp-agent-trust"
432
+ "mcp-agent-trust",
433
+ "sector-financial",
434
+ "sector-healthcare",
435
+ "webapp-security"
412
436
  ],
413
437
  "implementation_examples": [
414
438
  "FIDO2 / WebAuthn (phishing-resistant)",
@@ -531,14 +555,21 @@
531
555
  "skills_referencing": [
532
556
  "ai-attack-surface",
533
557
  "ai-c2-detection",
558
+ "api-security",
534
559
  "attack-surface-pentest",
535
560
  "cloud-iam-incident",
561
+ "cloud-security",
536
562
  "defensive-countermeasure-mapping",
537
563
  "dlp-gap-analysis",
564
+ "email-security-anti-phishing",
538
565
  "idp-incident-response",
566
+ "incident-response-playbook",
539
567
  "rag-pipeline-security",
540
568
  "ransomware-response",
541
- "sector-telecom"
569
+ "sector-energy",
570
+ "sector-financial",
571
+ "sector-telecom",
572
+ "webapp-security"
542
573
  ],
543
574
  "implementation_examples": [
544
575
  "Zeek / Suricata flow analysis",
@@ -578,8 +609,11 @@
578
609
  ],
579
610
  "skills_referencing": [
580
611
  "ai-c2-detection",
612
+ "cloud-security",
613
+ "container-runtime-security",
581
614
  "defensive-countermeasure-mapping",
582
615
  "dlp-gap-analysis",
616
+ "sector-energy",
583
617
  "sector-telecom"
584
618
  ],
585
619
  "implementation_examples": [
@@ -624,13 +658,21 @@
624
658
  "Application Payload"
625
659
  ],
626
660
  "skills_referencing": [
661
+ "age-gates-child-safety",
662
+ "ai-attack-surface",
627
663
  "ai-c2-detection",
664
+ "api-security",
628
665
  "attack-surface-pentest",
629
666
  "defensive-countermeasure-mapping",
630
667
  "dlp-gap-analysis",
668
+ "email-security-anti-phishing",
669
+ "identity-assurance",
670
+ "incident-response-playbook",
631
671
  "mcp-agent-trust",
632
672
  "rag-pipeline-security",
633
- "ransomware-response"
673
+ "ransomware-response",
674
+ "sector-healthcare",
675
+ "webapp-security"
634
676
  ],
635
677
  "implementation_examples": [
636
678
  "AI-API request body inspection at egress proxy (CloudFlare AI Gateway, LiteLLM proxy)",
@@ -668,16 +710,27 @@
668
710
  "Resource Access"
669
711
  ],
670
712
  "skills_referencing": [
713
+ "age-gates-child-safety",
671
714
  "ai-attack-surface",
672
715
  "ai-c2-detection",
716
+ "ai-risk-management",
717
+ "api-security",
673
718
  "cloud-iam-incident",
719
+ "cloud-security",
720
+ "container-runtime-security",
674
721
  "defensive-countermeasure-mapping",
675
722
  "dlp-gap-analysis",
723
+ "email-security-anti-phishing",
676
724
  "fuzz-testing-strategy",
677
725
  "idp-incident-response",
726
+ "incident-response-playbook",
727
+ "mlops-security",
678
728
  "rag-pipeline-security",
679
729
  "ransomware-response",
680
- "sector-telecom"
730
+ "sector-financial",
731
+ "sector-healthcare",
732
+ "sector-telecom",
733
+ "webapp-security"
681
734
  ],
682
735
  "implementation_examples": [
683
736
  "LLM output classifier for safety-bypass content (Llama Guard, Granite Guardian)",
@@ -714,6 +767,7 @@
714
767
  ],
715
768
  "skills_referencing": [
716
769
  "defensive-countermeasure-mapping",
770
+ "incident-response-playbook",
717
771
  "ransomware-response"
718
772
  ],
719
773
  "implementation_examples": [
@@ -754,7 +808,9 @@
754
808
  "File Access"
755
809
  ],
756
810
  "skills_referencing": [
757
- "defensive-countermeasure-mapping"
811
+ "ai-attack-surface",
812
+ "defensive-countermeasure-mapping",
813
+ "rag-pipeline-security"
758
814
  ],
759
815
  "implementation_examples": [
760
816
  "auditd FIM with behavioral rules",
@@ -792,7 +848,9 @@
792
848
  ],
793
849
  "skills_referencing": [
794
850
  "ai-c2-detection",
851
+ "container-runtime-security",
795
852
  "defensive-countermeasure-mapping",
853
+ "sector-energy",
796
854
  "sector-telecom"
797
855
  ],
798
856
  "implementation_examples": [
@@ -834,7 +892,8 @@
834
892
  "Process Tree"
835
893
  ],
836
894
  "skills_referencing": [
837
- "defensive-countermeasure-mapping"
895
+ "defensive-countermeasure-mapping",
896
+ "kernel-lpe-triage"
838
897
  ],
839
898
  "implementation_examples": [
840
899
  "Sysmon process-creation events with parent-child Sigma rules",
@@ -909,7 +968,8 @@
909
968
  "Process Environment Variable Access"
910
969
  ],
911
970
  "skills_referencing": [
912
- "cloud-iam-incident"
971
+ "cloud-iam-incident",
972
+ "mcp-agent-trust"
913
973
  ],
914
974
  "implementation_examples": [
915
975
  "AWS Secrets Manager + CloudTrail GetSecretValue audit with anomaly baseline per principal",
@@ -1027,7 +1087,9 @@
1027
1087
  "Source Code",
1028
1088
  "Configuration File"
1029
1089
  ],
1030
- "skills_referencing": [],
1090
+ "skills_referencing": [
1091
+ "rag-pipeline-security"
1092
+ ],
1031
1093
  "implementation_examples": [
1032
1094
  "gitleaks / trufflehog pre-commit and CI-time secret scanning",
1033
1095
  "YARA rules on uploaded files at SaaS file-upload boundaries",
@@ -142,7 +142,9 @@
142
142
  "published": "2011-09",
143
143
  "tracker": "https://www.rfc-editor.org/info/rfc6376",
144
144
  "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.",
145
- "skills_referencing": [],
145
+ "skills_referencing": [
146
+ "email-security-anti-phishing"
147
+ ],
146
148
  "last_verified": "2026-05-19",
147
149
  "abstract": "DomainKeys Identified Mail (DKIM) permits a person, role, or organization that owns the signing domain to claim some responsibility for a message by associating the domain with the message. This can be an author's organization, an operational relay, or one of their agents. DKIM separates the question of the identity of the Signer of the message from the purported author of the message. Assertion of responsibility is validated through a cryptographic signature and by querying the Signer's domain directly to retrieve the appropriate public key. Message transit from author to recipient is through relays that typically make no substantive change to the message content and thus preserve the DKIM signature. This memo obsoletes RFC 4871 and RFC 5672. [STANDARDS-TRACK]",
148
150
  "keywords": [
@@ -194,7 +196,9 @@
194
196
  "published": "2012-04",
195
197
  "tracker": "https://www.rfc-editor.org/info/rfc6545",
196
198
  "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.",
197
- "skills_referencing": [],
199
+ "skills_referencing": [
200
+ "incident-response-playbook"
201
+ ],
198
202
  "last_verified": "2026-05-19",
199
203
  "abstract": "Security incidents, such as system compromises, worms, viruses, phishing incidents, and denial of service, typically result in the loss of service, data, and resources both human and system. Service providers and Computer Security Incident Response Teams need to be equipped and ready to assist in communicating and tracing security incidents with tools and procedures in place before the occurrence of an attack. Real-time Inter-network Defense (RID) outlines a proactive inter-network communication method to facilitate sharing incident-handling data while integrating existing detection, tracing, source identification, and mitigation mechanisms for a complete incident-handling solution. Combining these capabilities in a communication system provides a way to achieve higher security levels on networks. Policy guidelines for handling incidents are recommended and can be agreed upon by a consortium using the security recommendations and considerations. This document obsoletes RFC 6045. [STANDARDS-TRACK]",
200
204
  "keywords": [
@@ -224,7 +228,9 @@
224
228
  "published": "2012-04",
225
229
  "tracker": "https://www.rfc-editor.org/info/rfc6546",
226
230
  "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).",
227
- "skills_referencing": [],
231
+ "skills_referencing": [
232
+ "incident-response-playbook"
233
+ ],
228
234
  "last_verified": "2026-05-19",
229
235
  "abstract": "The Incident Object Description Exchange Format (IODEF) defines a common XML format for document exchange, and Real-time Inter-network Defense (RID) defines extensions to IODEF intended for the cooperative handling of security incidents within consortia of network operators and enterprises. This document specifies an application-layer protocol for RID based upon the passing of RID messages over HTTP/TLS. [STANDARDS-TRACK]",
230
236
  "keywords": [
@@ -306,7 +312,9 @@
306
312
  "published": "2014-04",
307
313
  "tracker": "https://www.rfc-editor.org/info/rfc7208",
308
314
  "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.",
309
- "skills_referencing": [],
315
+ "skills_referencing": [
316
+ "email-security-anti-phishing"
317
+ ],
310
318
  "last_verified": "2026-05-19",
311
319
  "abstract": "Email on the Internet can be forged in a number of ways. In particular, existing protocols place no restriction on what a sending host can use as the \"MAIL FROM\" of a message or the domain given on the SMTP HELO/EHLO commands. This document describes version 1 of the Sender Policy Framework (SPF) protocol, whereby ADministrative Management Domains (ADMDs) can explicitly authorize the hosts that are allowed to use their domain names, and a receiving host can check such authorization. This document obsoletes RFC 4408.",
312
320
  "keywords": [
@@ -388,7 +396,9 @@
388
396
  "published": "2015-03",
389
397
  "tracker": "https://www.rfc-editor.org/info/rfc7489",
390
398
  "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.",
391
- "skills_referencing": [],
399
+ "skills_referencing": [
400
+ "email-security-anti-phishing"
401
+ ],
392
402
  "last_verified": "2026-05-27",
393
403
  "abstract": "Domain-based Message Authentication, Reporting, and Conformance (DMARC) is a scalable mechanism by which a mail-originating organization can express domain-level policies and preferences for message validation, disposition, and reporting, that a mail-receiving organization can use to improve mail handling. Originators of Internet Mail need to be able to associate reliable and authenticated domain identifiers with messages, communicate policies about messages that use those identifiers, and report about mail using those identifiers. These abilities have several benefits: Receivers can provide feedback to Domain Owners about the use of their domains; this feedback can provide valuable insight about the management of internal operations and the presence of external domain name abuse. DMARC does not produce or encourage elevated delivery privilege of authenticated email. DMARC is a mechanism for policy distribution that enables increasingly strict handling of messages that fail authentication checks, ranging from no action, through altered delivery, up to message rejection.",
394
404
  "keywords": [
@@ -518,7 +528,9 @@
518
528
  "published": "2016-11",
519
529
  "tracker": "https://www.rfc-editor.org/info/rfc7970",
520
530
  "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.",
521
- "skills_referencing": [],
531
+ "skills_referencing": [
532
+ "incident-response-playbook"
533
+ ],
522
534
  "last_verified": "2026-05-19",
523
535
  "abstract": "The Incident Object Description Exchange Format (IODEF) defines a data representation for security incident reports and indicators commonly exchanged by operational security teams for mitigation and watch and warning. This document describes an updated information model for the IODEF and provides an associated data model specified with the XML schema. This new information and data model obsoletes RFCs 5070 and 6685.",
524
536
  "keywords": [
@@ -673,7 +685,9 @@
673
685
  "published": "2018-09",
674
686
  "tracker": "https://www.rfc-editor.org/info/rfc8461",
675
687
  "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.",
676
- "skills_referencing": [],
688
+ "skills_referencing": [
689
+ "email-security-anti-phishing"
690
+ ],
677
691
  "last_verified": "2026-05-19",
678
692
  "abstract": "SMTP MTA Strict Transport Security (MTA-STS) is a mechanism enabling mail service providers (SPs) to declare their ability to receive Transport Layer Security (TLS) secure SMTP connections and to specify whether sending SMTP servers should refuse to deliver to MX hosts that do not offer TLS with a trusted server certificate.",
679
693
  "keywords": [
@@ -702,7 +716,9 @@
702
716
  "published": "2019-06",
703
717
  "tracker": "https://www.rfc-editor.org/info/rfc8616",
704
718
  "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.",
705
- "skills_referencing": [],
719
+ "skills_referencing": [
720
+ "email-security-anti-phishing"
721
+ ],
706
722
  "last_verified": "2026-05-19",
707
723
  "abstract": "Sender Policy Framework (SPF) (RFC 7208), DomainKeys Identified Mail (DKIM) (RFC 6376), and Domain-based Message Authentication, Reporting, and Conformance (DMARC) (RFC 7489) enable a domain owner to publish email authentication and policy information in the DNS. In internationalized email, domain names can occur both as U-labels and A-labels. This specification updates the SPF, DKIM, and DMARC specifications to clarify which form of internationalized domain names to use in those specifications.",
708
724
  "keywords": [
@@ -1003,7 +1019,9 @@
1003
1019
  "published": "2022-04",
1004
1020
  "tracker": "https://www.rfc-editor.org/info/rfc9116",
1005
1021
  "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.",
1006
- "skills_referencing": [],
1022
+ "skills_referencing": [
1023
+ "coordinated-vuln-disclosure"
1024
+ ],
1007
1025
  "last_verified": "2026-05-19",
1008
1026
  "abstract": "When security vulnerabilities are discovered by researchers, proper reporting channels are often lacking. As a result, vulnerabilities may be left unreported. This document defines a machine-parsable format (\"security.txt\") to help organizations describe their vulnerability disclosure practices to make it easier for researchers to report vulnerabilities.",
1009
1027
  "working_group": "NON WORKING GROUP",
@@ -1291,7 +1309,9 @@
1291
1309
  "published": "2022-11",
1292
1310
  "tracker": "https://docs.oasis-open.org/csaf/csaf/v2.0/csaf-v2.0.html",
1293
1311
  "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.",
1294
- "skills_referencing": [],
1312
+ "skills_referencing": [
1313
+ "coordinated-vuln-disclosure"
1314
+ ],
1295
1315
  "last_verified": "2026-05-19",
1296
1316
  "abstract": "OASIS Common Security Advisory Framework (CSAF) version 2.0 — the canonical machine-readable format for vendor security advisories. CSAF-2.0 documents are signed JSON conforming to a strict schema (product_tree, vulnerabilities[], document.tracking, document.references), enabling automated ingestion by SBOM tooling, vulnerability scanners, and incident-response platforms. Supersedes the legacy CVRF format. Required for vendors participating in the OpenSSF / CISA / ENISA coordinated-disclosure ecosystem."
1297
1317
  },
@@ -1331,7 +1351,9 @@
1331
1351
  "published": "2018-10",
1332
1352
  "tracker": "https://www.iso.org/standard/72311.html",
1333
1353
  "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.",
1334
- "skills_referencing": [],
1354
+ "skills_referencing": [
1355
+ "coordinated-vuln-disclosure"
1356
+ ],
1335
1357
  "last_verified": "2026-05-19",
1336
1358
  "abstract": "ISO/IEC 29147:2018 — Information technology, Security techniques, Vulnerability disclosure. Defines the receipt-side requirements for an organisation's vulnerability disclosure program (VDP): point-of-contact discoverability, acknowledgement timelines, communication protocols, advisory publication. Paired with ISO/IEC 30111 (vulnerability handling processes). Referenced by NIS2 Art.12 + EU CRA Annex I §1(2)(c) as the baseline VDP standard."
1337
1359
  },
@@ -1342,7 +1364,9 @@
1342
1364
  "published": "2019-10",
1343
1365
  "tracker": "https://www.iso.org/standard/69725.html",
1344
1366
  "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.",
1345
- "skills_referencing": [],
1367
+ "skills_referencing": [
1368
+ "coordinated-vuln-disclosure"
1369
+ ],
1346
1370
  "last_verified": "2026-05-19",
1347
1371
  "abstract": "ISO/IEC 30111:2019 — Information technology, Security techniques, Vulnerability handling processes. Defines the internal-side vulnerability-handling lifecycle: triage, investigation, resolution, release, post-release. Paired with ISO/IEC 29147 (disclosure-side requirements). Together the two standards cover the operator-facing vulnerability-handling obligation cited by NIS2 / EU CRA / FedRAMP / FDA premarket cybersecurity guidance."
1348
1372
  },
@@ -474,9 +474,16 @@ function validateFrontmatter(fm, skillName) {
474
474
  function findMissingSections(body, requiredSections) {
475
475
  const sections = requiredSections || REQUIRED_SECTIONS;
476
476
  const lines = body.split(/\r?\n/);
477
- // Index every heading line (any depth) so we know where each section ends.
477
+ // Index heading lines so we know where each section ends. Skip lines inside
478
+ // fenced code blocks: a heading inside a ```markdown example block is
479
+ // documentation, not a real section, and must not satisfy a required-section
480
+ // check (otherwise a skill whose required sections appear only inside a fence
481
+ // passes the gate vacuously).
478
482
  const headings = [];
483
+ let inFence = false;
479
484
  for (let i = 0; i < lines.length; i++) {
485
+ if (/^\s*(?:```|~~~)/.test(lines[i])) { inFence = !inFence; continue; }
486
+ if (inFence) continue;
480
487
  const m = lines[i].match(/^(#{1,6})\s+(.+?)\s*$/);
481
488
  if (m) {
482
489
  headings.push({ line: i, depth: m[1].length, title: m[2].trim() });
@@ -490,6 +497,10 @@ function findMissingSections(body, requiredSections) {
490
497
  const findHeading = (title) => {
491
498
  const t = title.toLowerCase();
492
499
  return headings.find((h) => {
500
+ // Required sections are top-level (H1/H2). A deeper heading — e.g. the H3
501
+ // "### Compliance Theater Check Result" inside Output Format — must NOT
502
+ // satisfy the standalone "## Compliance Theater Check" requirement.
503
+ if (h.depth > 2) return false;
493
504
  const lower = h.title.toLowerCase();
494
505
  if (lower === t) return true;
495
506
  if (lower.startsWith(t)) {