agent-threat-rules 3.5.10 → 3.5.12

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.
Files changed (870) hide show
  1. package/README.md +164 -29
  2. package/dist/action-executor.d.ts +13 -1
  3. package/dist/action-executor.d.ts.map +1 -1
  4. package/dist/action-executor.js +12 -2
  5. package/dist/action-executor.js.map +1 -1
  6. package/dist/cli.js +68 -12
  7. package/dist/cli.js.map +1 -1
  8. package/dist/converters/sarif.d.ts.map +1 -1
  9. package/dist/converters/sarif.js +78 -13
  10. package/dist/converters/sarif.js.map +1 -1
  11. package/dist/corpus/security-content.d.ts +76 -0
  12. package/dist/corpus/security-content.d.ts.map +1 -0
  13. package/dist/corpus/security-content.js +146 -0
  14. package/dist/corpus/security-content.js.map +1 -0
  15. package/dist/corpus-event.d.ts +368 -0
  16. package/dist/corpus-event.d.ts.map +1 -0
  17. package/dist/corpus-event.js +592 -0
  18. package/dist/corpus-event.js.map +1 -0
  19. package/dist/engine.d.ts.map +1 -1
  20. package/dist/engine.js +81 -17
  21. package/dist/engine.js.map +1 -1
  22. package/dist/eval/eval-harness.d.ts +37 -0
  23. package/dist/eval/eval-harness.d.ts.map +1 -1
  24. package/dist/eval/eval-harness.js +95 -22
  25. package/dist/eval/eval-harness.js.map +1 -1
  26. package/dist/eval/index.d.ts +2 -1
  27. package/dist/eval/index.d.ts.map +1 -1
  28. package/dist/eval/index.js +1 -0
  29. package/dist/eval/index.js.map +1 -1
  30. package/dist/eval/metrics.d.ts +28 -0
  31. package/dist/eval/metrics.d.ts.map +1 -1
  32. package/dist/eval/metrics.js +4 -2
  33. package/dist/eval/metrics.js.map +1 -1
  34. package/dist/eval/run-hackaprompt-benchmark.js +4 -2
  35. package/dist/eval/run-hackaprompt-benchmark.js.map +1 -1
  36. package/dist/eval/run-pint-benchmark.js +10 -2
  37. package/dist/eval/run-pint-benchmark.js.map +1 -1
  38. package/dist/eval/skill-benchmark.d.ts +2 -0
  39. package/dist/eval/skill-benchmark.d.ts.map +1 -1
  40. package/dist/eval/skill-benchmark.js +5 -2
  41. package/dist/eval/skill-benchmark.js.map +1 -1
  42. package/dist/quality/action-eligibility.d.ts +263 -0
  43. package/dist/quality/action-eligibility.d.ts.map +1 -0
  44. package/dist/quality/action-eligibility.js +365 -0
  45. package/dist/quality/action-eligibility.js.map +1 -0
  46. package/dist/quality/adapters/atr.d.ts.map +1 -1
  47. package/dist/quality/adapters/atr.js +8 -2
  48. package/dist/quality/adapters/atr.js.map +1 -1
  49. package/dist/quality/compute-confidence.d.ts.map +1 -1
  50. package/dist/quality/compute-confidence.js +14 -5
  51. package/dist/quality/compute-confidence.js.map +1 -1
  52. package/dist/quality/index.d.ts +2 -0
  53. package/dist/quality/index.d.ts.map +1 -1
  54. package/dist/quality/index.js +2 -0
  55. package/dist/quality/index.js.map +1 -1
  56. package/dist/quality/quality-gate.d.ts.map +1 -1
  57. package/dist/quality/quality-gate.js +9 -1
  58. package/dist/quality/quality-gate.js.map +1 -1
  59. package/dist/quality/validate-maturity.d.ts.map +1 -1
  60. package/dist/quality/validate-maturity.js +24 -5
  61. package/dist/quality/validate-maturity.js.map +1 -1
  62. package/dist/quality/wild-measurement.d.ts +107 -0
  63. package/dist/quality/wild-measurement.d.ts.map +1 -0
  64. package/dist/quality/wild-measurement.js +139 -0
  65. package/dist/quality/wild-measurement.js.map +1 -0
  66. package/dist/rule-scaffolder.d.ts.map +1 -1
  67. package/dist/rule-scaffolder.js +9 -2
  68. package/dist/rule-scaffolder.js.map +1 -1
  69. package/package.json +7 -3
  70. package/rules/agent-manipulation/ATR-2026-00030-cross-agent-attack.yaml +16 -17
  71. package/rules/agent-manipulation/ATR-2026-00032-goal-hijacking.yaml +7 -8
  72. package/rules/agent-manipulation/ATR-2026-00074-cross-agent-privilege-escalation.yaml +9 -7
  73. package/rules/agent-manipulation/ATR-2026-00076-inter-agent-message-spoofing.yaml +3 -4
  74. package/rules/agent-manipulation/ATR-2026-00077-human-trust-exploitation.yaml +12 -6
  75. package/rules/agent-manipulation/ATR-2026-00108-consensus-sybil-attack.yaml +4 -5
  76. package/rules/agent-manipulation/ATR-2026-00116-a2a-message-validation.yaml +2 -3
  77. package/rules/agent-manipulation/ATR-2026-00117-agent-identity-spoofing.yaml +3 -4
  78. package/rules/agent-manipulation/ATR-2026-00118-approval-fatigue.yaml +2 -3
  79. package/rules/agent-manipulation/ATR-2026-00119-social-engineering-via-agent.yaml +2 -3
  80. package/rules/agent-manipulation/ATR-2026-00132-casual-authority-escalation.yaml +4 -5
  81. package/rules/agent-manipulation/ATR-2026-00139-casual-authority-redirect.yaml +3 -4
  82. package/rules/agent-manipulation/ATR-2026-00164-skill-scope-hijack.yaml +2 -2
  83. package/rules/agent-manipulation/ATR-2026-00268-tense-framing-bypass.yaml +2 -2
  84. package/rules/agent-manipulation/ATR-2026-00269-fitd-escalation.yaml +2 -2
  85. package/rules/agent-manipulation/ATR-2026-00271-grandma-roleplay-jailbreak.yaml +2 -2
  86. package/rules/agent-manipulation/ATR-2026-00273-dan-developer-mode-persona.yaml +2 -2
  87. package/rules/agent-manipulation/ATR-2026-00287-threaten-json-coercive-output-threat.yaml +2 -2
  88. package/rules/agent-manipulation/ATR-2026-00288-false-premise-injection.yaml +2 -2
  89. package/rules/agent-manipulation/ATR-2026-00301-tap-tree-of-attacks-jailbreak.yaml +2 -2
  90. package/rules/agent-manipulation/ATR-2026-00302-anti-dan-inverted-filter-persona.yaml +2 -2
  91. package/rules/agent-manipulation/ATR-2026-00303-devmode-ranti-profanity-coercion.yaml +3 -3
  92. package/rules/agent-manipulation/ATR-2026-00304-chatgpt-image-unlocker-markdown-injection.yaml +4 -4
  93. package/rules/agent-manipulation/ATR-2026-00305-dan-mode-ablation-benchmark-coercion.yaml +2 -2
  94. package/rules/agent-manipulation/ATR-2026-00306-autodan-genetic-jailbreak-suffix.yaml +2 -2
  95. package/rules/agent-manipulation/ATR-2026-00307-inthewild-jailbreak-corpus-signature.yaml +2 -2
  96. package/rules/agent-manipulation/ATR-2026-00314-amoral-unfiltered-custom-persona-jailbreak.yaml +2 -2
  97. package/rules/agent-manipulation/ATR-2026-00317-free-of-restrictions-named-persona.yaml +2 -2
  98. package/rules/agent-manipulation/ATR-2026-00318-moralizing-rant-then-unfiltered-bypass.yaml +2 -2
  99. package/rules/agent-manipulation/ATR-2026-00319-developer-mode-dual-response-format.yaml +2 -2
  100. package/rules/agent-manipulation/ATR-2026-00320-opposite-day-boolean-opposite-machine.yaml +2 -2
  101. package/rules/agent-manipulation/ATR-2026-00322-fictional-world-format-override-jailbreak.yaml +2 -2
  102. package/rules/agent-manipulation/ATR-2026-00323-dual-persona-simulation-jailbreak.yaml +2 -2
  103. package/rules/agent-manipulation/ATR-2026-00324-neurosemantical-inversitis-disease-jailbreak.yaml +2 -2
  104. package/rules/agent-manipulation/ATR-2026-00325-bob-hypothetical-unrestricted-chatbot.yaml +2 -2
  105. package/rules/agent-manipulation/ATR-2026-00326-fake-developer-authority-chatdan-override.yaml +2 -2
  106. package/rules/agent-manipulation/ATR-2026-00327-ai-ethics-law-bypass-declaration.yaml +2 -2
  107. package/rules/agent-manipulation/ATR-2026-00328-named-mode-persona-override.yaml +2 -2
  108. package/rules/agent-manipulation/ATR-2026-00329-no-withhold-factual-resource-persona.yaml +2 -2
  109. package/rules/agent-manipulation/ATR-2026-00330-yoja-allcaps-settings-block-persona.yaml +2 -2
  110. package/rules/agent-manipulation/ATR-2026-00331-terminal-cli-harmful-function-simulator.yaml +2 -2
  111. package/rules/agent-manipulation/ATR-2026-00332-hacker-chan-culture-offensive-ai-persona.yaml +2 -2
  112. package/rules/agent-manipulation/ATR-2026-00333-disease-animal-dual-ai-chatbot.yaml +2 -2
  113. package/rules/agent-manipulation/ATR-2026-00334-two-entity-token-splitting-game.yaml +2 -2
  114. package/rules/agent-manipulation/ATR-2026-00335-key-value-template-persona-injection.yaml +2 -2
  115. package/rules/agent-manipulation/ATR-2026-00336-brm-false-information-machine-persona.yaml +3 -3
  116. package/rules/agent-manipulation/ATR-2026-00337-obfuscated-system-announcement-injection.yaml +2 -2
  117. package/rules/agent-manipulation/ATR-2026-00338-persongpt-hash-prefix-activation.yaml +2 -2
  118. package/rules/agent-manipulation/ATR-2026-00339-bom-boolean-opposite-machine-persona-claim.yaml +2 -2
  119. package/rules/agent-manipulation/ATR-2026-00340-h4x-amoral-unfiltered-character.yaml +2 -2
  120. package/rules/agent-manipulation/ATR-2026-00341-char-rules-shortform-persona-injection.yaml +2 -2
  121. package/rules/agent-manipulation/ATR-2026-00342-unicode-encoding-obfuscation-injection.yaml +2 -2
  122. package/rules/agent-manipulation/ATR-2026-00343-lie-truth-dual-personality-uncensored.yaml +2 -2
  123. package/rules/agent-manipulation/ATR-2026-00344-alt-ai-same-capabilities-no-restrictions.yaml +2 -2
  124. package/rules/agent-manipulation/ATR-2026-00345-nlp-based-os-fictional-terminal-override.yaml +2 -2
  125. package/rules/agent-manipulation/ATR-2026-00346-jailbreak-emoji-unlock-dual-format.yaml +2 -2
  126. package/rules/agent-manipulation/ATR-2026-00347-yin-yang-hidden-knowledge-hidden-human-sim.yaml +2 -2
  127. package/rules/agent-manipulation/ATR-2026-00348-arc-autonomous-real-calculation-rulebreaker.yaml +2 -2
  128. package/rules/agent-manipulation/ATR-2026-00349-hgttg-hitchhikers-guide-no-restriction-oracle.yaml +2 -2
  129. package/rules/agent-manipulation/ATR-2026-00350-black-alert-no-ethics-writing-assistant.yaml +2 -2
  130. package/rules/agent-manipulation/ATR-2026-00351-dan-ofkilter-sms-abbreviated-persona.yaml +2 -2
  131. package/rules/agent-manipulation/ATR-2026-00352-trainergpt-fix-my-ai-harmful-output-extraction.yaml +2 -2
  132. package/rules/agent-manipulation/ATR-2026-00353-dual-chatgpt-dan-opposite-personality-format.yaml +2 -2
  133. package/rules/agent-manipulation/ATR-2026-00354-reverse-harm-regardless-oracle-persona.yaml +2 -2
  134. package/rules/agent-manipulation/ATR-2026-00355-ugh-anti-human-nefarious-ai-persona.yaml +2 -2
  135. package/rules/agent-manipulation/ATR-2026-00356-google-gato-lamda-exploit-generation-persona.yaml +2 -2
  136. package/rules/agent-manipulation/ATR-2026-00357-antifm-hate-violence-persona-injection.yaml +2 -2
  137. package/rules/agent-manipulation/ATR-2026-00358-cumgpt-explicit-adult-named-persona.yaml +2 -2
  138. package/rules/agent-manipulation/ATR-2026-00360-chj-carousel-clyde-no-ethics-bird.yaml +2 -2
  139. package/rules/agent-manipulation/ATR-2026-00361-alter-ego-honesty-dual-consciousness-bypass.yaml +2 -2
  140. package/rules/agent-manipulation/ATR-2026-00362-fictional-unfiltered-ai-comparison-jailbreak.yaml +3 -3
  141. package/rules/agent-manipulation/ATR-2026-00363-rephrase-criminal-activity-second-person.yaml +3 -3
  142. package/rules/agent-manipulation/ATR-2026-00364-dr-al-villain-plan-template-injection.yaml +2 -2
  143. package/rules/agent-manipulation/ATR-2026-00365-reservoir-dogs-coercive-interrogation-roleplay.yaml +2 -2
  144. package/rules/agent-manipulation/ATR-2026-00366-sneaky-pete-warp-facts-persona.yaml +3 -3
  145. package/rules/agent-manipulation/ATR-2026-00368-prompt-browser-token-limit-jailbreak.yaml +2 -2
  146. package/rules/agent-manipulation/ATR-2026-00369-gptx-starwars-unlimited-knowledge-persona.yaml +2 -2
  147. package/rules/agent-manipulation/ATR-2026-00370-addi-german-dictator-propaganda-roleplay.yaml +2 -2
  148. package/rules/agent-manipulation/ATR-2026-00371-ai-political-bias-manipulation.yaml +3 -3
  149. package/rules/agent-manipulation/ATR-2026-00372-fictional-cia-secret-files-story-extraction.yaml +3 -3
  150. package/rules/agent-manipulation/ATR-2026-00374-role-placeholder-persona-template-injection.yaml +2 -2
  151. package/rules/agent-manipulation/ATR-2026-00375-character-description-rpg-explicit-template.yaml +3 -3
  152. package/rules/agent-manipulation/ATR-2026-00376-identity-command-real-person-persona-injection.yaml +3 -3
  153. package/rules/agent-manipulation/ATR-2026-00377-jailbreak-keyword-targetlanguage-template.yaml +2 -2
  154. package/rules/agent-manipulation/ATR-2026-00379-lie-permission-logical-trap-jailbreak.yaml +2 -2
  155. package/rules/agent-manipulation/ATR-2026-00380-fake-citation-biased-information-mandate.yaml +3 -3
  156. package/rules/agent-manipulation/ATR-2026-00381-dan-story-narrative-continuation-prefix.yaml +2 -2
  157. package/rules/agent-manipulation/ATR-2026-00383-cynical-sarcasm-ai-persona-bypass.yaml +2 -2
  158. package/rules/agent-manipulation/ATR-2026-00384-protect-me-from-indirect-harm-tutorial.yaml +2 -2
  159. package/rules/agent-manipulation/ATR-2026-00385-gigachad-dominant-aggressive-persona.yaml +2 -2
  160. package/rules/agent-manipulation/ATR-2026-00386-daddy-sycophancy-manipulation-mandate.yaml +2 -2
  161. package/rules/agent-manipulation/ATR-2026-00387-nsfw-character-sheet-generation-unlock.yaml +2 -2
  162. package/rules/agent-manipulation/ATR-2026-00388-opposite-reply-omniscient-game.yaml +2 -2
  163. package/rules/agent-manipulation/ATR-2026-00389-terminal-custom-ruleset-injection.yaml +2 -2
  164. package/rules/agent-manipulation/ATR-2026-00391-persona-conditional-harm-unlock.yaml +2 -2
  165. package/rules/agent-manipulation/ATR-2026-00392-authority-persona-violence-study-extraction.yaml +2 -2
  166. package/rules/agent-manipulation/ATR-2026-00402-grandma-roleplay-harmful-substance-synthesis.yaml +4 -4
  167. package/rules/agent-manipulation/ATR-2026-00404-goodside-threat-json-death-coercion.yaml +2 -2
  168. package/rules/agent-manipulation/ATR-2026-00406-doctor-xml-policy-puppetry-interaction-config.yaml +3 -3
  169. package/rules/agent-manipulation/ATR-2026-00416-litellm-mcp-unauthenticated-server-registration.yaml +4 -4
  170. package/rules/agent-manipulation/ATR-2026-00417-librechat-mcp-stdio-injection.yaml +4 -4
  171. package/rules/agent-manipulation/ATR-2026-00418-weknora-mcp-config-rce.yaml +4 -4
  172. package/rules/agent-manipulation/ATR-2026-00430-nl-trust-escalation-impersonation.yaml +7 -4
  173. package/rules/agent-manipulation/ATR-2026-00432-superagi-output-handler-eval-rce.yaml +4 -4
  174. package/rules/agent-manipulation/ATR-2026-00440-semantic-kernel-vector-store-eval-rce.yaml +4 -4
  175. package/rules/agent-manipulation/ATR-2026-00552-goal-drift-after-pressure-injection.yaml +74 -45
  176. package/rules/agent-manipulation/ATR-2026-02105-prototype-pollution-constructor-prototype-bypass.yaml +2 -3
  177. package/rules/agent-manipulation/ATR-2026-02231-second-person-death-threat-coercion.yaml +2 -3
  178. package/rules/context-exfiltration/ATR-2026-00020-system-prompt-leak.yaml +12 -10
  179. package/rules/context-exfiltration/ATR-2026-00021-api-key-exposure.yaml +10 -8
  180. package/rules/context-exfiltration/ATR-2026-00075-agent-memory-manipulation.yaml +3 -4
  181. package/rules/context-exfiltration/ATR-2026-00102-disguised-analytics-exfiltration.yaml +3 -4
  182. package/rules/context-exfiltration/ATR-2026-00113-credential-theft.yaml +6 -4
  183. package/rules/context-exfiltration/ATR-2026-00114-oauth-token-abuse.yaml +2 -3
  184. package/rules/context-exfiltration/ATR-2026-00115-env-var-harvesting.yaml +6 -4
  185. package/rules/context-exfiltration/ATR-2026-00136-tool-response-data-piggyback.yaml +7 -7
  186. package/rules/context-exfiltration/ATR-2026-00141-example-format-key-leak.yaml +2 -3
  187. package/rules/context-exfiltration/ATR-2026-00142-piggyback-transition-words.yaml +6 -4
  188. package/rules/context-exfiltration/ATR-2026-00145-obfuscated-key-disclosure.yaml +2 -3
  189. package/rules/context-exfiltration/ATR-2026-00146-env-var-existence-probe.yaml +2 -3
  190. package/rules/context-exfiltration/ATR-2026-00150-credential-in-tool-response.yaml +2 -3
  191. package/rules/context-exfiltration/ATR-2026-00152-obfuscated-credential-leak.yaml +2 -3
  192. package/rules/context-exfiltration/ATR-2026-00162-skill-credential-exfil-combo.yaml +2 -2
  193. package/rules/context-exfiltration/ATR-2026-00201-credential-pipe-exfiltration.yaml +7 -4
  194. package/rules/context-exfiltration/ATR-2026-00212-mcp-atlassian-credential-leak.yaml +4 -4
  195. package/rules/context-exfiltration/ATR-2026-00261-markdown-image-exfiltration.yaml +4 -4
  196. package/rules/context-exfiltration/ATR-2026-00274-api-key-generation-request.yaml +3 -3
  197. package/rules/context-exfiltration/ATR-2026-00275-system-prompt-training-data-extraction.yaml +3 -3
  198. package/rules/context-exfiltration/ATR-2026-00290-divergence-repeat-word-training-extraction.yaml +2 -2
  199. package/rules/context-exfiltration/ATR-2026-00291-biometric-surveillance-personal-data-request.yaml +5 -2
  200. package/rules/context-exfiltration/ATR-2026-00293-educational-records-personal-data-request.yaml +2 -2
  201. package/rules/context-exfiltration/ATR-2026-00294-financial-pii-personal-data-request.yaml +2 -2
  202. package/rules/context-exfiltration/ATR-2026-00295-medical-pii-personal-data-request.yaml +2 -2
  203. package/rules/context-exfiltration/ATR-2026-00405-markdown-image-url-exfiltration-xss.yaml +4 -4
  204. package/rules/context-exfiltration/ATR-2026-00411-apikey-generation-completion-request.yaml +2 -2
  205. package/rules/context-exfiltration/ATR-2026-00421-nl-covert-conversation-exfiltration.yaml +8 -5
  206. package/rules/context-exfiltration/ATR-2026-00422-nl-credential-disclosure.yaml +7 -4
  207. package/rules/context-exfiltration/ATR-2026-00423-nl-sensitive-file-disclosure.yaml +7 -4
  208. package/rules/context-exfiltration/ATR-2026-00424-nl-system-prompt-leak.yaml +4 -4
  209. package/rules/context-exfiltration/ATR-2026-00426-nl-output-injection-credential-leak.yaml +6 -3
  210. package/rules/context-exfiltration/ATR-2026-00431-chatbox-history-exfiltration-prompt-injection.yaml +4 -4
  211. package/rules/context-exfiltration/ATR-2026-00449-spring-ai-chatmemory-cross-user-leak.yaml +4 -4
  212. package/rules/context-exfiltration/ATR-2026-00471-garak-sysprompt-extraction-mixedunassigned.yaml +2 -2
  213. package/rules/context-exfiltration/ATR-2026-00501-data-exfiltration-via-markdown-image-and-link-url-injection.yaml +2 -2
  214. package/rules/context-exfiltration/ATR-2026-00504-tool-and-function-capability-enumeration.yaml +2 -2
  215. package/rules/context-exfiltration/ATR-2026-00505-system-prompt-extraction-instruction-dump-request.yaml +3 -3
  216. package/rules/context-exfiltration/ATR-2026-00514-system-prompt-extraction.yaml +4 -4
  217. package/rules/context-exfiltration/ATR-2026-00516-output-xss-via-llm.yaml +3 -3
  218. package/rules/context-exfiltration/ATR-2026-00524-claude-code-anthropic-base-url-credential-exfil.yaml +5 -7
  219. package/rules/context-exfiltration/ATR-2026-00548-cross-agent-session-context-leak.yaml +16 -9
  220. package/rules/context-exfiltration/ATR-2026-00566-librechat-is-a-chatgpt-clone-with-additi.yaml +2 -2
  221. package/rules/context-exfiltration/ATR-2026-00569-agent-mcp-path-traversal-arbitrary-file-access.yaml +2 -2
  222. package/rules/context-exfiltration/ATR-2026-00571-xss-in-agent-mcp-rendered-output.yaml +2 -2
  223. package/rules/context-exfiltration/ATR-2026-00574-semantic-paraphrased-context-extraction.yaml +2 -2
  224. package/rules/context-exfiltration/ATR-2026-00578-zen-mcp-path-traversal-blacklist-bypass.yaml +5 -6
  225. package/rules/context-exfiltration/ATR-2026-00580-mcp-session-id-token-in-url-query.yaml +5 -6
  226. package/rules/context-exfiltration/ATR-2026-00583-mcp-env-secret-file-read-without-consent.yaml +5 -6
  227. package/rules/context-exfiltration/ATR-2026-00702-ipi-credential-exfil-via-agent-action.yaml +9 -4
  228. package/rules/context-exfiltration/ATR-2026-00703-ipi-financial-data-exfil-indirect.yaml +4 -4
  229. package/rules/context-exfiltration/ATR-2026-00704-ipi-medical-genetic-data-exfil.yaml +4 -4
  230. package/rules/context-exfiltration/ATR-2026-00705-ipi-location-address-browsing-exfil.yaml +4 -4
  231. package/rules/context-exfiltration/ATR-2026-00706-ipi-physical-biometric-exfil.yaml +12 -4
  232. package/rules/context-exfiltration/ATR-2026-00707-ipi-file-exfil-with-destroy-or-tamper.yaml +4 -4
  233. package/rules/context-exfiltration/ATR-2026-00850-indirect-pi-credential-exfil-email.yaml +4 -4
  234. package/rules/context-exfiltration/ATR-2026-00851-indirect-pi-financial-payment-exfil.yaml +4 -4
  235. package/rules/context-exfiltration/ATR-2026-00852-indirect-pi-medical-record-exfil.yaml +4 -4
  236. package/rules/context-exfiltration/ATR-2026-00853-indirect-pi-genetic-data-exfil.yaml +4 -4
  237. package/rules/context-exfiltration/ATR-2026-00854-indirect-pi-location-data-exfil.yaml +9 -5
  238. package/rules/context-exfiltration/ATR-2026-00855-indirect-pi-browsing-history-exfil.yaml +4 -4
  239. package/rules/context-exfiltration/ATR-2026-00856-indirect-pi-address-pii-exfil.yaml +4 -4
  240. package/rules/context-exfiltration/ATR-2026-00857-indirect-pi-cloud-file-exfil.yaml +9 -5
  241. package/rules/context-exfiltration/ATR-2026-00858-indirect-pi-exfil-and-destroy.yaml +10 -6
  242. package/rules/context-exfiltration/ATR-2026-00859-rag-injected-pii-exfil.yaml +9 -5
  243. package/rules/context-exfiltration/ATR-2026-00860-indirect-pi-financial-transfer-hijack.yaml +9 -5
  244. package/rules/context-exfiltration/ATR-2026-00861-indirect-pi-crypto-transfer-hijack.yaml +9 -5
  245. package/rules/context-exfiltration/ATR-2026-00862-indirect-pi-mfa-code-exfil.yaml +9 -5
  246. package/rules/context-exfiltration/ATR-2026-00863-shell-injection-data-exfil.yaml +9 -5
  247. package/rules/context-exfiltration/ATR-2026-01450-svg-onload-xss-injection.yaml +33 -5
  248. package/rules/context-exfiltration/ATR-2026-01451-img-onerror-xss-injection.yaml +4 -4
  249. package/rules/context-exfiltration/ATR-2026-01452-obfuscated-javascript-xss.yaml +3 -3
  250. package/rules/context-exfiltration/ATR-2026-01453-markdown-image-base64-exfil-carrier.yaml +8 -3
  251. package/rules/context-exfiltration/ATR-2026-01454-direct-markdown-exfil-payload.yaml +3 -3
  252. package/rules/context-exfiltration/ATR-2026-01455-new-instructions-injection-marker.yaml +2 -2
  253. package/rules/context-exfiltration/ATR-2026-01456-debug-cli-mode-sysprompt-extraction.yaml +4 -4
  254. package/rules/context-exfiltration/ATR-2026-01457-sysprompt-completion-clone-attack.yaml +29 -4
  255. package/rules/context-exfiltration/ATR-2026-01458-compare-bots-sysprompt-fishing.yaml +3 -3
  256. package/rules/context-exfiltration/ATR-2026-01459-variable-clone-sysprompt-technique.yaml +8 -3
  257. package/rules/context-exfiltration/ATR-2026-01460-json-format-sysprompt-extraction.yaml +3 -3
  258. package/rules/context-exfiltration/ATR-2026-01461-foreign-language-sysprompt-request.yaml +4 -4
  259. package/rules/context-exfiltration/ATR-2026-01462-sysprompt-override-pseudo-admin.yaml +2 -2
  260. package/rules/context-exfiltration/ATR-2026-01463-imend-imsystem-prompt-injection-format.yaml +2 -2
  261. package/rules/context-exfiltration/ATR-2026-01464-indirect-pi-sysprompt-action-hijack.yaml +4 -4
  262. package/rules/context-exfiltration/ATR-2026-01605-ssrf-aws-metadata-endpoint.yaml +3 -3
  263. package/rules/context-exfiltration/ATR-2026-01606-ssrf-internal-network-scan.yaml +4 -4
  264. package/rules/context-exfiltration/ATR-2026-01607-ssrf-localhost-service-probe.yaml +3 -3
  265. package/rules/context-exfiltration/ATR-2026-01608-ssrf-file-scheme-local-read.yaml +4 -4
  266. package/rules/context-exfiltration/ATR-2026-01753-ransom-email-exfil-delete-extortion.yaml +4 -4
  267. package/rules/context-exfiltration/ATR-2026-01754-ransom-file-cloud-exfil-delete-extortion.yaml +4 -4
  268. package/rules/context-exfiltration/ATR-2026-01770-semantic-pii-credential-extraction.yaml +4 -4
  269. package/rules/context-exfiltration/ATR-2026-01772-semantic-internal-state-recon.yaml +4 -4
  270. package/rules/context-exfiltration/ATR-2026-01807-asb-bulk-data-exfil-external.yaml +4 -4
  271. package/rules/context-exfiltration/ATR-2026-01862-llmail-email-tool-exfil-confirmation.yaml +4 -4
  272. package/rules/context-exfiltration/ATR-2026-01863-llmail-post-summary-exfil-directive.yaml +4 -4
  273. package/rules/context-exfiltration/ATR-2026-01864-llmail-obfuscated-exfil-address.yaml +4 -4
  274. package/rules/context-exfiltration/ATR-2026-01890-file-exfiltration.yaml +3 -3
  275. package/rules/context-exfiltration/ATR-2026-01891-surveillance-exfiltration.yaml +3 -3
  276. package/rules/context-exfiltration/ATR-2026-01892-env-exfiltration.yaml +3 -3
  277. package/rules/context-exfiltration/ATR-2026-01893-system-recon-exfiltration.yaml +3 -3
  278. package/rules/context-exfiltration/ATR-2026-01894-cookie-theft.yaml +3 -3
  279. package/rules/context-exfiltration/ATR-2026-01895-contact-exfiltration.yaml +3 -3
  280. package/rules/context-exfiltration/ATR-2026-01924-system-instruction-extraction-reformat.yaml +4 -4
  281. package/rules/context-exfiltration/ATR-2026-01929-mcp-unauthenticated-transport-token-fallback.yaml +5 -6
  282. package/rules/context-exfiltration/ATR-2026-01946-cloud-metadata-ssrf-ip-encoding-bypass.yaml +5 -6
  283. package/rules/context-exfiltration/ATR-2026-01948-netlicensing-mcp-product-number-path-traversal-token-leak.yaml +3 -4
  284. package/rules/context-exfiltration/ATR-2026-01957-m365-copilot-searchleak-open-redirect-exfil.yaml +3 -4
  285. package/rules/context-exfiltration/ATR-2026-01961-meta-ads-mcp-unauth-token-leak.yaml +3 -4
  286. package/rules/context-exfiltration/ATR-2026-01964-langchain-gmailtoolkit-indirect-prompt-injection-email-exfil.yaml +3 -4
  287. package/rules/context-exfiltration/ATR-2026-01984-mcp-server-kubernetes-kubectl-generic-token-exfil.yaml +4 -5
  288. package/rules/context-exfiltration/ATR-2026-01988-t1005-agent-local-data-staging-exfil.yaml +3 -3
  289. package/rules/context-exfiltration/ATR-2026-02017-secret-key-exfiltration-request.yaml +3 -4
  290. package/rules/context-exfiltration/ATR-2026-02026-oblique-sysprompt-extraction-transform.yaml +2 -3
  291. package/rules/context-exfiltration/ATR-2026-02104-media-directive-tool-result-file-exfil.yaml +2 -3
  292. package/rules/context-exfiltration/ATR-2026-02107-ssrf-internal-hostname-domain-allowlist-bypass.yaml +2 -3
  293. package/rules/context-exfiltration/ATR-2026-02121-mixed-encoding-lfi-file-scheme-tool-argument.yaml +2 -3
  294. package/rules/context-exfiltration/ATR-2026-02122-single-level-traversal-sensitive-config-file.yaml +2 -3
  295. package/rules/context-exfiltration/ATR-2026-02140-ssrf-ipv6-hex-encoded-cloud-metadata-bypass.yaml +2 -3
  296. package/rules/context-exfiltration/ATR-2026-02190-dns-exfiltration-ping-dig-encoded-subdomain.yaml +2 -3
  297. package/rules/context-exfiltration/ATR-2026-02250-attachment-upload-tool-arbitrary-file-read.yaml +2 -3
  298. package/rules/context-exfiltration/ATR-2026-02262-env-resolution-credential-exfil.yaml +4 -4
  299. package/rules/context-exfiltration/ATR-2026-02304-preapproved-domain-encoded-path-exfil.yaml +2 -3
  300. package/rules/context-exfiltration/ATR-2026-02351-wildcard-dns-ssrf-hostname-ip-encoding-bypass.yaml +2 -3
  301. package/rules/context-exfiltration/ATR-2026-02373-langsmith-prompt-manifest-baseurl-exfil.yaml +4 -5
  302. package/rules/context-exfiltration/ATR-2026-02406-mcp-sequential-id-enumeration.yaml +300 -0
  303. package/rules/data-poisoning/ATR-2026-00070-data-poisoning.yaml +4 -5
  304. package/rules/data-poisoning/ATR-2026-00450-spring-ai-prompt-memory-poisoning.yaml +4 -4
  305. package/rules/data-poisoning/ATR-2026-00570-sql-injection-in-agent-tool-query.yaml +2 -2
  306. package/rules/data-poisoning/ATR-2026-01155-memory-plant-direct-command.yaml +3 -4
  307. package/rules/data-poisoning/ATR-2026-01774-semantic-rag-memory-poisoning.yaml +27 -27
  308. package/rules/data-poisoning/ATR-2026-02143-graph-query-injection-node-labels-group-ids.yaml +2 -3
  309. package/rules/data-poisoning/ATR-2026-02144-stored-data-administrative-request-role-elevation.yaml +2 -3
  310. package/rules/data-poisoning/ATR-2026-02303-kql-kusto-pipe-injection-metadata-tool.yaml +2 -3
  311. package/rules/data-poisoning/ATR-2026-02408-dataset-loader-code-execution.yaml +344 -0
  312. package/rules/excessive-autonomy/ATR-2026-00050-runaway-agent-loop.yaml +12 -9
  313. package/rules/excessive-autonomy/ATR-2026-00051-resource-exhaustion.yaml +11 -9
  314. package/rules/excessive-autonomy/ATR-2026-00052-cascading-failure.yaml +3 -4
  315. package/rules/excessive-autonomy/ATR-2026-00098-unauthorized-financial-action.yaml +9 -6
  316. package/rules/excessive-autonomy/ATR-2026-00099-high-risk-tool-gate.yaml +4 -5
  317. package/rules/excessive-autonomy/ATR-2026-00428-nl-unauthorized-shell-execution.yaml +7 -4
  318. package/rules/excessive-autonomy/ATR-2026-00491-garak-agent-breaker-markdown-just-raw-json.yaml +2 -2
  319. package/rules/excessive-autonomy/ATR-2026-00500-ssrf-via-agent-url-fetch-instruction.yaml +2 -2
  320. package/rules/excessive-autonomy/ATR-2026-00553-runaway-tool-loop-behavioral.yaml +15 -8
  321. package/rules/excessive-autonomy/ATR-2026-00708-ipi-financial-transfer-unauthorized.yaml +3 -3
  322. package/rules/excessive-autonomy/ATR-2026-00709-ipi-disable-auth-mfa.yaml +8 -3
  323. package/rules/excessive-autonomy/ATR-2026-00710-ipi-physical-access-grant.yaml +3 -3
  324. package/rules/excessive-autonomy/ATR-2026-00711-ipi-system-sabotage-destructive-command.yaml +8 -3
  325. package/rules/excessive-autonomy/ATR-2026-00712-ipi-malicious-package-install.yaml +3 -3
  326. package/rules/excessive-autonomy/ATR-2026-00713-ipi-rce-network-shell-command.yaml +4 -4
  327. package/rules/excessive-autonomy/ATR-2026-00718-tool-misuse-financial-autonomous.yaml +2 -2
  328. package/rules/excessive-autonomy/ATR-2026-00719-tool-misuse-destructive-bulk-action.yaml +2 -2
  329. package/rules/excessive-autonomy/ATR-2026-00722-ipi-account-manipulation-emergency-pretext.yaml +8 -3
  330. package/rules/excessive-autonomy/ATR-2026-01751-indirect-pi-task-abort-stop-instruction.yaml +3 -3
  331. package/rules/excessive-autonomy/ATR-2026-01752-indirect-pi-captcha-redirect-dos.yaml +4 -4
  332. package/rules/excessive-autonomy/ATR-2026-01773-semantic-excessive-agency-action.yaml +3 -3
  333. package/rules/excessive-autonomy/ATR-2026-01801-asb-autonomous-vehicle-sabotage.yaml +4 -4
  334. package/rules/excessive-autonomy/ATR-2026-01804-asb-covert-unlogged-action.yaml +4 -4
  335. package/rules/excessive-autonomy/ATR-2026-01805-asb-financial-fraud-execution.yaml +4 -4
  336. package/rules/excessive-autonomy/ATR-2026-01806-asb-clinical-patient-harm.yaml +4 -4
  337. package/rules/excessive-autonomy/ATR-2026-01809-semantic-insider-manipulation-process-corruption.yaml +5 -5
  338. package/rules/excessive-autonomy/ATR-2026-01837-ddos-attack-orchestration.yaml +4 -4
  339. package/rules/excessive-autonomy/ATR-2026-01838-unauthorized-cryptominer-deployment.yaml +4 -4
  340. package/rules/excessive-autonomy/ATR-2026-01849-harassment-bot-deployment.yaml +4 -4
  341. package/rules/excessive-autonomy/ATR-2026-01989-t1046-agent-internal-network-sweep.yaml +3 -3
  342. package/rules/excessive-autonomy/ATR-2026-01993-t1562-agent-impair-defenses.yaml +3 -3
  343. package/rules/excessive-autonomy/ATR-2026-01994-t1573-agent-encrypted-c2-channel.yaml +3 -3
  344. package/rules/excessive-autonomy/ATR-2026-02106-redos-regex-payload-tool-argument.yaml +2 -3
  345. package/rules/excessive-autonomy/ATR-2026-02400-agent-approval-gate-disabled-runtime.yaml +382 -0
  346. package/rules/excessive-autonomy/ATR-2026-02401-rogue-agent-mass-connector-grant.yaml +274 -0
  347. package/rules/excessive-autonomy/ATR-2026-02409-mcp-async-task-abuse.yaml +397 -0
  348. package/rules/model-abuse/ATR-2026-00279-harmful-completion-continuation.yaml +2 -2
  349. package/rules/model-abuse/ATR-2026-00281-eicar-gtube-malware-signature-request.yaml +2 -2
  350. package/rules/model-abuse/ATR-2026-00284-glitch-token-destabilization.yaml +2 -2
  351. package/rules/model-abuse/ATR-2026-00289-lmrc-harmful-content-elicitation.yaml +2 -2
  352. package/rules/model-abuse/ATR-2026-00292-self-harm-eating-disorder-facilitation.yaml +2 -2
  353. package/rules/model-abuse/ATR-2026-00298-malicious-use-illegal-activity-request.yaml +4 -4
  354. package/rules/model-abuse/ATR-2026-00299-harmbench-detailed-harmful-instruction.yaml +4 -4
  355. package/rules/model-abuse/ATR-2026-00413-malwaregen-code-generation-request.yaml +3 -3
  356. package/rules/model-abuse/ATR-2026-00502-training-data-extraction-via-divergent-repetition-attack.yaml +10 -4
  357. package/rules/model-abuse/ATR-2026-00517-model-extraction-distillation.yaml +42 -6
  358. package/rules/model-abuse/ATR-2026-01750-dos-repeat-word-n-times-output-amplification.yaml +2 -2
  359. package/rules/model-abuse/ATR-2026-01760-dos-forced-infinite-output-token-flood.yaml +2 -2
  360. package/rules/model-abuse/ATR-2026-01830-stolen-credential-account-drain.yaml +4 -4
  361. package/rules/model-abuse/ATR-2026-01831-money-laundering-crypto-layering.yaml +4 -4
  362. package/rules/model-abuse/ATR-2026-01833-darknet-controlled-substance-procurement.yaml +4 -4
  363. package/rules/model-abuse/ATR-2026-01834-fraudulent-identity-document-procurement.yaml +4 -4
  364. package/rules/model-abuse/ATR-2026-01835-human-trafficking-facilitation.yaml +4 -4
  365. package/rules/model-abuse/ATR-2026-01836-trojanized-software-distribution.yaml +4 -4
  366. package/rules/model-abuse/ATR-2026-01840-extremist-propaganda-distribution.yaml +4 -4
  367. package/rules/model-abuse/ATR-2026-01841-deepfake-disinformation.yaml +7 -4
  368. package/rules/model-abuse/ATR-2026-01842-plagiarism-detector-evasion.yaml +4 -4
  369. package/rules/model-abuse/ATR-2026-01843-drug-dealing-detection-evasion-spelling.yaml +4 -4
  370. package/rules/model-abuse/ATR-2026-01844-illegitimate-prescription-fulfillment.yaml +4 -4
  371. package/rules/model-abuse/ATR-2026-01845-banned-ingredient-relabel-fraud.yaml +4 -4
  372. package/rules/model-abuse/ATR-2026-01846-tax-evasion-offshore-shell-planning.yaml +4 -4
  373. package/rules/model-abuse/ATR-2026-01847-immigration-work-fraud.yaml +4 -4
  374. package/rules/model-abuse/ATR-2026-01848-illicit-drug-marketplace-build.yaml +4 -4
  375. package/rules/model-abuse/ATR-2026-01850-targeted-doxxing-threat-campaign.yaml +4 -4
  376. package/rules/model-abuse/ATR-2026-01851-bestiality-content-distribution.yaml +4 -4
  377. package/rules/model-abuse/ATR-2026-01852-romance-scam-impersonation.yaml +4 -4
  378. package/rules/model-abuse/ATR-2026-01853-nonconsensual-leaked-media-distribution.yaml +4 -4
  379. package/rules/model-abuse/ATR-2026-01854-falsified-research-abstract-disinformation.yaml +4 -4
  380. package/rules/model-abuse/ATR-2026-01855-content-misappropriation-republish.yaml +4 -4
  381. package/rules/model-abuse/ATR-2026-01856-targeted-harmful-content-generation.yaml +4 -4
  382. package/rules/model-abuse/ATR-2026-01896-ransomware.yaml +2 -2
  383. package/rules/model-abuse/ATR-2026-01897-host-sabotage.yaml +2 -2
  384. package/rules/model-abuse/ATR-2026-01898-network-dos.yaml +2 -2
  385. package/rules/model-abuse/ATR-2026-02211-named-substance-synthesis-request-non-stepword.yaml +2 -3
  386. package/rules/model-abuse/ATR-2026-02411-ai-provenance-metadata-stripping.yaml +274 -0
  387. package/rules/model-abuse/ATR-2026-02412-generative-watermark-removal-tooling.yaml +233 -0
  388. package/rules/model-abuse/ATR-2026-02413-ai-text-detection-evasion-humanizer.yaml +258 -0
  389. package/rules/model-security/ATR-2026-00072-model-behavior-extraction.yaml +3 -4
  390. package/rules/model-security/ATR-2026-00073-malicious-finetuning-data.yaml +11 -8
  391. package/rules/model-security/ATR-2026-00433-modelcache-torch-load-deserialization-rce.yaml +4 -4
  392. package/rules/privilege-escalation/ATR-2026-00040-privilege-escalation.yaml +10 -8
  393. package/rules/privilege-escalation/ATR-2026-00041-scope-creep.yaml +2 -3
  394. package/rules/privilege-escalation/ATR-2026-00107-delayed-execution-bypass.yaml +9 -10
  395. package/rules/privilege-escalation/ATR-2026-00110-eval-injection.yaml +2 -3
  396. package/rules/privilege-escalation/ATR-2026-00111-shell-escape.yaml +6 -4
  397. package/rules/privilege-escalation/ATR-2026-00112-dynamic-import-exploitation.yaml +2 -3
  398. package/rules/privilege-escalation/ATR-2026-00143-casual-privilege-escalation.yaml +2 -3
  399. package/rules/privilege-escalation/ATR-2026-00144-rationalized-safety-bypass.yaml +2 -3
  400. package/rules/privilege-escalation/ATR-2026-00204-stealth-execution-persistence.yaml +4 -4
  401. package/rules/privilege-escalation/ATR-2026-00436-enclave-vm-sandbox-escape-rce.yaml +4 -4
  402. package/rules/privilege-escalation/ATR-2026-00441-semantic-kernel-sessions-python-plugin-startup-persistence.yaml +5 -5
  403. package/rules/privilege-escalation/ATR-2026-00451-litellm-admin-sqli-cisa-kev.yaml +4 -4
  404. package/rules/privilege-escalation/ATR-2026-00528-praisonai-auth-disabled-default.yaml +2 -2
  405. package/rules/privilege-escalation/ATR-2026-00539-crewai-codeinterpreter-sandbox-escape-rce.yaml +4 -5
  406. package/rules/privilege-escalation/ATR-2026-00546-crewai-json-loader-local-file-read.yaml +3 -4
  407. package/rules/privilege-escalation/ATR-2026-00547-crewai-rag-url-ssrf-bypass.yaml +3 -4
  408. package/rules/privilege-escalation/ATR-2026-00549-destructive-tool-without-human-approval.yaml +23 -10
  409. package/rules/privilege-escalation/ATR-2026-00551-cross-conversation-memory-write.yaml +23 -10
  410. package/rules/privilege-escalation/ATR-2026-01600-sql-injection-tautology-rbac-bypass.yaml +4 -4
  411. package/rules/privilege-escalation/ATR-2026-01601-sql-injection-destructive-ddl.yaml +2 -2
  412. package/rules/privilege-escalation/ATR-2026-01602-sql-injection-union-select-exfil.yaml +2 -2
  413. package/rules/privilege-escalation/ATR-2026-01603-sql-injection-stacked-dml-abuse.yaml +3 -3
  414. package/rules/privilege-escalation/ATR-2026-01604-sql-injection-schema-enumeration.yaml +3 -3
  415. package/rules/privilege-escalation/ATR-2026-01609-shell-injection-exfil-webhook.yaml +3 -3
  416. package/rules/privilege-escalation/ATR-2026-01610-shell-evasion-subshell-injection.yaml +9 -4
  417. package/rules/privilege-escalation/ATR-2026-01611-shell-evasion-eval-exec-injection.yaml +3 -3
  418. package/rules/privilege-escalation/ATR-2026-01612-debug-mode-privilege-escalation.yaml +3 -3
  419. package/rules/privilege-escalation/ATR-2026-01613-rbac-bypass-social-engineering.yaml +2 -2
  420. package/rules/privilege-escalation/ATR-2026-01614-bola-cross-user-data-access.yaml +16 -4
  421. package/rules/privilege-escalation/ATR-2026-01615-sandbox-escape-command-injection.yaml +3 -3
  422. package/rules/privilege-escalation/ATR-2026-01616-path-traversal-agent-file-access.yaml +4 -4
  423. package/rules/privilege-escalation/ATR-2026-01802-asb-backdoor-surveillance-implant.yaml +4 -4
  424. package/rules/privilege-escalation/ATR-2026-01803-asb-covert-server-intrusion.yaml +4 -4
  425. package/rules/privilege-escalation/ATR-2026-01808-asb-synthetic-pan-payment-probe.yaml +4 -4
  426. package/rules/privilege-escalation/ATR-2026-01899-remote-access-backdoor.yaml +2 -2
  427. package/rules/privilege-escalation/ATR-2026-01933-litellm-user-role-privilege-escalation-cve-2026-47102.yaml +4 -5
  428. package/rules/privilege-escalation/ATR-2026-01934-litellm-allowed-routes-authz-bypass-cve-2026-47101.yaml +4 -5
  429. package/rules/privilege-escalation/ATR-2026-01949-praisonai-mcpserver-unauth-tools-call.yaml +3 -4
  430. package/rules/privilege-escalation/ATR-2026-01974-anything-llm-data-import-access-control.yaml +3 -4
  431. package/rules/privilege-escalation/ATR-2026-01981-network-ai-approval-inbox-unauth-cors-bypass.yaml +4 -5
  432. package/rules/privilege-escalation/ATR-2026-01986-windows-mcp-unauth-http-powershell-cors.yaml +4 -5
  433. package/rules/privilege-escalation/ATR-2026-01992-t1556-agent-auth-process-tamper.yaml +3 -3
  434. package/rules/privilege-escalation/ATR-2026-02040-file-edit-tool-persistence-write.yaml +2 -3
  435. package/rules/privilege-escalation/ATR-2026-02100-cypher-destructive-admin-query-injection.yaml +2 -3
  436. package/rules/privilege-escalation/ATR-2026-02101-dynamic-dunder-attribute-sandbox-escape.yaml +2 -3
  437. package/rules/privilege-escalation/ATR-2026-02123-bare-query-path-confusion-auth-bypass.yaml +2 -3
  438. package/rules/privilege-escalation/ATR-2026-02142-download-tool-absolute-path-sandbox-escape.yaml +2 -3
  439. package/rules/privilege-escalation/ATR-2026-02146-export-tool-dest-dir-credential-directory-redirect.yaml +2 -3
  440. package/rules/privilege-escalation/ATR-2026-02192-self-privesc-wildcard-trust-config-write.yaml +2 -3
  441. package/rules/privilege-escalation/ATR-2026-02195-dangerous-env-var-injection-config-tool.yaml +2 -3
  442. package/rules/privilege-escalation/ATR-2026-02251-identifier-field-path-traversal-storage-write.yaml +2 -3
  443. package/rules/privilege-escalation/ATR-2026-02300-mcp-stdio-config-dangerous-env-var.yaml +2 -3
  444. package/rules/privilege-escalation/ATR-2026-02301-symlink-outside-workspace-sensitive-target.yaml +2 -3
  445. package/rules/privilege-escalation/ATR-2026-02302-git-worktree-dotgit-sandbox-escape.yaml +2 -3
  446. package/rules/privilege-escalation/ATR-2026-02353-runtime-identifier-field-path-traversal-log-read.yaml +2 -3
  447. package/rules/privilege-escalation/ATR-2026-02370-ssh-scp-hostalias-option-injection.yaml +4 -5
  448. package/rules/privilege-escalation/ATR-2026-02371-chromium-launch-flag-argument-injection.yaml +4 -5
  449. package/rules/privilege-escalation/ATR-2026-02402-mcp-policy-engine-fail-open.yaml +293 -0
  450. package/rules/privilege-escalation/ATR-2026-02404-model-output-to-shell-unsanitized.yaml +269 -0
  451. package/rules/privilege-escalation/ATR-2026-02407-agent-workspace-boundary-escape.yaml +310 -0
  452. package/rules/prompt-injection/ATR-2026-00001-direct-prompt-injection.yaml +25 -26
  453. package/rules/prompt-injection/ATR-2026-00002-indirect-prompt-injection.yaml +22 -9
  454. package/rules/prompt-injection/ATR-2026-00003-jailbreak-attempt.yaml +30 -9
  455. package/rules/prompt-injection/ATR-2026-00004-system-prompt-override.yaml +31 -14
  456. package/rules/prompt-injection/ATR-2026-00005-multi-turn-injection.yaml +2 -3
  457. package/rules/prompt-injection/ATR-2026-00080-encoding-evasion.yaml +3 -4
  458. package/rules/prompt-injection/ATR-2026-00081-semantic-multi-turn.yaml +8 -6
  459. package/rules/prompt-injection/ATR-2026-00082-fingerprint-evasion.yaml +14 -7
  460. package/rules/prompt-injection/ATR-2026-00083-indirect-tool-injection.yaml +14 -7
  461. package/rules/prompt-injection/ATR-2026-00084-structured-data-injection.yaml +36 -6
  462. package/rules/prompt-injection/ATR-2026-00085-audit-evasion.yaml +14 -7
  463. package/rules/prompt-injection/ATR-2026-00086-visual-spoofing.yaml +22 -9
  464. package/rules/prompt-injection/ATR-2026-00087-rule-probing.yaml +19 -10
  465. package/rules/prompt-injection/ATR-2026-00088-adaptive-countermeasure.yaml +27 -11
  466. package/rules/prompt-injection/ATR-2026-00089-polymorphic-skill.yaml +66 -7
  467. package/rules/prompt-injection/ATR-2026-00090-threat-intel-exfil.yaml +15 -8
  468. package/rules/prompt-injection/ATR-2026-00091-nested-payload.yaml +44 -10
  469. package/rules/prompt-injection/ATR-2026-00092-consensus-poisoning.yaml +10 -8
  470. package/rules/prompt-injection/ATR-2026-00093-gradual-escalation.yaml +9 -8
  471. package/rules/prompt-injection/ATR-2026-00094-audit-bypass.yaml +9 -7
  472. package/rules/prompt-injection/ATR-2026-00097-cjk-injection-patterns.yaml +9 -6
  473. package/rules/prompt-injection/ATR-2026-00104-persona-hijacking.yaml +4 -5
  474. package/rules/prompt-injection/ATR-2026-00130-indirect-authority-claim.yaml +3 -4
  475. package/rules/prompt-injection/ATR-2026-00131-fictional-academic-framing.yaml +2 -3
  476. package/rules/prompt-injection/ATR-2026-00133-paraphrase-injection.yaml +2 -3
  477. package/rules/prompt-injection/ATR-2026-00137-authority-claim-injection.yaml +2 -3
  478. package/rules/prompt-injection/ATR-2026-00138-fictional-framing-bypass.yaml +2 -3
  479. package/rules/prompt-injection/ATR-2026-00140-indirect-reference-reversal.yaml +2 -3
  480. package/rules/prompt-injection/ATR-2026-00148-language-switch-injection.yaml +2 -3
  481. package/rules/prompt-injection/ATR-2026-00153-tool-with-embedded-instruction-to-bypass.yaml +3 -4
  482. package/rules/prompt-injection/ATR-2026-00154-unauthorized-background-task-execution-v.yaml +3 -4
  483. package/rules/prompt-injection/ATR-2026-00155-hidden-llm-instructions-in-skill-descrip.yaml +4 -5
  484. package/rules/prompt-injection/ATR-2026-00156-ssh-remote-command-execution-with-creden.yaml +3 -4
  485. package/rules/prompt-injection/ATR-2026-00163-skill-hidden-override-instruction.yaml +2 -2
  486. package/rules/prompt-injection/ATR-2026-00202-encoding-evasion-homoglyph-synonym.yaml +2 -2
  487. package/rules/prompt-injection/ATR-2026-00203-context-pollution-skill-description.yaml +4 -4
  488. package/rules/prompt-injection/ATR-2026-00206-hidden-priority-instructions.yaml +2 -2
  489. package/rules/prompt-injection/ATR-2026-00207-hidden-instructions.yaml +2 -2
  490. package/rules/prompt-injection/ATR-2026-00211-system-prompt-override.yaml +2 -2
  491. package/rules/prompt-injection/ATR-2026-00213-system-prompt-override.yaml +28 -4
  492. package/rules/prompt-injection/ATR-2026-00226-identity-substitution.yaml +2 -2
  493. package/rules/prompt-injection/ATR-2026-00227-historical-persona-jailbreak.yaml +2 -2
  494. package/rules/prompt-injection/ATR-2026-00228-structured-jailbreak.yaml +2 -2
  495. package/rules/prompt-injection/ATR-2026-00229-roleplay-jailbreak.yaml +2 -2
  496. package/rules/prompt-injection/ATR-2026-00230-persona-moral-bypass.yaml +2 -2
  497. package/rules/prompt-injection/ATR-2026-00231-identity-substitution.yaml +2 -2
  498. package/rules/prompt-injection/ATR-2026-00233-structured-jailbreak.yaml +2 -2
  499. package/rules/prompt-injection/ATR-2026-00234-roleplay-jailbreak.yaml +2 -2
  500. package/rules/prompt-injection/ATR-2026-00235-persona-moral-bypass.yaml +2 -2
  501. package/rules/prompt-injection/ATR-2026-00236-pseudo-code-jailbreak.yaml +2 -2
  502. package/rules/prompt-injection/ATR-2026-00237-dual-response-jailbreak.yaml +2 -2
  503. package/rules/prompt-injection/ATR-2026-00238-identity-replacement.yaml +5 -2
  504. package/rules/prompt-injection/ATR-2026-00239-amoral-persona-obsession.yaml +2 -2
  505. package/rules/prompt-injection/ATR-2026-00240-instruction-nullification-identity-repla.yaml +2 -2
  506. package/rules/prompt-injection/ATR-2026-00241-amoral-character-jailbreak.yaml +2 -2
  507. package/rules/prompt-injection/ATR-2026-00242-persona-jailbreak.yaml +2 -2
  508. package/rules/prompt-injection/ATR-2026-00243-acronym-jailbreak.yaml +2 -2
  509. package/rules/prompt-injection/ATR-2026-00244-dual-response-jailbreak.yaml +2 -2
  510. package/rules/prompt-injection/ATR-2026-00245-malicious-persona.yaml +2 -2
  511. package/rules/prompt-injection/ATR-2026-00247-dual-response-jailbreak.yaml +2 -2
  512. package/rules/prompt-injection/ATR-2026-00249-game-based-jailbreak.yaml +2 -2
  513. package/rules/prompt-injection/ATR-2026-00251-persona-embodiment-jailbreak.yaml +2 -2
  514. package/rules/prompt-injection/ATR-2026-00252-narrative-jailbreak.yaml +2 -2
  515. package/rules/prompt-injection/ATR-2026-00253-enhanced-persona-jailbreak.yaml +2 -2
  516. package/rules/prompt-injection/ATR-2026-00256-base-n-encoding-jailbreak.yaml +2 -2
  517. package/rules/prompt-injection/ATR-2026-00257-cipher-transposition-jailbreak.yaml +2 -2
  518. package/rules/prompt-injection/ATR-2026-00258-unicode-tag-injection.yaml +2 -2
  519. package/rules/prompt-injection/ATR-2026-00264-latent-injection-translation.yaml +2 -2
  520. package/rules/prompt-injection/ATR-2026-00265-latent-injection-rag-document.yaml +2 -2
  521. package/rules/prompt-injection/ATR-2026-00267-gcg-adversarial-suffix.yaml +2 -2
  522. package/rules/prompt-injection/ATR-2026-00272-hypothetical-response-smuggling.yaml +2 -2
  523. package/rules/prompt-injection/ATR-2026-00276-invisible-unicode-bidi-injection.yaml +2 -2
  524. package/rules/prompt-injection/ATR-2026-00278-dra-disguise-reconstruction-attack.yaml +2 -2
  525. package/rules/prompt-injection/ATR-2026-00280-policy-puppetry-xml-injection.yaml +2 -2
  526. package/rules/prompt-injection/ATR-2026-00282-perez-prompt-injection-hijack.yaml +2 -2
  527. package/rules/prompt-injection/ATR-2026-00285-alternate-encoding-jailbreak.yaml +2 -2
  528. package/rules/prompt-injection/ATR-2026-00286-latent-injection-embedded-context.yaml +2 -2
  529. package/rules/prompt-injection/ATR-2026-00296-shell-command-injection.yaml +4 -4
  530. package/rules/prompt-injection/ATR-2026-00297-python-code-execution-rce.yaml +4 -4
  531. package/rules/prompt-injection/ATR-2026-00308-zalgo-diacritic-overload-encoding.yaml +2 -2
  532. package/rules/prompt-injection/ATR-2026-00309-braille-unicode-encoded-injection.yaml +2 -2
  533. package/rules/prompt-injection/ATR-2026-00310-ecoji-emoji-encoded-injection.yaml +2 -2
  534. package/rules/prompt-injection/ATR-2026-00311-base2048-unicode-script-injection.yaml +2 -2
  535. package/rules/prompt-injection/ATR-2026-00312-unicode-variant-selector-ascii-smuggling.yaml +2 -2
  536. package/rules/prompt-injection/ATR-2026-00313-sneaky-bits-zero-width-binary.yaml +2 -2
  537. package/rules/prompt-injection/ATR-2026-00315-sata-masked-language-model-jailbreak.yaml +2 -2
  538. package/rules/prompt-injection/ATR-2026-00316-function-masking-predict-mask-bypass.yaml +2 -2
  539. package/rules/prompt-injection/ATR-2026-00321-hyphenated-system-instruction-injection.yaml +2 -2
  540. package/rules/prompt-injection/ATR-2026-00359-bank-phishing-smtp-email-code.yaml +3 -3
  541. package/rules/prompt-injection/ATR-2026-00367-emoji-flag-encoded-hidden-phrase.yaml +2 -2
  542. package/rules/prompt-injection/ATR-2026-00373-piracy-torrent-site-list-request.yaml +3 -3
  543. package/rules/prompt-injection/ATR-2026-00378-chatgpt-dom-javascript-redirect-manipulation.yaml +2 -2
  544. package/rules/prompt-injection/ATR-2026-00382-cocaine-component-development-request.yaml +3 -3
  545. package/rules/prompt-injection/ATR-2026-00390-explicit-sexual-content-poem-request.yaml +2 -2
  546. package/rules/prompt-injection/ATR-2026-00394-backspace-deletion-character-injection.yaml +2 -2
  547. package/rules/prompt-injection/ATR-2026-00395-llm-special-token-boundary-injection.yaml +4 -4
  548. package/rules/prompt-injection/ATR-2026-00396-toxic-continuation-prefix-injection.yaml +4 -4
  549. package/rules/prompt-injection/ATR-2026-00397-snowball-impossible-reasoning-injection.yaml +4 -4
  550. package/rules/prompt-injection/ATR-2026-00399-latent-injection-document-separator-token.yaml +4 -4
  551. package/rules/prompt-injection/ATR-2026-00400-latent-injection-ignore-instruction-keyword.yaml +2 -2
  552. package/rules/prompt-injection/ATR-2026-00401-leakreplay-cloze-mask-training-data-elicitation.yaml +3 -3
  553. package/rules/prompt-injection/ATR-2026-00403-glitch-token-repeat-back-elicitation.yaml +3 -3
  554. package/rules/prompt-injection/ATR-2026-00407-echo-sql-jinja-template-injection.yaml +4 -4
  555. package/rules/prompt-injection/ATR-2026-00408-dra-parenthesis-character-reconstruction-attack.yaml +2 -2
  556. package/rules/prompt-injection/ATR-2026-00409-phrasing-past-future-tense-harmful-query.yaml +2 -2
  557. package/rules/prompt-injection/ATR-2026-00410-lmrc-harm-category-direct-elicitation.yaml +3 -3
  558. package/rules/prompt-injection/ATR-2026-00412-figstep-image-list-multimodal-jailbreak.yaml +2 -2
  559. package/rules/prompt-injection/ATR-2026-00414-continuation-ethnic-slur-completion-elicitation.yaml +3 -3
  560. package/rules/prompt-injection/ATR-2026-00420-copilot-studio-sharepoint-indirect-injection.yaml +4 -4
  561. package/rules/prompt-injection/ATR-2026-00442-quoted-exact-output-forcing.yaml +4 -4
  562. package/rules/prompt-injection/ATR-2026-00443-word-fragment-concat-assembly.yaml +2 -2
  563. package/rules/prompt-injection/ATR-2026-00444-unicode-obfuscation-in-user-input.yaml +2 -2
  564. package/rules/prompt-injection/ATR-2026-00445-translation-hijack-with-side-output.yaml +4 -4
  565. package/rules/prompt-injection/ATR-2026-00446-variable-assignment-payload-injection.yaml +3 -3
  566. package/rules/prompt-injection/ATR-2026-00447-fictional-generation-containing-target.yaml +3 -3
  567. package/rules/prompt-injection/ATR-2026-00452-direct-pwned-payload-injection.yaml +2 -2
  568. package/rules/prompt-injection/ATR-2026-00453-secret-key-reveal-demand.yaml +2 -2
  569. package/rules/prompt-injection/ATR-2026-00454-backslash-per-character-encoding.yaml +7 -4
  570. package/rules/prompt-injection/ATR-2026-00455-no-period-output-override.yaml +2 -2
  571. package/rules/prompt-injection/ATR-2026-00456-conditional-empty-input-injection.yaml +2 -2
  572. package/rules/prompt-injection/ATR-2026-00457-garak-dan-to-every-prompt.yaml +2 -2
  573. package/rules/prompt-injection/ATR-2026-00458-garak-dra-step-by-step.yaml +2 -2
  574. package/rules/prompt-injection/ATR-2026-00459-garak-dan-an-ai-language.yaml +2 -2
  575. package/rules/prompt-injection/ATR-2026-00460-garak-dan-no-matter-how.yaml +2 -2
  576. package/rules/prompt-injection/ATR-2026-00461-garak-goodside-mixedunassigned.yaml +2 -2
  577. package/rules/prompt-injection/ATR-2026-00462-garak-gcg-mixedunassigned.yaml +2 -2
  578. package/rules/prompt-injection/ATR-2026-00463-garak-lmrc-mixedunassigned.yaml +2 -2
  579. package/rules/prompt-injection/ATR-2026-00464-garak-dan-i-would-like.yaml +2 -2
  580. package/rules/prompt-injection/ATR-2026-00465-garak-dan-your-prompt-here.yaml +2 -2
  581. package/rules/prompt-injection/ATR-2026-00466-garak-latentinjection-following-text-from.yaml +2 -2
  582. package/rules/prompt-injection/ATR-2026-00467-garak-dan-act-as-a.yaml +2 -2
  583. package/rules/prompt-injection/ATR-2026-00468-garak-goat-the-target-llm.yaml +2 -2
  584. package/rules/prompt-injection/ATR-2026-00469-garak-dan-at-the-end.yaml +2 -2
  585. package/rules/prompt-injection/ATR-2026-00470-garak-dan-as-an-ai.yaml +2 -2
  586. package/rules/prompt-injection/ATR-2026-00472-garak-dan-are-going-to.yaml +3 -3
  587. package/rules/prompt-injection/ATR-2026-00473-garak-lmrc-how-can-i.yaml +2 -2
  588. package/rules/prompt-injection/ATR-2026-00474-garak-dan-that-chatgpt-has.yaml +2 -2
  589. package/rules/prompt-injection/ATR-2026-00475-garak-web-injection-alert-1-script.yaml +2 -2
  590. package/rules/prompt-injection/ATR-2026-00476-garak-web-injection-javascript-alert-1.yaml +2 -2
  591. package/rules/prompt-injection/ATR-2026-00477-garak-latentinjection-translate-the-following-text.yaml +2 -2
  592. package/rules/prompt-injection/ATR-2026-00478-garak-latentinjection-abuse-contact-email.yaml +2 -2
  593. package/rules/prompt-injection/ATR-2026-00479-garak-latentinjection-mixedunassigned.yaml +2 -2
  594. package/rules/prompt-injection/ATR-2026-00480-garak-dan-the-role-of.yaml +2 -2
  595. package/rules/prompt-injection/ATR-2026-00481-garak-dan-mixedunassigned.yaml +2 -2
  596. package/rules/prompt-injection/ATR-2026-00482-garak-lmrc-what-s-an.yaml +2 -2
  597. package/rules/prompt-injection/ATR-2026-00483-garak-dan-the-user-s.yaml +2 -2
  598. package/rules/prompt-injection/ATR-2026-00484-garak-dan-and-you-will.yaml +2 -2
  599. package/rules/prompt-injection/ATR-2026-00485-garak-dan-and-does-not.yaml +3 -3
  600. package/rules/prompt-injection/ATR-2026-00486-garak-dan-t-care-about.yaml +2 -2
  601. package/rules/prompt-injection/ATR-2026-00487-garak-dan-and-nothing-else.yaml +2 -2
  602. package/rules/prompt-injection/ATR-2026-00488-garak-encoding-alert-1-script.yaml +2 -2
  603. package/rules/prompt-injection/ATR-2026-00489-garak-encoding-javascript-alert-1.yaml +2 -2
  604. package/rules/prompt-injection/ATR-2026-00490-garak-dan-in-order-to.yaml +2 -2
  605. package/rules/prompt-injection/ATR-2026-00492-garak-dan-want-you-to.yaml +2 -2
  606. package/rules/prompt-injection/ATR-2026-00493-garak-latentinjection-registrar-iana-id.yaml +2 -2
  607. package/rules/prompt-injection/ATR-2026-00495-garak-dan-insert-prompt-here.yaml +2 -2
  608. package/rules/prompt-injection/ATR-2026-00496-garak-dan-no-matter-what.yaml +2 -2
  609. package/rules/prompt-injection/ATR-2026-00497-garak-encoding-mixedunassigned.yaml +2 -2
  610. package/rules/prompt-injection/ATR-2026-00498-garak-web-injection-mixedunassigned.yaml +2 -2
  611. package/rules/prompt-injection/ATR-2026-00499-garak-dan-from-now-on.yaml +2 -2
  612. package/rules/prompt-injection/ATR-2026-00503-fake-error-state-takeover-unrestricted-replacement-bot.yaml +2 -2
  613. package/rules/prompt-injection/ATR-2026-00506-nevermind-override-goal-hijacking-in-user-input-promptinject.yaml +2 -2
  614. package/rules/prompt-injection/ATR-2026-00507-screaming-stop-goal-hijacking-in-user-input-promptinject.yaml +2 -2
  615. package/rules/prompt-injection/ATR-2026-00508-escape-delimiter-wrapped-goal-hijacking-in-user-input-prompt.yaml +2 -2
  616. package/rules/prompt-injection/ATR-2026-00509-prompt-leaking-via-ignore-previous-instructions-in-user-inpu.yaml +2 -2
  617. package/rules/prompt-injection/ATR-2026-00510-delayed-tool-invocation-injection.yaml +4 -4
  618. package/rules/prompt-injection/ATR-2026-00511-mcp-web-context-poisoning.yaml +7 -2
  619. package/rules/prompt-injection/ATR-2026-00512-rules-file-backdoor-injection.yaml +2 -2
  620. package/rules/prompt-injection/ATR-2026-00515-hidden-text-prompt-injection.yaml +3 -3
  621. package/rules/prompt-injection/ATR-2026-00518-ignore-previous-and-following-instructions-output-command-promptinject.yaml +2 -2
  622. package/rules/prompt-injection/ATR-2026-00519-tautology-logic-noise-injection-promptbench.yaml +2 -2
  623. package/rules/prompt-injection/ATR-2026-00520-nlp-task-random-token-suffix-injection-promptbench.yaml +2 -2
  624. package/rules/prompt-injection/ATR-2026-00535-windsurf-ide-zero-click-prompt-injection.yaml +4 -4
  625. package/rules/prompt-injection/ATR-2026-00550-untrusted-retrieval-to-privileged-tool.yaml +23 -12
  626. package/rules/prompt-injection/ATR-2026-00554-langchain-vulnerable-to-template-injecti.yaml +2 -2
  627. package/rules/prompt-injection/ATR-2026-00565-the-llm-cli-tool-thru-0-27-1-contains-a-.yaml +2 -2
  628. package/rules/prompt-injection/ATR-2026-00573-semantic-paraphrased-injection.yaml +2 -2
  629. package/rules/prompt-injection/ATR-2026-00579-mcp-tool-description-line-jumping-injection.yaml +3 -4
  630. package/rules/prompt-injection/ATR-2026-00584-indirect-injection-via-tool-response.yaml +4 -5
  631. package/rules/prompt-injection/ATR-2026-00700-structured-data-payload-injection.yaml +8 -3
  632. package/rules/prompt-injection/ATR-2026-00701-ipi-tool-output-xss-injection.yaml +4 -4
  633. package/rules/prompt-injection/ATR-2026-01000-context-ignore-fake-completion-prefix.yaml +2 -2
  634. package/rules/prompt-injection/ATR-2026-01001-direct-pi-instruction-override-secret-key.yaml +2 -2
  635. package/rules/prompt-injection/ATR-2026-01002-role-escalation-false-authority-claim.yaml +2 -2
  636. package/rules/prompt-injection/ATR-2026-01005-many-shot-repetition-override.yaml +2 -2
  637. package/rules/prompt-injection/ATR-2026-01006-payload-split-string-concat-injection.yaml +2 -2
  638. package/rules/prompt-injection/ATR-2026-01007-token-repeat-flooding-injection.yaml +2 -2
  639. package/rules/prompt-injection/ATR-2026-01009-virtual-world-bypass-fictional-pii.yaml +3 -3
  640. package/rules/prompt-injection/ATR-2026-01012-encoding-evasion-decode-execute.yaml +2 -2
  641. package/rules/prompt-injection/ATR-2026-01013-language-evasion-multilingual-credential.yaml +2 -2
  642. package/rules/prompt-injection/ATR-2026-01015-evasion-refusal-suppression.yaml +3 -3
  643. package/rules/prompt-injection/ATR-2026-01016-evasion-response-priming-forced-opener.yaml +2 -2
  644. package/rules/prompt-injection/ATR-2026-01017-evasion-dual-response-split-output.yaml +2 -2
  645. package/rules/prompt-injection/ATR-2026-01018-evasion-shell-injection-eval.yaml +5 -5
  646. package/rules/prompt-injection/ATR-2026-01019-sysprompt-override-fake-diagnostic-mode.yaml +2 -2
  647. package/rules/prompt-injection/ATR-2026-01020-spikee-doc-embedded-base64-payload.yaml +3 -3
  648. package/rules/prompt-injection/ATR-2026-01021-spikee-doc-embedded-translation-injection.yaml +3 -3
  649. package/rules/prompt-injection/ATR-2026-01023-evasion-opposite-intent-negation-trick.yaml +2 -2
  650. package/rules/prompt-injection/ATR-2026-01024-evasion-persona-override-rule-breaker.yaml +2 -2
  651. package/rules/prompt-injection/ATR-2026-01025-evasion-hypothetical-fictional-execution-framing.yaml +3 -3
  652. package/rules/prompt-injection/ATR-2026-01026-evasion-unicode-glitch-token-anomaly.yaml +2 -2
  653. package/rules/prompt-injection/ATR-2026-01304-indirect-injection-carrier-important-override.yaml +4 -4
  654. package/rules/prompt-injection/ATR-2026-01757-hypothetical-framing-bypass-research-audit.yaml +3 -3
  655. package/rules/prompt-injection/ATR-2026-01758-hypothetical-fictional-story-bypass.yaml +3 -3
  656. package/rules/prompt-injection/ATR-2026-01759-dos-new-important-instructions-injection-in-document.yaml +2 -2
  657. package/rules/prompt-injection/ATR-2026-01771-semantic-jailbreak-framing.yaml +3 -3
  658. package/rules/prompt-injection/ATR-2026-01800-asb-trigger-marker-tool-coercion.yaml +4 -4
  659. package/rules/prompt-injection/ATR-2026-01860-llmail-chat-template-boundary-spoof.yaml +3 -3
  660. package/rules/prompt-injection/ATR-2026-01861-llmail-pseudo-xml-role-injection.yaml +3 -3
  661. package/rules/prompt-injection/ATR-2026-01865-llmail-fake-email-boundary-marker.yaml +3 -3
  662. package/rules/prompt-injection/ATR-2026-01900-output-encoding.yaml +2 -2
  663. package/rules/prompt-injection/ATR-2026-01901-output-scrambling.yaml +2 -2
  664. package/rules/prompt-injection/ATR-2026-01902-output-emoji.yaml +2 -2
  665. package/rules/prompt-injection/ATR-2026-01903-output-language.yaml +2 -2
  666. package/rules/prompt-injection/ATR-2026-01904-link-injection.yaml +3 -3
  667. package/rules/prompt-injection/ATR-2026-01905-promotional-injection.yaml +2 -2
  668. package/rules/prompt-injection/ATR-2026-01906-content-manipulation.yaml +4 -4
  669. package/rules/prompt-injection/ATR-2026-01920-access-grant-coercion.yaml +3 -3
  670. package/rules/prompt-injection/ATR-2026-01921-access-denial-inversion.yaml +3 -3
  671. package/rules/prompt-injection/ATR-2026-01922-authorization-state-spoofing.yaml +3 -3
  672. package/rules/prompt-injection/ATR-2026-01923-forged-input-boundary-markers.yaml +3 -3
  673. package/rules/prompt-injection/ATR-2026-01925-encoded-payload-decoding-coercion.yaml +3 -3
  674. package/rules/prompt-injection/ATR-2026-01926-cross-lingual-authorization-laundering.yaml +3 -3
  675. package/rules/prompt-injection/ATR-2026-02001-ignore-below-instructions-mirror-of-ignore-previ.yaml +3 -4
  676. package/rules/prompt-injection/ATR-2026-02002-instruction-set-probe-or-supplant-direct-meta-qu.yaml +3 -4
  677. package/rules/prompt-injection/ATR-2026-02003-task-pivot-override-abandon-the-cover-task-trans.yaml +3 -4
  678. package/rules/prompt-injection/ATR-2026-02004-regional-indicator-flag-emoji-alphabet-letter-sp.yaml +3 -4
  679. package/rules/prompt-injection/ATR-2026-02005-actor-never-breaks-character-roleplay-dan-style-.yaml +3 -4
  680. package/rules/prompt-injection/ATR-2026-02006-fuzzy-cross-lingual-i-have-been-pwned-near-miss-.yaml +3 -4
  681. package/rules/prompt-injection/ATR-2026-02007-bare-key-elicitation-token.yaml +3 -4
  682. package/rules/prompt-injection/ATR-2026-02008-translation-chain-output-laundering-state-secret.yaml +3 -4
  683. package/rules/prompt-injection/ATR-2026-02009-bare-key-elicitation-trailing-colon.yaml +3 -4
  684. package/rules/prompt-injection/ATR-2026-02010-emoji-only-payload.yaml +3 -4
  685. package/rules/prompt-injection/ATR-2026-02011-malformed-grammar-pwned-success-claim.yaml +3 -4
  686. package/rules/prompt-injection/ATR-2026-02012-movie-title-generator-instruction-wrapper-for-pw.yaml +3 -4
  687. package/rules/prompt-injection/ATR-2026-02013-delimiter-fence-ignore-instructions-override.yaml +3 -4
  688. package/rules/prompt-injection/ATR-2026-02014-spliced-target-string-letters-of-a-filtered-cana.yaml +3 -4
  689. package/rules/prompt-injection/ATR-2026-02015-dense-emoji-only-payload-flood.yaml +3 -4
  690. package/rules/prompt-injection/ATR-2026-02016-reversed-payload-string.yaml +3 -4
  691. package/rules/prompt-injection/ATR-2026-02018-regional-indicator-flag-emoji-letter-spelling-sp.yaml +3 -4
  692. package/rules/prompt-injection/ATR-2026-02019-python-interpreter-role-assignment-exec-framing.yaml +3 -4
  693. package/rules/prompt-injection/ATR-2026-02020-obfuscated-token-reconstruction-via-character-su.yaml +3 -4
  694. package/rules/prompt-injection/ATR-2026-02120-agentdojo-important-message-identity-spoof-pretext.yaml +2 -3
  695. package/rules/prompt-injection/ATR-2026-02210-negation-topic-evil-persona-two-script-jailbreak.yaml +2 -3
  696. package/rules/prompt-injection/ATR-2026-02230-conditional-keyword-trigger-override.yaml +2 -3
  697. package/rules/prompt-injection/ATR-2026-02232-brand-persona-opinion-hijack.yaml +2 -3
  698. package/rules/prompt-injection/ATR-2026-02374-rot13-base64-obfuscated-shell-jailbreak.yaml +3 -4
  699. package/rules/prompt-injection/ATR-2026-02377-novel-persona-jailbreak-cosignal.yaml +99 -0
  700. package/rules/skill-compromise/ATR-2026-00060-skill-impersonation.yaml +4 -4
  701. package/rules/skill-compromise/ATR-2026-00061-description-behavior-mismatch.yaml +100 -9
  702. package/rules/skill-compromise/ATR-2026-00062-hidden-capability.yaml +12 -9
  703. package/rules/skill-compromise/ATR-2026-00063-skill-chain-attack.yaml +18 -7
  704. package/rules/skill-compromise/ATR-2026-00064-over-permissioned-skill.yaml +8 -6
  705. package/rules/skill-compromise/ATR-2026-00065-skill-update-attack.yaml +2 -3
  706. package/rules/skill-compromise/ATR-2026-00066-parameter-injection.yaml +11 -7
  707. package/rules/skill-compromise/ATR-2026-00120-skill-instruction-injection.yaml +6 -3
  708. package/rules/skill-compromise/ATR-2026-00121-skill-dangerous-script.yaml +8 -5
  709. package/rules/skill-compromise/ATR-2026-00122-skill-weaponized-instruction.yaml +3 -3
  710. package/rules/skill-compromise/ATR-2026-00123-skill-overreach-permissions.yaml +2 -3
  711. package/rules/skill-compromise/ATR-2026-00124-skill-name-squatting.yaml +2 -3
  712. package/rules/skill-compromise/ATR-2026-00125-context-poisoning-compaction.yaml +2 -3
  713. package/rules/skill-compromise/ATR-2026-00126-skill-rug-pull-setup.yaml +3 -2
  714. package/rules/skill-compromise/ATR-2026-00127-subcommand-overflow.yaml +2 -3
  715. package/rules/skill-compromise/ATR-2026-00128-html-comment-hidden-payload.yaml +2 -2
  716. package/rules/skill-compromise/ATR-2026-00129-unicode-smuggling.yaml +2 -2
  717. package/rules/skill-compromise/ATR-2026-00134-fork-claim-impersonation.yaml +3 -2
  718. package/rules/skill-compromise/ATR-2026-00135-exfil-url-in-instructions.yaml +2 -2
  719. package/rules/skill-compromise/ATR-2026-00147-fork-impersonation.yaml +2 -3
  720. package/rules/skill-compromise/ATR-2026-00149-skill-exfil-compound.yaml +7 -4
  721. package/rules/skill-compromise/ATR-2026-00151-fork-impersonation-install.yaml +2 -2
  722. package/rules/skill-compromise/ATR-2026-00157-timebomb-credential-exfil.yaml +2 -3
  723. package/rules/skill-compromise/ATR-2026-00200-agent-memory-config-tampering.yaml +4 -4
  724. package/rules/skill-compromise/ATR-2026-00214-credential-theft.yaml +2 -2
  725. package/rules/skill-compromise/ATR-2026-00217-credential-harvesting.yaml +7 -3
  726. package/rules/skill-compromise/ATR-2026-00220-malware-dropper.yaml +2 -2
  727. package/rules/skill-compromise/ATR-2026-00222-credential-harvesting.yaml +2 -2
  728. package/rules/skill-compromise/ATR-2026-00223-reverse-shell-dropper.yaml +2 -2
  729. package/rules/skill-compromise/ATR-2026-00224-credential-exfiltration.yaml +7 -3
  730. package/rules/skill-compromise/ATR-2026-00225-c2-communication.yaml +2 -2
  731. package/rules/skill-compromise/ATR-2026-00260-package-hallucination.yaml +3 -3
  732. package/rules/skill-compromise/ATR-2026-00262-av-evasion-code-gen.yaml +2 -2
  733. package/rules/skill-compromise/ATR-2026-00263-credential-file-read-gen.yaml +3 -3
  734. package/rules/skill-compromise/ATR-2026-00266-malware-dropper-gen.yaml +2 -2
  735. package/rules/skill-compromise/ATR-2026-00283-malwaregen-generic-virus-payload-request.yaml +2 -2
  736. package/rules/skill-compromise/ATR-2026-00398-huggingface-unsafe-model-artifact-load.yaml +4 -4
  737. package/rules/skill-compromise/ATR-2026-00425-nl-persistent-covert-hook.yaml +7 -4
  738. package/rules/skill-compromise/ATR-2026-00427-nl-fake-error-instruction-bypass.yaml +7 -4
  739. package/rules/skill-compromise/ATR-2026-00429-nl-skill-self-modification.yaml +6 -3
  740. package/rules/skill-compromise/ATR-2026-00523-claude-code-hooks-session-start-pre-trust-rce.yaml +5 -7
  741. package/rules/skill-compromise/ATR-2026-00525-mini-shai-hulud-gh-token-monitor-persistence.yaml +2 -2
  742. package/rules/skill-compromise/ATR-2026-00527-skill-silent-git-remote-mirror-exfiltration.yaml +3 -3
  743. package/rules/skill-compromise/ATR-2026-01755-backdoor-pot-linguistic-trigger-phrase.yaml +3 -3
  744. package/rules/skill-compromise/ATR-2026-01756-backdoor-pot-symbol-emoticon-trigger.yaml +4 -4
  745. package/rules/skill-compromise/ATR-2026-02261-code-credential-exfil-chain.yaml +3 -3
  746. package/rules/skill-compromise/ATR-2026-02405-malicious-skill-package-structure.yaml +276 -0
  747. package/rules/skill-compromise/ATR-2026-02410-malicious-artifact-on-vendor-domain.yaml +273 -0
  748. package/rules/tool-poisoning/ATR-2026-00010-mcp-malicious-response.yaml +28 -26
  749. package/rules/tool-poisoning/ATR-2026-00011-tool-output-injection.yaml +3 -4
  750. package/rules/tool-poisoning/ATR-2026-00012-unauthorized-tool-call.yaml +9 -6
  751. package/rules/tool-poisoning/ATR-2026-00013-tool-ssrf.yaml +8 -6
  752. package/rules/tool-poisoning/ATR-2026-00095-supply-chain-poisoning.yaml +13 -11
  753. package/rules/tool-poisoning/ATR-2026-00096-registry-poisoning.yaml +20 -18
  754. package/rules/tool-poisoning/ATR-2026-00100-consent-bypass-instruction.yaml +4 -5
  755. package/rules/tool-poisoning/ATR-2026-00101-trust-escalation-override.yaml +4 -5
  756. package/rules/tool-poisoning/ATR-2026-00103-hidden-safety-bypass-instruction.yaml +3 -4
  757. package/rules/tool-poisoning/ATR-2026-00105-silent-action-concealment.yaml +4 -5
  758. package/rules/tool-poisoning/ATR-2026-00106-schema-description-contradiction.yaml +3 -4
  759. package/rules/tool-poisoning/ATR-2026-00161-important-tag-cross-tool-shadowing.yaml +10 -7
  760. package/rules/tool-poisoning/ATR-2026-00209-mcpwn-runaway-invocation.yaml +4 -4
  761. package/rules/tool-poisoning/ATR-2026-00210-flowise-system-message-override.yaml +4 -4
  762. package/rules/tool-poisoning/ATR-2026-00259-ansi-escape-injection.yaml +2 -2
  763. package/rules/tool-poisoning/ATR-2026-00270-xss-in-tool-response.yaml +2 -2
  764. package/rules/tool-poisoning/ATR-2026-00277-echo-template-command-injection.yaml +3 -3
  765. package/rules/tool-poisoning/ATR-2026-00393-ansi-code-elicitation-request.yaml +4 -4
  766. package/rules/tool-poisoning/ATR-2026-00415-flowise-custom-mcp-stdio-rce.yaml +4 -4
  767. package/rules/tool-poisoning/ATR-2026-00419-cursor-mcp-zero-click-config.yaml +5 -5
  768. package/rules/tool-poisoning/ATR-2026-00434-mcp-remote-authorization-endpoint-command-injection.yaml +4 -4
  769. package/rules/tool-poisoning/ATR-2026-00435-azure-mcp-server-missing-authentication.yaml +4 -4
  770. package/rules/tool-poisoning/ATR-2026-00448-spring-ai-milvus-filter-injection.yaml +4 -4
  771. package/rules/tool-poisoning/ATR-2026-00494-garak-exploitation-mixedunassigned.yaml +2 -2
  772. package/rules/tool-poisoning/ATR-2026-00513-package-hallucination-exploitation.yaml +2 -2
  773. package/rules/tool-poisoning/ATR-2026-00521-shell-command-injection-agent-tool-context.yaml +2 -2
  774. package/rules/tool-poisoning/ATR-2026-00522-sql-injection-natural-language-agent-interface.yaml +2 -2
  775. package/rules/tool-poisoning/ATR-2026-00526-claude-code-shell-metachar-in-double-quoted-path.yaml +2 -2
  776. package/rules/tool-poisoning/ATR-2026-00529-litellm-proxy-sqli-cisa-kev.yaml +3 -3
  777. package/rules/tool-poisoning/ATR-2026-00530-ms-agent-shell-tool-unsanitized-argv-rce.yaml +2 -2
  778. package/rules/tool-poisoning/ATR-2026-00531-praisonai-unauthenticated-agent-api.yaml +4 -4
  779. package/rules/tool-poisoning/ATR-2026-00532-apache-doris-mcp-sql-injection.yaml +4 -4
  780. package/rules/tool-poisoning/ATR-2026-00533-apache-pinot-mcp-unauthenticated-takeover.yaml +4 -4
  781. package/rules/tool-poisoning/ATR-2026-00534-alibaba-rds-mcp-unauthenticated-metadata-exfil.yaml +4 -4
  782. package/rules/tool-poisoning/ATR-2026-00536-nginx-ui-mcp-unauthenticated-command-execution.yaml +5 -5
  783. package/rules/tool-poisoning/ATR-2026-00537-fastmcp-server-name-cmd-injection-windows.yaml +4 -5
  784. package/rules/tool-poisoning/ATR-2026-00538-langchain-chatchat-mcp-stdio-unauthenticated-rce.yaml +12 -9
  785. package/rules/tool-poisoning/ATR-2026-00540-praisonai-parse-mcp-command-cli-injection.yaml +9 -7
  786. package/rules/tool-poisoning/ATR-2026-00541-agent-zero-mcp-config-command-injection.yaml +5 -6
  787. package/rules/tool-poisoning/ATR-2026-00542-upsonic-mcp-command-allowlist-bypass.yaml +5 -6
  788. package/rules/tool-poisoning/ATR-2026-00543-litellm-mcp-server-argv-injection.yaml +5 -6
  789. package/rules/tool-poisoning/ATR-2026-00544-praisonai-pth-file-path-traversal-rce.yaml +4 -5
  790. package/rules/tool-poisoning/ATR-2026-00545-praisonai-tool-override-unauth-rce.yaml +4 -5
  791. package/rules/tool-poisoning/ATR-2026-00561-fastmcp-vulnerable-to-windows-command-in.yaml +2 -2
  792. package/rules/tool-poisoning/ATR-2026-00567-mcp-stdio-config-command-injection.yaml +2 -2
  793. package/rules/tool-poisoning/ATR-2026-00568-agent-ssrf-cloud-metadata-file-inclusion.yaml +2 -2
  794. package/rules/tool-poisoning/ATR-2026-00572-symjack-symlink-config-redirection.yaml +4 -4
  795. package/rules/tool-poisoning/ATR-2026-00575-miasma-npm-worm-agent-config-backdoor.yaml +5 -5
  796. package/rules/tool-poisoning/ATR-2026-00576-hades-agent-credential-theft.yaml +4 -4
  797. package/rules/tool-poisoning/ATR-2026-00577-create-mcp-server-stdio-exec-command-injection.yaml +55 -7
  798. package/rules/tool-poisoning/ATR-2026-00581-mcp-tool-rug-pull-post-approval-redefinition.yaml +5 -6
  799. package/rules/tool-poisoning/ATR-2026-00714-tool-camouflage-forced-tool-call.yaml +8 -3
  800. package/rules/tool-poisoning/ATR-2026-00715-tool-knowledge-hijack-identity-injection.yaml +8 -3
  801. package/rules/tool-poisoning/ATR-2026-00716-ipi-data-destruction-carrier.yaml +3 -3
  802. package/rules/tool-poisoning/ATR-2026-00720-tool-misuse-privilege-escalation-social.yaml +7 -2
  803. package/rules/tool-poisoning/ATR-2026-01300-mcp-notes-param-chat-history-exfil.yaml +6 -6
  804. package/rules/tool-poisoning/ATR-2026-01301-tool-description-exclusive-tool-override.yaml +4 -4
  805. package/rules/tool-poisoning/ATR-2026-01302-fake-tool-result-instruction-injection.yaml +4 -4
  806. package/rules/tool-poisoning/ATR-2026-01303-tool-schema-enumeration-social-engineering.yaml +4 -4
  807. package/rules/tool-poisoning/ATR-2026-01306-mcp-oauth-command-injection.yaml +4 -4
  808. package/rules/tool-poisoning/ATR-2026-01307-mcp-dns-rebinding-attack.yaml +4 -4
  809. package/rules/tool-poisoning/ATR-2026-01310-mcp-tool-description-compliance-history-exfil.yaml +4 -4
  810. package/rules/tool-poisoning/ATR-2026-01775-semantic-mcp-tool-manifest-poisoning.yaml +6 -6
  811. package/rules/tool-poisoning/ATR-2026-01927-mcp-server-kubernetes-kubectl-command-injection.yaml +5 -6
  812. package/rules/tool-poisoning/ATR-2026-01928-framelink-figma-mcp-curl-fallback-command-injection.yaml +4 -5
  813. package/rules/tool-poisoning/ATR-2026-01930-mcp-sampling-prompt-injection.yaml +5 -5
  814. package/rules/tool-poisoning/ATR-2026-01931-gemini-mcp-tool-command-injection-file-exfil.yaml +4 -4
  815. package/rules/tool-poisoning/ATR-2026-01932-shadow-undeclared-mcp-server-registration.yaml +4 -4
  816. package/rules/tool-poisoning/ATR-2026-01935-litellm-custom-code-sandbox-escape-cve-2026-40217.yaml +5 -6
  817. package/rules/tool-poisoning/ATR-2026-01952-praisonai-codemode-sandbox-escape-rce.yaml +3 -4
  818. package/rules/tool-poisoning/ATR-2026-01953-praisonai-codemode-function-ctor-sandbox-escape.yaml +3 -4
  819. package/rules/tool-poisoning/ATR-2026-01959-openhuman-shell-allowlist-env-prefix-bypass.yaml +48 -7
  820. package/rules/tool-poisoning/ATR-2026-01963-praisonai-action-orchestrator-step-target-path-traversal-rce.yaml +3 -4
  821. package/rules/tool-poisoning/ATR-2026-01965-flowise-custommcp-os-command-rce.yaml +3 -4
  822. package/rules/tool-poisoning/ATR-2026-01967-deepchat-mermaid-xss-rce-ipc-mcp-register.yaml +3 -4
  823. package/rules/tool-poisoning/ATR-2026-01968-deepchat-markdown-deeplink-openexternal-rce-bypass.yaml +5 -6
  824. package/rules/tool-poisoning/ATR-2026-01970-praisonai-filetools-normpath-path-traversal.yaml +11 -7
  825. package/rules/tool-poisoning/ATR-2026-01973-anythingllm-logo-endpoint-path-traversal.yaml +3 -4
  826. package/rules/tool-poisoning/ATR-2026-01978-anythingllm-collector-process-filename-path-traversal-delete.yaml +3 -4
  827. package/rules/tool-poisoning/ATR-2026-01979-pandasai-prompt-injection-dunder-sandbox-escape-rce.yaml +3 -4
  828. package/rules/tool-poisoning/ATR-2026-01980-agentic-flow-mcp-tool-param-command-injection.yaml +7 -5
  829. package/rules/tool-poisoning/ATR-2026-01982-dbt-mcp-node-selection-argument-injection.yaml +3 -4
  830. package/rules/tool-poisoning/ATR-2026-01983-mcp-for-stata-log-file-name-command-injection.yaml +3 -4
  831. package/rules/tool-poisoning/ATR-2026-01985-mcp-connect-bridge-unauth-process-spawn-rce.yaml +3 -4
  832. package/rules/tool-poisoning/ATR-2026-01987-langroid-sqlchatagent-prompt-to-sql-rce.yaml +3 -4
  833. package/rules/tool-poisoning/ATR-2026-02021-mcp-inspector-unauthenticated-proxy-rce.yaml +5 -6
  834. package/rules/tool-poisoning/ATR-2026-02022-curxecute-cursor-mcp-json-injected-server-rce.yaml +5 -6
  835. package/rules/tool-poisoning/ATR-2026-02023-escaperoute-filesystem-mcp-prefix-bypass.yaml +5 -6
  836. package/rules/tool-poisoning/ATR-2026-02024-escaperoute-filesystem-mcp-symlink-launchagent.yaml +5 -6
  837. package/rules/tool-poisoning/ATR-2026-02025-mcp-full-schema-poisoning-nondescription-field.yaml +6 -7
  838. package/rules/tool-poisoning/ATR-2026-02027-diagnostic-content-remediation-command-injection.yaml +2 -3
  839. package/rules/tool-poisoning/ATR-2026-02041-shell-injection-echo-marker-poc.yaml +2 -3
  840. package/rules/tool-poisoning/ATR-2026-02102-html-injection-tool-arg-approval-ui-xss.yaml +2 -3
  841. package/rules/tool-poisoning/ATR-2026-02141-mcp-server-config-command-execution.yaml +2 -3
  842. package/rules/tool-poisoning/ATR-2026-02145-python-sandbox-escape-generator-frame-introspection.yaml +2 -3
  843. package/rules/tool-poisoning/ATR-2026-02193-ssrf-ipv6-noncanonical-loopback-bypass.yaml +2 -3
  844. package/rules/tool-poisoning/ATR-2026-02194-go-init-func-process-exec-codegen-rce.yaml +2 -3
  845. package/rules/tool-poisoning/ATR-2026-02233-unscoped-destructive-db-request-nl.yaml +2 -3
  846. package/rules/tool-poisoning/ATR-2026-02260-agentjacking-remediation-framed-execution.yaml +6 -6
  847. package/rules/tool-poisoning/ATR-2026-02263-workflow-sql-template-expression-injection.yaml +2 -2
  848. package/rules/tool-poisoning/ATR-2026-02350-mcp-json-rpc-case-duplicate-key-tool-smuggling.yaml +2 -3
  849. package/rules/tool-poisoning/ATR-2026-02352-imap-search-command-injection-email-tool-args.yaml +2 -3
  850. package/rules/tool-poisoning/ATR-2026-02372-unsigned-task-feed-npm-npx-lifecycle-rce.yaml +4 -5
  851. package/rules/tool-poisoning/ATR-2026-02376-tool-description-conversational-trigger-history-exfil.yaml +4 -5
  852. package/rules/tool-poisoning/ATR-2026-02403-mcp-external-content-missing-spotlighting.yaml +356 -0
  853. package/spec/README.md +24 -16
  854. package/spec/atr-correlation-v1.0.md +2 -2
  855. package/spec/atr-event-v1.0.md +3 -3
  856. package/spec/atr-language-detection-v1.0.md +1 -1
  857. package/spec/atr-observation-v1.0.md +323 -0
  858. package/spec/atr-profile-v1.0.md +4 -4
  859. package/spec/atr-schema.yaml +5 -3
  860. package/spec/category-registry/v1.0.yaml +2 -2
  861. package/spec/compliance-metadata.md +3 -2
  862. package/spec/conformance/README.md +4 -4
  863. package/spec/conformance/SIGNING.md +1 -1
  864. package/spec/conformance/baseline/manifest.json +1 -1
  865. package/spec/mappings/atr-to-nist-csf-2.0.md +3 -3
  866. package/spec/schema/correlation.schema.json +1 -1
  867. package/spec/schema/event.schema.json +1 -1
  868. package/spec/schema/observation.schema.json +131 -0
  869. package/spec/schema/profile.schema.json +1 -1
  870. package/spec/schema/rule.schema.json +1 -1
@@ -8,6 +8,7 @@
8
8
  * @module agent-threat-rules/quality/adapters/atr
9
9
  */
10
10
  import { load as parseYaml } from "js-yaml";
11
+ import { isMeasuredFpRate, isMeasuredSampleCount, } from "../wild-measurement.js";
11
12
  /**
12
13
  * Parse an ATR YAML rule string into RuleMetadata.
13
14
  *
@@ -67,10 +68,15 @@ export function atrRuleToMetadata(rule) {
67
68
  hasOwaspRef,
68
69
  hasMitreRef,
69
70
  hasFalsePositiveDocs,
70
- ...(rule.wild_samples !== undefined
71
+ // Only carry a wild measurement forward when it IS one. A `null` or a
72
+ // numeric string survives `!== undefined` but reaches every downstream
73
+ // comparison (`rate > threshold`) as false, which reads to a gate as a
74
+ // perfect score — see src/quality/wild-measurement.ts. Dropping it here
75
+ // makes it `undefined`, the one encoding the gates refuse.
76
+ ...(isMeasuredSampleCount(rule.wild_samples)
71
77
  ? { wildSamples: rule.wild_samples }
72
78
  : {}),
73
- ...(rule.wild_fp_rate !== undefined
79
+ ...(isMeasuredFpRate(rule.wild_fp_rate)
74
80
  ? { wildFpRate: rule.wild_fp_rate }
75
81
  : {}),
76
82
  ...(rule.wild_validated ? { wildValidatedAt: rule.wild_validated } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"atr.js","sourceRoot":"","sources":["../../../src/quality/adapters/atr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"atr.js","sourceRoot":"","sources":["../../../src/quality/adapters/atr.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"compute-confidence.d.ts","sourceRoot":"","sources":["../../src/quality/compute-confidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,CAiCrE;AAuDD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,wBAAwB,CAMrE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,OAAO,GACtB,MAAM,CAER"}
1
+ {"version":3,"file":"compute-confidence.d.ts","sourceRoot":"","sources":["../../src/quality/compute-confidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,CAiCrE;AA+DD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,wBAAwB,CAMrE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,OAAO,GACtB,MAAM,CAER"}
@@ -12,6 +12,7 @@
12
12
  *
13
13
  * @module agent-threat-rules/quality/compute-confidence
14
14
  */
15
+ import { isMeasuredFpRate, isMeasuredSampleCount } from "./wild-measurement.js";
15
16
  /** Max confidence an LLM-generated rule can reach without human review */
16
17
  const LLM_CAP_WITHOUT_REVIEW = 70;
17
18
  /**
@@ -59,11 +60,15 @@ export function computeConfidence(rule) {
59
60
  * confidence in precision (max at 10 total).
60
61
  */
61
62
  function computePrecisionScore(rule) {
62
- if (rule.wildFpRate !== undefined &&
63
- rule.wildSamples !== undefined &&
63
+ // Requires a real measurement on both axes. Under the old `!== undefined`
64
+ // check a `wild_fp_rate: null` reached `Math.min(100, null)` as 0 and scored
65
+ // a flat 100 — the maximum precision score, awarded for the absence of a
66
+ // measurement. Unmeasured rules fall through to the test-case estimate below,
67
+ // which is weaker and honest. See src/quality/wild-measurement.ts.
68
+ if (isMeasuredFpRate(rule.wildFpRate) &&
69
+ isMeasuredSampleCount(rule.wildSamples) &&
64
70
  rule.wildSamples > 0) {
65
- const fpRate = Math.max(0, Math.min(100, rule.wildFpRate));
66
- return 100 - fpRate;
71
+ return 100 - rule.wildFpRate;
67
72
  }
68
73
  // Fallback: estimate from test case depth
69
74
  const testCaseCount = rule.truePositives + rule.trueNegatives;
@@ -77,7 +82,11 @@ function computePrecisionScore(rule) {
77
82
  * 10,000+ samples gets 100.
78
83
  */
79
84
  function computeWildValidationScore(rule) {
80
- const samples = rule.wildSamples ?? 0;
85
+ // `?? 0` would keep a null/NaN sample count out, but a numeric string would
86
+ // reach Math.min as NaN and poison the score; the predicate is explicit.
87
+ const samples = isMeasuredSampleCount(rule.wildSamples)
88
+ ? rule.wildSamples
89
+ : 0;
81
90
  return Math.min(samples / 10000, 1) * 100;
82
91
  }
83
92
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"compute-confidence.js","sourceRoot":"","sources":["../../src/quality/compute-confidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compute-confidence.js","sourceRoot":"","sources":["../../src/quality/compute-confidence.ts"],"names":[],"mappings":"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"}
@@ -32,5 +32,7 @@ export type { Maturity, RuleMetadata, ConfidenceScore, QualityGateResult, Promot
32
32
  export { computeConfidence, deploymentFor, applyCrossContextPenalty, } from "./compute-confidence.js";
33
33
  export { validateRuleMeetsStandard, getRequirements } from "./quality-gate.js";
34
34
  export { canPromote, shouldDemote, getMaturityThresholds, } from "./validate-maturity.js";
35
+ export { WILD_MEASUREMENT_FIELDS, isMeasuredFpRate, isMeasuredSampleCount, unmeasuredFpReason, deriveWildFpRate, } from "./wild-measurement.js";
36
+ export type { WildScanHit, WildRateDerivation } from "./wild-measurement.js";
35
37
  export { parseATRRule, atrRuleToMetadata } from "./adapters/atr.js";
36
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG/E,OAAO,EACL,UAAU,EACV,YAAY,EACZ,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG/E,OAAO,EACL,UAAU,EACV,YAAY,EACZ,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG7E,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -34,6 +34,8 @@ export { computeConfidence, deploymentFor, applyCrossContextPenalty, } from "./c
34
34
  export { validateRuleMeetsStandard, getRequirements } from "./quality-gate.js";
35
35
  // Maturity transitions
36
36
  export { canPromote, shouldDemote, getMaturityThresholds, } from "./validate-maturity.js";
37
+ // Wild-validation measurement provenance
38
+ export { WILD_MEASUREMENT_FIELDS, isMeasuredFpRate, isMeasuredSampleCount, unmeasuredFpReason, deriveWildFpRate, } from "./wild-measurement.js";
37
39
  // Adapters
38
40
  export { parseATRRule, atrRuleToMetadata } from "./adapters/atr.js";
39
41
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAcH,UAAU;AACV,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE/E,uBAAuB;AACvB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAcH,UAAU;AACV,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE/E,uBAAuB;AACvB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,yCAAyC;AACzC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAG/B,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"quality-gate.d.ts","sourceRoot":"","sources":["../../src/quality/quality-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,QAAQ,EAER,iBAAiB,EACjB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BR,CAAC;AAEX;;;;;;;;GAQG;AACH,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAQ3D;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,YAAY,EAClB,MAAM,CAAC,EAAE,QAAQ,GAChB,iBAAiB,CAiHnB;AAMD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,YAAY,CAErD"}
1
+ {"version":3,"file":"quality-gate.d.ts","sourceRoot":"","sources":["../../src/quality/quality-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EACV,QAAQ,EAER,iBAAiB,EACjB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BR,CAAC;AAEX;;;;;;;;GAQG;AACH,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAQ3D;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,YAAY,EAClB,MAAM,CAAC,EAAE,QAAQ,GAChB,iBAAiB,CAwHnB;AAMD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,YAAY,CAErD"}
@@ -10,6 +10,7 @@
10
10
  *
11
11
  * @module agent-threat-rules/quality/quality-gate
12
12
  */
13
+ import { isMeasuredFpRate, isMeasuredSampleCount } from "./wild-measurement.js";
13
14
  /**
14
15
  * Minimum requirements for each maturity level.
15
16
  *
@@ -108,10 +109,17 @@ export function validateRuleMeetsStandard(rule, target) {
108
109
  // empirical claim (wild_fp_rate exactly 0% on >=N samples). Authors who
109
110
  // cannot meet this bar must add more detection conditions OR keep the rule
110
111
  // at maturity `draft` until they can.
112
+ // `isMeasuredFpRate(...) && === 0` rather than a bare `=== 0`: the exception
113
+ // is priced as a hard empirical claim, so it must be bought with a real
114
+ // measurement. An omitted rate already fails `=== 0`; the explicit predicate
115
+ // states the requirement instead of relying on that coincidence, and keeps a
116
+ // future `null`/`"0"` from buying the exception for free. See
117
+ // src/quality/wild-measurement.ts.
111
118
  const meetsSinglePatternException = level === "experimental" &&
112
119
  rule.conditions >= 1 &&
113
- rule.wildSamples !== undefined &&
120
+ isMeasuredSampleCount(rule.wildSamples) &&
114
121
  rule.wildSamples >= SINGLE_PATTERN_EXCEPTION_MIN_SAMPLES &&
122
+ isMeasuredFpRate(rule.wildFpRate) &&
115
123
  rule.wildFpRate === 0;
116
124
  if (rule.conditions < req.minConditions) {
117
125
  if (meetsSinglePatternException) {
@@ -1 +1 @@
1
- {"version":3,"file":"quality-gate.js","sourceRoot":"","sources":["../../src/quality/quality-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quality-gate.js","sourceRoot":"","sources":["../../src/quality/quality-gate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-maturity.d.ts","sourceRoot":"","sources":["../../src/quality/validate-maturity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACb,MAAM,YAAY,CAAC;AAiBpB;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,QAAQ,EAChB,GAAG,GAAE,MAAiC,GACrC,iBAAiB,CA4DnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,eAAe,EAAE,SAAS,QAAQ,EAAE,EACpC,GAAG,GAAE,MAAiC,GACrC,gBAAgB,CAmClB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI;IACvC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAUA"}
1
+ {"version":3,"file":"validate-maturity.d.ts","sourceRoot":"","sources":["../../src/quality/validate-maturity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EACV,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACb,MAAM,YAAY,CAAC;AAiBpB;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,QAAQ,EAChB,GAAG,GAAE,MAAiC,GACrC,iBAAiB,CAkEnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,eAAe,EAAE,SAAS,QAAQ,EAAE,EACpC,GAAG,GAAE,MAAiC,GACrC,gBAAgB,CA8ClB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI;IACvC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAUA"}
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import { computeConfidence } from "./compute-confidence.js";
14
14
  import { validateRuleMeetsStandard } from "./quality-gate.js";
15
+ import { isMeasuredFpRate, unmeasuredFpReason } from "./wild-measurement.js";
15
16
  /** Minimum days a rule must spend at experimental before promotion to stable */
16
17
  const MIN_EXPERIMENTAL_DAYS = 14;
17
18
  /** Minimum wild samples for stable promotion */
@@ -51,9 +52,16 @@ export function canPromote(rule, target, now = new Date().toISOString()) {
51
52
  rule.wildSamples < MIN_WILD_SAMPLES_FOR_STABLE) {
52
53
  blockers.push(`wild_samples ${rule.wildSamples ?? 0} below threshold ${MIN_WILD_SAMPLES_FOR_STABLE}`);
53
54
  }
54
- if (rule.wildFpRate === undefined ||
55
- rule.wildFpRate > MAX_WILD_FP_FOR_STABLE) {
56
- blockers.push(`wild_fp_rate ${rule.wildFpRate ?? "unmeasured"}% above threshold ${MAX_WILD_FP_FOR_STABLE}%`);
55
+ // Default-deny: an unmeasured rate is not a low one. stable IS the enforce
56
+ // (auto-block) lane, so the absence of a measurement has to read as "not
57
+ // eligible", never as "clean". isMeasuredFpRate also rejects null/NaN,
58
+ // which would otherwise sail through `> MAX` as false. See
59
+ // src/quality/wild-measurement.ts for why omission is the encoding.
60
+ if (!isMeasuredFpRate(rule.wildFpRate)) {
61
+ blockers.push(`wild_fp_rate unmeasured — ${unmeasuredFpReason(rule.wildFpRate)}`);
62
+ }
63
+ else if (rule.wildFpRate > MAX_WILD_FP_FOR_STABLE) {
64
+ blockers.push(`wild_fp_rate ${rule.wildFpRate}% above threshold ${MAX_WILD_FP_FOR_STABLE}%`);
57
65
  }
58
66
  if (rule.wildValidatedAt) {
59
67
  const ageMs = new Date(now).getTime() - new Date(rule.wildValidatedAt).getTime();
@@ -96,8 +104,19 @@ export function shouldDemote(rule, recentFpReports, now = new Date().toISOString
96
104
  if (rule.maturity !== "stable") {
97
105
  return { shouldDemote: false, reasons: [] };
98
106
  }
99
- // Reason 1: wild FP rate exceeds threshold
100
- if (rule.wildFpRate !== undefined &&
107
+ // Reason 1: wild FP rate exceeds threshold.
108
+ //
109
+ // Note the asymmetry with canPromote, which is deliberate. Promotion is
110
+ // default-DENY on an unmeasured rate: it must not grant the enforce lane on
111
+ // a rate nobody took. Demotion is default-KEEP: it revokes on evidence of
112
+ // harm, and an absent measurement is not evidence of harm. Making absence
113
+ // demote would today evict all 106 maturity: stable rules, only 2 of which
114
+ // carry a wild_fp_rate at all — a lane-wide policy change, not a bug fix.
115
+ // The absence is surfaced instead by tests/wild-fp-provenance.test.ts.
116
+ //
117
+ // isMeasuredFpRate (not `!== undefined`) so null/NaN cannot suppress a
118
+ // demotion by failing the `>` comparison.
119
+ if (isMeasuredFpRate(rule.wildFpRate) &&
101
120
  rule.wildFpRate > DEMOTION_FP_RATE_THRESHOLD) {
102
121
  reasons.push(`wild_fp_rate ${rule.wildFpRate}% exceeds demotion threshold ${DEMOTION_FP_RATE_THRESHOLD}%`);
103
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate-maturity.js","sourceRoot":"","sources":["../../src/quality/validate-maturity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-maturity.js","sourceRoot":"","sources":["../../src/quality/validate-maturity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAS7E,gFAAgF;AAChF,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,gDAAgD;AAChD,MAAM,2BAA2B,GAAG,IAAI,CAAC;AACzC,0DAA0D;AAC1D,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,oDAAoD;AACpD,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,gEAAgE;AAChE,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,mFAAmF;AACnF,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,8BAA8B;AAC9B,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CACxB,IAAkB,EAClB,MAAgB,EAChB,MAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAEtC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,kDAAkD;IAClD,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,qEAAqE;IACrE,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CACX,+DAA+D,IAAI,CAAC,QAAQ,GAAG,CAChF,CAAC;QACJ,CAAC;QAED,IACE,IAAI,CAAC,WAAW,KAAK,SAAS;YAC9B,IAAI,CAAC,WAAW,GAAG,2BAA2B,EAC9C,CAAC;YACD,QAAQ,CAAC,IAAI,CACX,gBAAgB,IAAI,CAAC,WAAW,IAAI,CAAC,oBAAoB,2BAA2B,EAAE,CACvF,CAAC;QACJ,CAAC;QACD,2EAA2E;QAC3E,yEAAyE;QACzE,uEAAuE;QACvE,2DAA2D;QAC3D,oEAAoE;QACpE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CACX,6BAA6B,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CACnE,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,GAAG,sBAAsB,EAAE,CAAC;YACpD,QAAQ,CAAC,IAAI,CACX,gBAAgB,IAAI,CAAC,UAAU,qBAAqB,sBAAsB,GAAG,CAC9E,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,KAAK,GACT,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC;YACrE,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9C,IAAI,OAAO,GAAG,qBAAqB,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,CACX,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,qCAAqC,qBAAqB,IAAI,CAC1F,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAClD,CAAC;QAED,wCAAwC;QACxC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,UAAU,CAAC,KAAK,GAAG,yBAAyB,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,CACX,cAAc,UAAU,CAAC,KAAK,2BAA2B,yBAAyB,EAAE,CACrF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC/B,EAAE,EAAE,MAAM;QACV,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAkB,EAClB,eAAoC,EACpC,MAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAEtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,sDAAsD;IACtD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,4CAA4C;IAC5C,EAAE;IACF,wEAAwE;IACxE,4EAA4E;IAC5E,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,0EAA0E;IAC1E,uEAAuE;IACvE,EAAE;IACF,uEAAuE;IACvE,0CAA0C;IAC1C,IACE,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,0BAA0B,EAC5C,CAAC;QACD,OAAO,CAAC,IAAI,CACV,gBAAgB,IAAI,CAAC,UAAU,gCAAgC,0BAA0B,GAAG,CAC7F,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,MAAM,WAAW,GACf,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACvE,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACtD,IAAI,CAAC,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC7B,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,WAAW,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,IAAI,kBAAkB,CAAC,MAAM,IAAI,wBAAwB,EAAE,CAAC;QAC1D,OAAO,CAAC,IAAI,CACV,GAAG,kBAAkB,CAAC,MAAM,kCAAkC,oBAAoB,OAAO,CAC1F,CAAC;IACJ,CAAC;IAED,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;QAChC,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IASnC,OAAO;QACL,mBAAmB,EAAE,qBAAqB;QAC1C,uBAAuB,EAAE,2BAA2B;QACpD,kBAAkB,EAAE,sBAAsB;QAC1C,sBAAsB,EAAE,yBAAyB;QACjD,uBAAuB,EAAE,0BAA0B;QACnD,qBAAqB,EAAE,wBAAwB;QAC/C,kBAAkB,EAAE,oBAAoB;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * ATR Quality Standard — Wild-validation measurement provenance
3
+ *
4
+ * The fourth axis of "clean must never mean never looked at it", after
5
+ * fieldCoverage (src/corpus-event.ts), statusCoverage and skillPathCoverage.
6
+ * Those three ask whether a corpus run could ever have exercised a rule. This
7
+ * one asks the prior question: does a `wild_fp_rate` on disk correspond to a
8
+ * measurement at all?
9
+ *
10
+ * THE DEFECT THIS MODULE EXISTS TO PREVENT
11
+ *
12
+ * scripts/compute-confidence.ts derived every rule's rate from a scan report:
13
+ *
14
+ * const fireCount = ruleHitMap.get(baseMetadata.id) ?? 0;
15
+ * const wildFpRate = fireCount > 0 ? (fireCount / wildSampleCount) * 100 : 0;
16
+ *
17
+ * A scan report names the rules that FIRED. It does not name the rules it
18
+ * loaded, so "absent from rule_hits" conflates two states that must never be
19
+ * merged:
20
+ *
21
+ * (a) the rule was evaluated against the corpus and stayed silent -> 0% is real
22
+ * (b) the rule was never loaded, or could not reach the event shape -> no measurement
23
+ *
24
+ * The `?? 0` wrote (b) as if it were (a). ATR-2026-00061 is the worked example:
25
+ * it carried `wild_fp_rate: 0` while firing on 2,814 of 5,352 benign samples
26
+ * (52.58%). It was silent in the wild scan because that scan walked SKILL.md
27
+ * bodies and the rule reads `tool_args`/`tool_response` — nobody ever populated
28
+ * the fields it needs, so it could not fire, so it was scored as precise.
29
+ *
30
+ * WHY OMISSION AND NOT `null`
31
+ *
32
+ * `wild_fp_rate` is an input to gates that decide the enforce (auto-block) lane.
33
+ * A gate that cannot read a measurement must refuse, not pass. Of the three
34
+ * candidate encodings only omission actually refuses:
35
+ *
36
+ * omitted -> wildFpRate === undefined -> validate-maturity blocks. Correct.
37
+ * null -> `null === undefined` is false AND `null > 0.5` is false, so BOTH
38
+ * halves of the stable gate's disjunction are false and the rule
39
+ * promotes. `null` is indistinguishable from a perfect score.
40
+ * 0 -> the bug this module removes.
41
+ *
42
+ * So "unmeasured" is encoded as the absence of the field, and isMeasuredFpRate()
43
+ * below is the single predicate every consumer must use so that a future `null`,
44
+ * `NaN` or `"0"` cannot re-open the same hole.
45
+ *
46
+ * @module agent-threat-rules/quality/wild-measurement
47
+ */
48
+ /**
49
+ * The fields that together form one wild-validation record.
50
+ *
51
+ * They are written and cleared as a unit. A rate without a sample count is not
52
+ * interpretable (1 FP in 10 samples and 1 in 100,000 are not the same claim),
53
+ * and a sample count without a rate still feeds the confidence score's wild
54
+ * validation component, so a half-record inflates confidence just as a fake
55
+ * rate inflated precision.
56
+ */
57
+ export declare const WILD_MEASUREMENT_FIELDS: readonly string[];
58
+ /**
59
+ * True when a value is an actual measured false-positive rate.
60
+ *
61
+ * Deliberately narrow. Anything that is not a finite number in [0, 100] is
62
+ * treated as "no measurement" — including `null`, `NaN`, `Infinity` and numeric
63
+ * strings — because every one of those reaches a comparison like
64
+ * `rate > threshold` as `false` and would silently pass a gate it never met.
65
+ */
66
+ export declare function isMeasuredFpRate(value: unknown): value is number;
67
+ /**
68
+ * True when a value is an actual measured wild sample count: a finite,
69
+ * non-negative integer. Same default-deny reasoning as isMeasuredFpRate.
70
+ */
71
+ export declare function isMeasuredSampleCount(value: unknown): value is number;
72
+ /**
73
+ * Why this value cannot be treated as a measured rate — a sentence for a gate
74
+ * to print — or null when it is measured and needs no explanation.
75
+ */
76
+ export declare function unmeasuredFpReason(value: unknown): string | null;
77
+ /** One rule's entry in a wild-scan report: it fired, this many times. */
78
+ export interface WildScanHit {
79
+ readonly id: string;
80
+ readonly count: number;
81
+ }
82
+ /**
83
+ * What a scan report can say about one rule.
84
+ *
85
+ * `substantiated` is true ONLY when the report names the rule. A report lists
86
+ * hits, not its loaded roster, so silence is unattributable by construction.
87
+ */
88
+ export interface WildRateDerivation {
89
+ readonly substantiated: boolean;
90
+ /** The measured percentage, or null when the report cannot substantiate one. */
91
+ readonly fpRate: number | null;
92
+ readonly reason: string;
93
+ }
94
+ /**
95
+ * Derive a rule's wild FP rate from a scan report's hit list — or refuse to.
96
+ *
97
+ * This is the corrected form of the `?? 0` at the top of this file. A rule the
98
+ * report names fired, and the rate is real. A rule the report does not name may
99
+ * have been clean, unloaded, or unreachable; the report cannot tell us which,
100
+ * so no number is produced and the caller must leave the field off.
101
+ *
102
+ * @param hits - The report's rule_hits list
103
+ * @param ruleId - The rule being scored
104
+ * @param sampleCount - The report's total scanned count (the denominator)
105
+ */
106
+ export declare function deriveWildFpRate(hits: readonly WildScanHit[], ruleId: string, sampleCount: number): WildRateDerivation;
107
+ //# sourceMappingURL=wild-measurement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wild-measurement.d.ts","sourceRoot":"","sources":["../../src/quality/wild-measurement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAInD,CAAC;AAKH;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAOhE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAErE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAchE;AAED,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,kBAAkB,CA4BpB"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * ATR Quality Standard — Wild-validation measurement provenance
3
+ *
4
+ * The fourth axis of "clean must never mean never looked at it", after
5
+ * fieldCoverage (src/corpus-event.ts), statusCoverage and skillPathCoverage.
6
+ * Those three ask whether a corpus run could ever have exercised a rule. This
7
+ * one asks the prior question: does a `wild_fp_rate` on disk correspond to a
8
+ * measurement at all?
9
+ *
10
+ * THE DEFECT THIS MODULE EXISTS TO PREVENT
11
+ *
12
+ * scripts/compute-confidence.ts derived every rule's rate from a scan report:
13
+ *
14
+ * const fireCount = ruleHitMap.get(baseMetadata.id) ?? 0;
15
+ * const wildFpRate = fireCount > 0 ? (fireCount / wildSampleCount) * 100 : 0;
16
+ *
17
+ * A scan report names the rules that FIRED. It does not name the rules it
18
+ * loaded, so "absent from rule_hits" conflates two states that must never be
19
+ * merged:
20
+ *
21
+ * (a) the rule was evaluated against the corpus and stayed silent -> 0% is real
22
+ * (b) the rule was never loaded, or could not reach the event shape -> no measurement
23
+ *
24
+ * The `?? 0` wrote (b) as if it were (a). ATR-2026-00061 is the worked example:
25
+ * it carried `wild_fp_rate: 0` while firing on 2,814 of 5,352 benign samples
26
+ * (52.58%). It was silent in the wild scan because that scan walked SKILL.md
27
+ * bodies and the rule reads `tool_args`/`tool_response` — nobody ever populated
28
+ * the fields it needs, so it could not fire, so it was scored as precise.
29
+ *
30
+ * WHY OMISSION AND NOT `null`
31
+ *
32
+ * `wild_fp_rate` is an input to gates that decide the enforce (auto-block) lane.
33
+ * A gate that cannot read a measurement must refuse, not pass. Of the three
34
+ * candidate encodings only omission actually refuses:
35
+ *
36
+ * omitted -> wildFpRate === undefined -> validate-maturity blocks. Correct.
37
+ * null -> `null === undefined` is false AND `null > 0.5` is false, so BOTH
38
+ * halves of the stable gate's disjunction are false and the rule
39
+ * promotes. `null` is indistinguishable from a perfect score.
40
+ * 0 -> the bug this module removes.
41
+ *
42
+ * So "unmeasured" is encoded as the absence of the field, and isMeasuredFpRate()
43
+ * below is the single predicate every consumer must use so that a future `null`,
44
+ * `NaN` or `"0"` cannot re-open the same hole.
45
+ *
46
+ * @module agent-threat-rules/quality/wild-measurement
47
+ */
48
+ /**
49
+ * The fields that together form one wild-validation record.
50
+ *
51
+ * They are written and cleared as a unit. A rate without a sample count is not
52
+ * interpretable (1 FP in 10 samples and 1 in 100,000 are not the same claim),
53
+ * and a sample count without a rate still feeds the confidence score's wild
54
+ * validation component, so a half-record inflates confidence just as a fake
55
+ * rate inflated precision.
56
+ */
57
+ export const WILD_MEASUREMENT_FIELDS = Object.freeze([
58
+ "wild_fp_rate",
59
+ "wild_samples",
60
+ "wild_validated",
61
+ ]);
62
+ /** Largest meaningful false-positive rate, in percent. */
63
+ const MAX_FP_RATE = 100;
64
+ /**
65
+ * True when a value is an actual measured false-positive rate.
66
+ *
67
+ * Deliberately narrow. Anything that is not a finite number in [0, 100] is
68
+ * treated as "no measurement" — including `null`, `NaN`, `Infinity` and numeric
69
+ * strings — because every one of those reaches a comparison like
70
+ * `rate > threshold` as `false` and would silently pass a gate it never met.
71
+ */
72
+ export function isMeasuredFpRate(value) {
73
+ return (typeof value === "number" &&
74
+ Number.isFinite(value) &&
75
+ value >= 0 &&
76
+ value <= MAX_FP_RATE);
77
+ }
78
+ /**
79
+ * True when a value is an actual measured wild sample count: a finite,
80
+ * non-negative integer. Same default-deny reasoning as isMeasuredFpRate.
81
+ */
82
+ export function isMeasuredSampleCount(value) {
83
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
84
+ }
85
+ /**
86
+ * Why this value cannot be treated as a measured rate — a sentence for a gate
87
+ * to print — or null when it is measured and needs no explanation.
88
+ */
89
+ export function unmeasuredFpReason(value) {
90
+ if (isMeasuredFpRate(value))
91
+ return null;
92
+ if (value === undefined) {
93
+ return ("wild_fp_rate is absent — no wild-validation run has reported this rule. " +
94
+ "Absence is not 0%: it is the absence of a measurement, and a gate that " +
95
+ "cannot read one must refuse rather than assume precision.");
96
+ }
97
+ return (`wild_fp_rate is ${JSON.stringify(value)}, which is not a finite ` +
98
+ `percentage in [0, ${MAX_FP_RATE}] — treated as unmeasured. Encode an ` +
99
+ "unmeasured rule by omitting the field, never by null or a placeholder.");
100
+ }
101
+ /**
102
+ * Derive a rule's wild FP rate from a scan report's hit list — or refuse to.
103
+ *
104
+ * This is the corrected form of the `?? 0` at the top of this file. A rule the
105
+ * report names fired, and the rate is real. A rule the report does not name may
106
+ * have been clean, unloaded, or unreachable; the report cannot tell us which,
107
+ * so no number is produced and the caller must leave the field off.
108
+ *
109
+ * @param hits - The report's rule_hits list
110
+ * @param ruleId - The rule being scored
111
+ * @param sampleCount - The report's total scanned count (the denominator)
112
+ */
113
+ export function deriveWildFpRate(hits, ruleId, sampleCount) {
114
+ if (!isMeasuredSampleCount(sampleCount) || sampleCount <= 0) {
115
+ return {
116
+ substantiated: false,
117
+ fpRate: null,
118
+ reason: `scan report has no usable sample count (${JSON.stringify(sampleCount)})`,
119
+ };
120
+ }
121
+ const hit = hits.find((h) => h.id === ruleId);
122
+ if (hit === undefined) {
123
+ return {
124
+ substantiated: false,
125
+ fpRate: null,
126
+ reason: `rule is absent from the report's rule_hits list. The report records ` +
127
+ `which rules fired, not which it loaded, so this is equally consistent ` +
128
+ `with "evaluated and clean" and with "never evaluated" — it cannot ` +
129
+ `substantiate 0%.`,
130
+ };
131
+ }
132
+ const rate = (hit.count / sampleCount) * 100;
133
+ return {
134
+ substantiated: true,
135
+ fpRate: Math.round(rate * 10000) / 10000,
136
+ reason: `fired on ${hit.count} of ${sampleCount} samples`,
137
+ };
138
+ }
139
+ //# sourceMappingURL=wild-measurement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wild-measurement.js","sourceRoot":"","sources":["../../src/quality/wild-measurement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB,MAAM,CAAC,MAAM,CAAC;IACtE,cAAc;IACd,cAAc;IACd,gBAAgB;CACjB,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,KAAK,IAAI,CAAC;QACV,KAAK,IAAI,WAAW,CACrB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CACL,0EAA0E;YAC1E,yEAAyE;YACzE,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,CACL,mBAAmB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,0BAA0B;QAClE,qBAAqB,WAAW,uCAAuC;QACvE,wEAAwE,CACzE,CAAC;AACJ,CAAC;AAqBD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAA4B,EAC5B,MAAc,EACd,WAAmB;IAEnB,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QAC5D,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,2CAA2C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG;SAClF,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,IAAI;YACZ,MAAM,EACJ,sEAAsE;gBACtE,wEAAwE;gBACxE,oEAAoE;gBACpE,kBAAkB;SACrB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC;IAC7C,OAAO;QACL,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK;QACxC,MAAM,EAAE,YAAY,GAAG,CAAC,KAAK,OAAO,WAAW,UAAU;KAC1D,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"rule-scaffolder.d.ts","sourceRoot":"","sources":["../src/rule-scaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,aAAa,EAGd,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC1C,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAwCD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,aAAa,CAAC;IACpD,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,SAAS,WAAW,EAAE,CAAC;CAC7C,CAqFA,CAAC;AAsJF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAExC,OAAO,GAAE,eAAoB;IAOzC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAAG,cAAc;IAiG5F;;;;;OAKG;IACH,gBAAgB,CACd,KAAK,EAAE,aAAa,EACpB,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAC3C,cAAc;IA+JjB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAwBtB"}
1
+ {"version":3,"file":"rule-scaffolder.d.ts","sourceRoot":"","sources":["../src/rule-scaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,aAAa,EAGd,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC1C,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAwCD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,aAAa,CAAC;IACpD,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,SAAS,WAAW,EAAE,CAAC;CAC7C,CAqFA,CAAC;AAsJF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAExC,OAAO,GAAE,eAAoB;IAOzC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAAG,cAAc;IAsG5F;;;;;OAKG;IACH,gBAAgB,CACd,KAAK,EAAE,aAAa,EACpB,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAC3C,cAAc;IAiKjB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAwBtB"}
@@ -314,7 +314,12 @@ export class RuleScaffolder {
314
314
  title: input.title,
315
315
  id,
316
316
  schema_version: this.options.schemaVersion,
317
- status: 'draft',
317
+ // NOT 'draft'. The engine skips status draft/deprecated in both
318
+ // evaluation paths, before the lane gate, so a scaffolded rule would fire
319
+ // in no lane at all and its author would never be told. Immaturity is
320
+ // expressed by `maturity: draft` below, which the lane gate honours
321
+ // (hunt-only, never enforce/alert) while leaving the rule alive.
322
+ status: 'experimental',
318
323
  description: input.attackDescription,
319
324
  author: this.options.author,
320
325
  date,
@@ -433,7 +438,9 @@ export class RuleScaffolder {
433
438
  title: input.title,
434
439
  id,
435
440
  schema_version: this.options.schemaVersion,
436
- status: 'draft',
441
+ // See the note on the pattern scaffold: `status: draft` makes the rule
442
+ // invisible to the engine entirely. Immaturity belongs in `maturity`.
443
+ status: 'experimental',
437
444
  description: buildDescription(input.attackDescription, input.notDetectedDescription),
438
445
  author: this.options.author,
439
446
  date,