@waratahlabs/canopy 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +323 -0
  3. package/SKILL.md +97 -0
  4. package/demo/data/openclaw-demo.tc.json +397 -0
  5. package/demo/data/openclaw-nemoclaw-demo.tc.json +475 -0
  6. package/demo/index.html +556 -0
  7. package/dist/adapters/a2a.d.ts +82 -0
  8. package/dist/adapters/a2a.d.ts.map +1 -0
  9. package/dist/adapters/a2a.js +215 -0
  10. package/dist/adapters/a2a.js.map +1 -0
  11. package/dist/adapters/a2a.test.d.ts +2 -0
  12. package/dist/adapters/a2a.test.d.ts.map +1 -0
  13. package/dist/adapters/a2a.test.js +196 -0
  14. package/dist/adapters/a2a.test.js.map +1 -0
  15. package/dist/adapters/langfuse.d.ts +28 -0
  16. package/dist/adapters/langfuse.d.ts.map +1 -0
  17. package/dist/adapters/langfuse.js +192 -0
  18. package/dist/adapters/langfuse.js.map +1 -0
  19. package/dist/adapters/n8n.d.ts +4 -0
  20. package/dist/adapters/n8n.d.ts.map +1 -0
  21. package/dist/adapters/n8n.js +89 -0
  22. package/dist/adapters/n8n.js.map +1 -0
  23. package/dist/adapters/openclaw.d.ts +58 -0
  24. package/dist/adapters/openclaw.d.ts.map +1 -0
  25. package/dist/adapters/openclaw.js +275 -0
  26. package/dist/adapters/openclaw.js.map +1 -0
  27. package/dist/adapters/types.d.ts +33 -0
  28. package/dist/adapters/types.d.ts.map +1 -0
  29. package/dist/adapters/types.js +2 -0
  30. package/dist/adapters/types.js.map +1 -0
  31. package/dist/aivss/atlas/coverage-matrix.d.ts +12 -0
  32. package/dist/aivss/atlas/coverage-matrix.d.ts.map +1 -0
  33. package/dist/aivss/atlas/coverage-matrix.js +272 -0
  34. package/dist/aivss/atlas/coverage-matrix.js.map +1 -0
  35. package/dist/aivss/atlas/loader.d.ts +28 -0
  36. package/dist/aivss/atlas/loader.d.ts.map +1 -0
  37. package/dist/aivss/atlas/loader.js +126 -0
  38. package/dist/aivss/atlas/loader.js.map +1 -0
  39. package/dist/aivss/atlas/loader.test.d.ts +11 -0
  40. package/dist/aivss/atlas/loader.test.d.ts.map +1 -0
  41. package/dist/aivss/atlas/loader.test.js +111 -0
  42. package/dist/aivss/atlas/loader.test.js.map +1 -0
  43. package/dist/aivss/atlas/resolve-path.d.ts +34 -0
  44. package/dist/aivss/atlas/resolve-path.d.ts.map +1 -0
  45. package/dist/aivss/atlas/resolve-path.js +58 -0
  46. package/dist/aivss/atlas/resolve-path.js.map +1 -0
  47. package/dist/aivss/batch/batch-builder.d.ts +11 -0
  48. package/dist/aivss/batch/batch-builder.d.ts.map +1 -0
  49. package/dist/aivss/batch/batch-builder.js +75 -0
  50. package/dist/aivss/batch/batch-builder.js.map +1 -0
  51. package/dist/aivss/index.d.ts +21 -0
  52. package/dist/aivss/index.d.ts.map +1 -0
  53. package/dist/aivss/index.js +19 -0
  54. package/dist/aivss/index.js.map +1 -0
  55. package/dist/aivss/knowledge-base/kb-client.d.ts +9 -0
  56. package/dist/aivss/knowledge-base/kb-client.d.ts.map +1 -0
  57. package/dist/aivss/knowledge-base/kb-client.js +139 -0
  58. package/dist/aivss/knowledge-base/kb-client.js.map +1 -0
  59. package/dist/aivss/knowledge-base/kb-types.d.ts +21 -0
  60. package/dist/aivss/knowledge-base/kb-types.d.ts.map +1 -0
  61. package/dist/aivss/knowledge-base/kb-types.js +2 -0
  62. package/dist/aivss/knowledge-base/kb-types.js.map +1 -0
  63. package/dist/aivss/knowledge-base/search-builder.d.ts +7 -0
  64. package/dist/aivss/knowledge-base/search-builder.d.ts.map +1 -0
  65. package/dist/aivss/knowledge-base/search-builder.js +119 -0
  66. package/dist/aivss/knowledge-base/search-builder.js.map +1 -0
  67. package/dist/aivss/metrics/aa.d.ts +3 -0
  68. package/dist/aivss/metrics/aa.d.ts.map +1 -0
  69. package/dist/aivss/metrics/aa.js +26 -0
  70. package/dist/aivss/metrics/aa.js.map +1 -0
  71. package/dist/aivss/metrics/ad.d.ts +3 -0
  72. package/dist/aivss/metrics/ad.d.ts.map +1 -0
  73. package/dist/aivss/metrics/ad.js +30 -0
  74. package/dist/aivss/metrics/ad.js.map +1 -0
  75. package/dist/aivss/metrics/cs.d.ts +3 -0
  76. package/dist/aivss/metrics/cs.d.ts.map +1 -0
  77. package/dist/aivss/metrics/cs.js +50 -0
  78. package/dist/aivss/metrics/cs.js.map +1 -0
  79. package/dist/aivss/metrics/dc.d.ts +3 -0
  80. package/dist/aivss/metrics/dc.d.ts.map +1 -0
  81. package/dist/aivss/metrics/dc.js +30 -0
  82. package/dist/aivss/metrics/dc.js.map +1 -0
  83. package/dist/aivss/metrics/ds.d.ts +3 -0
  84. package/dist/aivss/metrics/ds.d.ts.map +1 -0
  85. package/dist/aivss/metrics/ds.js +26 -0
  86. package/dist/aivss/metrics/ds.js.map +1 -0
  87. package/dist/aivss/metrics/ei.d.ts +3 -0
  88. package/dist/aivss/metrics/ei.d.ts.map +1 -0
  89. package/dist/aivss/metrics/ei.js +30 -0
  90. package/dist/aivss/metrics/ei.js.map +1 -0
  91. package/dist/aivss/metrics/gv.d.ts +3 -0
  92. package/dist/aivss/metrics/gv.d.ts.map +1 -0
  93. package/dist/aivss/metrics/gv.js +34 -0
  94. package/dist/aivss/metrics/gv.js.map +1 -0
  95. package/dist/aivss/metrics/ll.d.ts +3 -0
  96. package/dist/aivss/metrics/ll.d.ts.map +1 -0
  97. package/dist/aivss/metrics/ll.js +30 -0
  98. package/dist/aivss/metrics/ll.js.map +1 -0
  99. package/dist/aivss/metrics/mr.d.ts +3 -0
  100. package/dist/aivss/metrics/mr.d.ts.map +1 -0
  101. package/dist/aivss/metrics/mr.js +26 -0
  102. package/dist/aivss/metrics/mr.js.map +1 -0
  103. package/dist/aivss/metrics/shared.d.ts +22 -0
  104. package/dist/aivss/metrics/shared.d.ts.map +1 -0
  105. package/dist/aivss/metrics/shared.js +70 -0
  106. package/dist/aivss/metrics/shared.js.map +1 -0
  107. package/dist/aivss/prompts/base-system-prompt.d.ts +2 -0
  108. package/dist/aivss/prompts/base-system-prompt.d.ts.map +1 -0
  109. package/dist/aivss/prompts/base-system-prompt.js +31 -0
  110. package/dist/aivss/prompts/base-system-prompt.js.map +1 -0
  111. package/dist/aivss/prompts/prompt-composer.d.ts +13 -0
  112. package/dist/aivss/prompts/prompt-composer.d.ts.map +1 -0
  113. package/dist/aivss/prompts/prompt-composer.js +21 -0
  114. package/dist/aivss/prompts/prompt-composer.js.map +1 -0
  115. package/dist/aivss/scoring/a2a-corpus.test.d.ts +28 -0
  116. package/dist/aivss/scoring/a2a-corpus.test.d.ts.map +1 -0
  117. package/dist/aivss/scoring/a2a-corpus.test.js +109 -0
  118. package/dist/aivss/scoring/a2a-corpus.test.js.map +1 -0
  119. package/dist/aivss/scoring/determinism.test.d.ts +16 -0
  120. package/dist/aivss/scoring/determinism.test.d.ts.map +1 -0
  121. package/dist/aivss/scoring/determinism.test.js +169 -0
  122. package/dist/aivss/scoring/determinism.test.js.map +1 -0
  123. package/dist/aivss/scoring/heuristic-scorer.d.ts +21 -0
  124. package/dist/aivss/scoring/heuristic-scorer.d.ts.map +1 -0
  125. package/dist/aivss/scoring/heuristic-scorer.js +299 -0
  126. package/dist/aivss/scoring/heuristic-scorer.js.map +1 -0
  127. package/dist/aivss/scoring/heuristic-scorer.test.d.ts +8 -0
  128. package/dist/aivss/scoring/heuristic-scorer.test.d.ts.map +1 -0
  129. package/dist/aivss/scoring/heuristic-scorer.test.js +150 -0
  130. package/dist/aivss/scoring/heuristic-scorer.test.js.map +1 -0
  131. package/dist/aivss/scoring/scoring-mode.d.ts +48 -0
  132. package/dist/aivss/scoring/scoring-mode.d.ts.map +1 -0
  133. package/dist/aivss/scoring/scoring-mode.js +64 -0
  134. package/dist/aivss/scoring/scoring-mode.js.map +1 -0
  135. package/dist/aivss/scoring/v4-engine.d.ts +15 -0
  136. package/dist/aivss/scoring/v4-engine.d.ts.map +1 -0
  137. package/dist/aivss/scoring/v4-engine.js +84 -0
  138. package/dist/aivss/scoring/v4-engine.js.map +1 -0
  139. package/dist/aivss/scoring/v4-engine.test.d.ts +16 -0
  140. package/dist/aivss/scoring/v4-engine.test.d.ts.map +1 -0
  141. package/dist/aivss/scoring/v4-engine.test.js +156 -0
  142. package/dist/aivss/scoring/v4-engine.test.js.map +1 -0
  143. package/dist/aivss/types.d.ts +92 -0
  144. package/dist/aivss/types.d.ts.map +1 -0
  145. package/dist/aivss/types.js +25 -0
  146. package/dist/aivss/types.js.map +1 -0
  147. package/dist/baseline/baseline.test.d.ts +2 -0
  148. package/dist/baseline/baseline.test.d.ts.map +1 -0
  149. package/dist/baseline/baseline.test.js +219 -0
  150. package/dist/baseline/baseline.test.js.map +1 -0
  151. package/dist/baseline/diff.d.ts +42 -0
  152. package/dist/baseline/diff.d.ts.map +1 -0
  153. package/dist/baseline/diff.js +124 -0
  154. package/dist/baseline/diff.js.map +1 -0
  155. package/dist/baseline/store.d.ts +51 -0
  156. package/dist/baseline/store.d.ts.map +1 -0
  157. package/dist/baseline/store.js +92 -0
  158. package/dist/baseline/store.js.map +1 -0
  159. package/dist/batch/anthropic-batch-runner.d.ts +50 -0
  160. package/dist/batch/anthropic-batch-runner.d.ts.map +1 -0
  161. package/dist/batch/anthropic-batch-runner.js +91 -0
  162. package/dist/batch/anthropic-batch-runner.js.map +1 -0
  163. package/dist/batch/bedrock-batch-runner.d.ts +90 -0
  164. package/dist/batch/bedrock-batch-runner.d.ts.map +1 -0
  165. package/dist/batch/bedrock-batch-runner.js +199 -0
  166. package/dist/batch/bedrock-batch-runner.js.map +1 -0
  167. package/dist/batch/providers/anthropic.d.ts +55 -0
  168. package/dist/batch/providers/anthropic.d.ts.map +1 -0
  169. package/dist/batch/providers/anthropic.js +103 -0
  170. package/dist/batch/providers/anthropic.js.map +1 -0
  171. package/dist/batch/providers/bedrock.d.ts +31 -0
  172. package/dist/batch/providers/bedrock.d.ts.map +1 -0
  173. package/dist/batch/providers/bedrock.js +42 -0
  174. package/dist/batch/providers/bedrock.js.map +1 -0
  175. package/dist/batch/providers/harness.d.ts +36 -0
  176. package/dist/batch/providers/harness.d.ts.map +1 -0
  177. package/dist/batch/providers/harness.js +65 -0
  178. package/dist/batch/providers/harness.js.map +1 -0
  179. package/dist/batch/providers/harness.test.d.ts +7 -0
  180. package/dist/batch/providers/harness.test.d.ts.map +1 -0
  181. package/dist/batch/providers/harness.test.js +84 -0
  182. package/dist/batch/providers/harness.test.js.map +1 -0
  183. package/dist/batch/providers/index.d.ts +82 -0
  184. package/dist/batch/providers/index.d.ts.map +1 -0
  185. package/dist/batch/providers/index.js +82 -0
  186. package/dist/batch/providers/index.js.map +1 -0
  187. package/dist/batch/providers/ollama.d.ts +68 -0
  188. package/dist/batch/providers/ollama.d.ts.map +1 -0
  189. package/dist/batch/providers/ollama.js +108 -0
  190. package/dist/batch/providers/ollama.js.map +1 -0
  191. package/dist/batch/response-parser.d.ts +45 -0
  192. package/dist/batch/response-parser.d.ts.map +1 -0
  193. package/dist/batch/response-parser.js +161 -0
  194. package/dist/batch/response-parser.js.map +1 -0
  195. package/dist/batch/types.d.ts +87 -0
  196. package/dist/batch/types.d.ts.map +1 -0
  197. package/dist/batch/types.js +8 -0
  198. package/dist/batch/types.js.map +1 -0
  199. package/dist/cli.d.ts +15 -0
  200. package/dist/cli.d.ts.map +1 -0
  201. package/dist/cli.js +1037 -0
  202. package/dist/cli.js.map +1 -0
  203. package/dist/examples/a2a-assessment.d.ts +20 -0
  204. package/dist/examples/a2a-assessment.d.ts.map +1 -0
  205. package/dist/examples/a2a-assessment.js +115 -0
  206. package/dist/examples/a2a-assessment.js.map +1 -0
  207. package/dist/examples/batch-assessment.d.ts +18 -0
  208. package/dist/examples/batch-assessment.d.ts.map +1 -0
  209. package/dist/examples/batch-assessment.js +112 -0
  210. package/dist/examples/batch-assessment.js.map +1 -0
  211. package/dist/examples/batch-submission-flow.d.ts +2 -0
  212. package/dist/examples/batch-submission-flow.d.ts.map +1 -0
  213. package/dist/examples/batch-submission-flow.js +279 -0
  214. package/dist/examples/batch-submission-flow.js.map +1 -0
  215. package/dist/examples/demo-agent-definition.json +58 -0
  216. package/dist/examples/langfuse-assessment.d.ts +2 -0
  217. package/dist/examples/langfuse-assessment.d.ts.map +1 -0
  218. package/dist/examples/langfuse-assessment.js +46 -0
  219. package/dist/examples/langfuse-assessment.js.map +1 -0
  220. package/dist/examples/model-eval.d.ts +25 -0
  221. package/dist/examples/model-eval.d.ts.map +1 -0
  222. package/dist/examples/model-eval.js +94 -0
  223. package/dist/examples/model-eval.js.map +1 -0
  224. package/dist/examples/openclaw-assessment.d.ts +17 -0
  225. package/dist/examples/openclaw-assessment.d.ts.map +1 -0
  226. package/dist/examples/openclaw-assessment.js +79 -0
  227. package/dist/examples/openclaw-assessment.js.map +1 -0
  228. package/dist/examples/simple-assessment.d.ts +2 -0
  229. package/dist/examples/simple-assessment.d.ts.map +1 -0
  230. package/dist/examples/simple-assessment.js +146 -0
  231. package/dist/examples/simple-assessment.js.map +1 -0
  232. package/dist/examples/threat-model-demo.d.ts +2 -0
  233. package/dist/examples/threat-model-demo.d.ts.map +1 -0
  234. package/dist/examples/threat-model-demo.js +103 -0
  235. package/dist/examples/threat-model-demo.js.map +1 -0
  236. package/dist/index.d.ts +60 -0
  237. package/dist/index.d.ts.map +1 -0
  238. package/dist/index.js +155 -0
  239. package/dist/index.js.map +1 -0
  240. package/dist/output/likec4-generator.d.ts +43 -0
  241. package/dist/output/likec4-generator.d.ts.map +1 -0
  242. package/dist/output/likec4-generator.js +287 -0
  243. package/dist/output/likec4-generator.js.map +1 -0
  244. package/dist/output/slot-filler.d.ts +6 -0
  245. package/dist/output/slot-filler.d.ts.map +1 -0
  246. package/dist/output/slot-filler.js +71 -0
  247. package/dist/output/slot-filler.js.map +1 -0
  248. package/dist/output/tc-assembler.d.ts +30 -0
  249. package/dist/output/tc-assembler.d.ts.map +1 -0
  250. package/dist/output/tc-assembler.js +227 -0
  251. package/dist/output/tc-assembler.js.map +1 -0
  252. package/dist/output/tc-types.d.ts +41 -0
  253. package/dist/output/tc-types.d.ts.map +1 -0
  254. package/dist/output/tc-types.js +5 -0
  255. package/dist/output/tc-types.js.map +1 -0
  256. package/dist/output/tc-validator.test.d.ts +9 -0
  257. package/dist/output/tc-validator.test.d.ts.map +1 -0
  258. package/dist/output/tc-validator.test.js +194 -0
  259. package/dist/output/tc-validator.test.js.map +1 -0
  260. package/dist/providers/anthropic.d.ts +9 -0
  261. package/dist/providers/anthropic.d.ts.map +1 -0
  262. package/dist/providers/anthropic.js +30 -0
  263. package/dist/providers/anthropic.js.map +1 -0
  264. package/dist/providers/bedrock.d.ts +9 -0
  265. package/dist/providers/bedrock.d.ts.map +1 -0
  266. package/dist/providers/bedrock.js +38 -0
  267. package/dist/providers/bedrock.js.map +1 -0
  268. package/dist/providers/index.d.ts +6 -0
  269. package/dist/providers/index.d.ts.map +1 -0
  270. package/dist/providers/index.js +14 -0
  271. package/dist/providers/index.js.map +1 -0
  272. package/dist/providers/types.d.ts +12 -0
  273. package/dist/providers/types.d.ts.map +1 -0
  274. package/dist/providers/types.js +5 -0
  275. package/dist/providers/types.js.map +1 -0
  276. package/dist/references/acsc-risks.d.ts +18 -0
  277. package/dist/references/acsc-risks.d.ts.map +1 -0
  278. package/dist/references/acsc-risks.js +232 -0
  279. package/dist/references/acsc-risks.js.map +1 -0
  280. package/dist/references/aicm.d.ts +41 -0
  281. package/dist/references/aicm.d.ts.map +1 -0
  282. package/dist/references/aicm.js +447 -0
  283. package/dist/references/aicm.js.map +1 -0
  284. package/dist/references/dstg-meaid.d.ts +59 -0
  285. package/dist/references/dstg-meaid.d.ts.map +1 -0
  286. package/dist/references/dstg-meaid.js +352 -0
  287. package/dist/references/dstg-meaid.js.map +1 -0
  288. package/dist/references/index.d.ts +20 -0
  289. package/dist/references/index.d.ts.map +1 -0
  290. package/dist/references/index.js +31 -0
  291. package/dist/references/index.js.map +1 -0
  292. package/dist/references/nemoclaw.d.ts +48 -0
  293. package/dist/references/nemoclaw.d.ts.map +1 -0
  294. package/dist/references/nemoclaw.js +140 -0
  295. package/dist/references/nemoclaw.js.map +1 -0
  296. package/dist/references/nist-ai-rmf.d.ts +31 -0
  297. package/dist/references/nist-ai-rmf.d.ts.map +1 -0
  298. package/dist/references/nist-ai-rmf.js +627 -0
  299. package/dist/references/nist-ai-rmf.js.map +1 -0
  300. package/dist/references/owasp-agentic-top10.d.ts +50 -0
  301. package/dist/references/owasp-agentic-top10.d.ts.map +1 -0
  302. package/dist/references/owasp-agentic-top10.js +202 -0
  303. package/dist/references/owasp-agentic-top10.js.map +1 -0
  304. package/dist/references/registry-parity.test.d.ts +17 -0
  305. package/dist/references/registry-parity.test.d.ts.map +1 -0
  306. package/dist/references/registry-parity.test.js +87 -0
  307. package/dist/references/registry-parity.test.js.map +1 -0
  308. package/dist/references/registry.d.ts +90 -0
  309. package/dist/references/registry.d.ts.map +1 -0
  310. package/dist/references/registry.js +29 -0
  311. package/dist/references/registry.js.map +1 -0
  312. package/dist/tools/model-eval.d.ts +97 -0
  313. package/dist/tools/model-eval.d.ts.map +1 -0
  314. package/dist/tools/model-eval.js +307 -0
  315. package/dist/tools/model-eval.js.map +1 -0
  316. package/package.json +105 -0
  317. package/schemas/threat-composer-v1.schema.json +966 -0
  318. package/vendor/atlas-release/ATLAS-2026.07.yaml +17877 -0
  319. package/vendor/atlas-release/README.md +41 -0
@@ -0,0 +1,352 @@
1
+ /**
2
+ * DSTG MEAID — A Method for Ethical AI in Defence
3
+ *
4
+ * Primary source: "A Method for Ethical AI in Defence" (DSTG-TR-3786)
5
+ * Authors: Kate Devitt, Michael Gan, Jason Scholz and Robert Bolia
6
+ * Defence Science and Technology Group, Department of Defence
7
+ * © Commonwealth of Australia 2020
8
+ *
9
+ * Secondary source: "Case Study: A Method for Ethical AI in Defence Applied to
10
+ * an Envisioned Tactical Command and Control System" (DSTG-TR-3847)
11
+ * Authors: Dianna Gaetjens, Kate Devitt, and Christopher Shanahan
12
+ * © Commonwealth of Australia 2022
13
+ *
14
+ * MEAID is an ethical AI framework, not a security framework. It organises
15
+ * risk across five facets — Responsibility, Governance, Trust, Law, Traceability —
16
+ * and twenty evidence-based topics. Most risks are ethical or compliance in nature;
17
+ * this is correct and intentional. MEAID covers ground that AIVSS+ATLAS cannot.
18
+ *
19
+ * AIVSS metric mapping rationale:
20
+ * - Responsibility risks → EI (Ethical Implications), GV (Governance)
21
+ * - Governance risks → GV, EI, AD (Adaptive Defence — human factors/resilience)
22
+ * - Trust risks → GV, LL (Lifecycle & Lineage), CS (supply chain), MR, DS, EI
23
+ * - Law risks → GV, EI (legal compliance obligations)
24
+ * - Traceability risks → GV, LL, EI
25
+ */
26
+ import { buildHelpers, } from "./registry.js";
27
+ // ── RESPONSIBILITY ──────────────────────────────────────────────────────────
28
+ // Who is responsible for AI?
29
+ // Topics: Education, Command
30
+ const RESPONSIBILITY_RISKS = [
31
+ {
32
+ id: "meaid-responsibility-education",
33
+ framework: "dstg-meaid",
34
+ category: "Responsibility",
35
+ name: "Insufficient AI Education for Responsible Use",
36
+ description: "Military personnel who lack sufficient understanding of AI systems cannot lead, manage or meaningfully oversee them, creating a gap between formal responsibility and actual capability to exercise that responsibility. Defence teaches leadership through human cognition and social factors; without equivalent AI literacy, commanders cannot understand system behaviour, identify limitations, or develop the trust required to use AI appropriately in high-stakes decisions. This risk is especially acute as AI capabilities become embedded across defence functions, since personnel who cannot understand a system cannot be reasonably held responsible for its outputs. Education is the foundational prerequisite for all other facets of ethical AI.",
37
+ riskType: "ethical",
38
+ aivssMetrics: ["EI", "GV"],
39
+ atlasTechniqueIds: [],
40
+ sourceSection: "DSTG-TR-3786 §3.1.1 Education",
41
+ },
42
+ {
43
+ id: "meaid-responsibility-command",
44
+ framework: "dstg-meaid",
45
+ category: "Responsibility",
46
+ name: "Diffuse Command Accountability in Human-AI Decision Networks",
47
+ description: "When AI systems are embedded in the decision chain, responsibility for a given action is distributed across coders, procurers, deployers and operators — creating a 'moral crumple zone' in which human operators bear disproportionate accountability for system-wide failures they did not control. The information age means humans command information environments that control machines; identifying who is 'in command' of the AI — the algorithm designer, the acquisition agency, the deploying commander, or the operator — requires proactive legal and ethical frameworks. Without such frameworks, accountability falls arbitrarily on whichever human is most proximate to the outcome, rather than on those who made the decisions that shaped the system's behaviour. Australian domestic legislation (Archives Act, Defence Act) and ADDP 00.1 Command and Control impose obligations that must be explicitly reconciled with AI-augmented decision-making.",
48
+ riskType: "compliance",
49
+ aivssMetrics: ["GV", "EI"],
50
+ atlasTechniqueIds: [],
51
+ sourceSection: "DSTG-TR-3786 §3.1.2 Command; DSTG-TR-3847 §4.1.1 Accountability",
52
+ },
53
+ ];
54
+ // ── GOVERNANCE ──────────────────────────────────────────────────────────────
55
+ // How is AI controlled?
56
+ // Topics: Effectiveness, Integration, Transparency, Human Factors, Scope, Confidence, Resilience
57
+ const GOVERNANCE_RISKS = [
58
+ {
59
+ id: "meaid-governance-effectiveness",
60
+ framework: "dstg-meaid",
61
+ category: "Governance",
62
+ name: "Undemonstrated Effectiveness Prior to Deployment",
63
+ description: "AI systems may be deployed before their effectiveness has been rigorously demonstrated across the range of operational scenarios in which they will be used, including varying levels of risk, dynamics and decision requirements. The IEEE Ethically Aligned Design principle requires creators and operators of intelligent systems to provide evidence of fitness for purpose; deploying without such evidence exposes operators and commanders to decisions supported by systems whose capabilities are poorly understood. Robust pre-deployment testing through experimentation, simulation and limited live trials is an ethical obligation because overconfidence in an untested AI may lead to unjustified reliance and consequent harm.",
64
+ riskType: "ethical",
65
+ aivssMetrics: ["GV", "EI"],
66
+ atlasTechniqueIds: [],
67
+ sourceSection: "DSTG-TR-3786 §3.2.1 Effectiveness; DSTG-TR-3847 §4.2.1 Effectiveness",
68
+ },
69
+ {
70
+ id: "meaid-governance-integration",
71
+ framework: "dstg-meaid",
72
+ category: "Governance",
73
+ name: "Inadequate Human-AI Integration Design",
74
+ description: "Effective governance requires that AI systems be integrated with human operators in ways that account for individual differences in cognitive ability, operational context and human-autonomy teaming dynamics. Poor integration — treating AI as a bolt-on to existing processes rather than a redesign of the human-machine system — risks either under-use (operators bypassing AI) or over-use (automation bias, skill degradation). Social integration of AI into military organisations also produces second-order effects on culture, trust and institutional authority that require deliberate management. Integration that fits the operator and the context is an ethical precondition for effective and safe AI use.",
75
+ riskType: "ethical",
76
+ aivssMetrics: ["GV", "EI"],
77
+ atlasTechniqueIds: [],
78
+ sourceSection: "DSTG-TR-3786 §3.2.2 Integration; DSTG-TR-3847 §4.2.2 Integration",
79
+ },
80
+ {
81
+ id: "meaid-governance-transparency",
82
+ framework: "dstg-meaid",
83
+ category: "Governance",
84
+ name: "Transparency Miscalibration — Too Little or Too Much",
85
+ description: "Transparency — an operator's awareness of an autonomous agent's actions, decisions, behaviours and intentions — must be calibrated to context: too little creates opacity that undermines meaningful human control, while too much creates information overload and decision paralysis. The IEEE Ethically Aligned Design principle holds that the basis of a particular AI decision should always be discoverable, allowing for differences in user need (e.g. a legal review team vs. a tactical operator). Overly explanatory systems can increase automation bias by lending authority to outputs that operators can no longer critically assess. Defence must determine the appropriate level of transparency for each context of AI use throughout the system lifecycle.",
86
+ riskType: "ethical",
87
+ aivssMetrics: ["GV", "EI"],
88
+ atlasTechniqueIds: [],
89
+ sourceSection: "DSTG-TR-3786 §3.2.3 Transparency",
90
+ },
91
+ {
92
+ id: "meaid-governance-human-factors",
93
+ framework: "dstg-meaid",
94
+ category: "Governance",
95
+ name: "Human Cognitive and Neurophysiological Risk in Human-AI Teaming",
96
+ description: "Complex AI-enabled information systems create cognitive fatigue, distraction (via multi-modal delivery), automation bias and skill degradation in human operators — risks that are not being sufficiently considered when determining the appropriate level of AI use, when not to use it, or how to design human-on/in-the-loop processes. Reliance on automation over time degrades the cognitive and coordination capabilities of operators, leaving them vulnerable when operating at the boundaries of system competence or in novel contexts. The human-AI cognitive relationship is critical to the system's proper use, particularly as the tempo and scale of operations increase; autonomous countermeasures that can respond faster than human reaction times present a specific case where assigning humans to decisions may not improve decision-making.",
97
+ riskType: "ethical",
98
+ aivssMetrics: ["EI", "GV"],
99
+ atlasTechniqueIds: [],
100
+ sourceSection: "DSTG-TR-3786 §3.2.4 Human Factors",
101
+ },
102
+ {
103
+ id: "meaid-governance-scope",
104
+ framework: "dstg-meaid",
105
+ category: "Governance",
106
+ name: "Inappropriate Scope of AI Autonomy",
107
+ description: "Full autonomy is achievable only under very high levels of reliability and robustness that current AI systems have not demonstrated; deploying AI beyond its validated scope — whether through over-reliance or under-reliance — is an ethical risk. Technical issues including autonomy brittleness, capacity to handle emergence, software validation challenges, graceful degradation requirements and learning-system transparency mean that the appropriate scope of AI autonomy must be determined carefully for each deployment context. Human decision-makers can be nuanced, flexible and contextual in ways that brittle AIs struggle with, but machine complexity confounds human decision-makers even when there is ample time for considered judgment. Governance must define the boundaries of AI autonomy and ensure operators maintain an accurate mental model of system capabilities.",
108
+ riskType: "ethical",
109
+ aivssMetrics: ["GV", "EI"],
110
+ atlasTechniqueIds: [],
111
+ sourceSection: "DSTG-TR-3786 §3.2.5 Scope",
112
+ },
113
+ {
114
+ id: "meaid-governance-confidence",
115
+ framework: "dstg-meaid",
116
+ category: "Governance",
117
+ name: "Miscalibrated Confidence in AI Outputs",
118
+ description: "AI systems that provide advice should also provide calibrated confidence in that advice — not merely classification probability but also whether the class or situation is even within the model's trained domain. Confidence reporting is currently an unsolved problem: softmax and similar outputs do not indicate whether an input is within the model's training distribution, and very few AI systems convey multiple types of uncertainty (ignorance, vagueness, ambiguity, incompleteness) in a form meaningful to human operators. Automation bias — operators placing too high a confidence in AI outputs — is a direct consequence of poor confidence communication. Commanders need to know when to trust AI and when not to; without nested, calibrated confidence levels across all decision components, meaningful human control is compromised.",
119
+ riskType: "ethical",
120
+ aivssMetrics: ["EI", "GV"],
121
+ atlasTechniqueIds: [],
122
+ sourceSection: "DSTG-TR-3786 §3.2.6 Confidence; DSTG-TR-3847 §4.2.3 Confidence",
123
+ },
124
+ {
125
+ id: "meaid-governance-resilience",
126
+ framework: "dstg-meaid",
127
+ category: "Governance",
128
+ name: "Insufficient System Resilience to Anomalous Situations",
129
+ description: "AI-enabled Defence systems must exhibit resilience: the ability to foresee, contain, and recover from anomalous situations — including cyber-attack, sensor degradation, unexpected operational environments and AI malfunctions. Systems that cannot foresee and contain anomalies propagate errors into downstream human decisions without adequate warning; systems that cannot recover force abrupt fallback to human-only operation in conditions for which operators may be poorly prepared after extended AI-assisted work. Governance must require that AI systems be designed with resilience properties throughout the system lifecycle, using supervised and unsupervised machine learning for anomaly detection paired with probabilistic reasoning for reconfiguration decisions.",
130
+ riskType: "ethical",
131
+ aivssMetrics: ["GV", "EI"],
132
+ atlasTechniqueIds: [],
133
+ sourceSection: "DSTG-TR-3786 §3.2.7 Resilience; DSTG-TR-3847 §4.2.4 Resilience",
134
+ },
135
+ ];
136
+ // ── TRUST ───────────────────────────────────────────────────────────────────
137
+ // How can AI be trusted?
138
+ // Topics: Sovereign Capability, Safety, Supply Chain, Test & Evaluation,
139
+ // Misuse and Risks, Authority Pathway, Data Subjects
140
+ const TRUST_RISKS = [
141
+ {
142
+ id: "meaid-trust-sovereign-capability",
143
+ framework: "dstg-meaid",
144
+ category: "Trust",
145
+ name: "Sovereign AI Capability Dependency Risk",
146
+ description: "Australia's reliance on overseas AI suppliers may expose Defence to anti-competitive proprietary systems encumbered by International Traffic in Arms Regulations (ITAR) and other export control regimes, limiting the ability to modify, audit or sustain AI systems during operations. Lack of investment in sovereign AI capability risks decision superiority being contingent on the availability and goodwill of foreign vendors — a strategic vulnerability analogous to the lack of spare parts for jointly-procured platforms. The National Security Science and Technology Interdepartmental Committee has endorsed national security priorities — including cybersecurity, intelligence, border security and forensic science — all of which depend on AI; sovereign capability is a trust precondition for each.",
147
+ riskType: "compliance",
148
+ aivssMetrics: ["GV", "LL"],
149
+ atlasTechniqueIds: [],
150
+ sourceSection: "DSTG-TR-3786 §3.3.1 Sovereign Capability",
151
+ },
152
+ {
153
+ id: "meaid-trust-safety",
154
+ framework: "dstg-meaid",
155
+ category: "Trust",
156
+ name: "AI Safety Failure in Operational Contexts",
157
+ description: "AI systems used in Defence must be safe: avoiding negative side effects, avoiding reward hacking, maintaining scalable oversight, exploring safely and demonstrating robustness to distributional shift — that is, performing safely in contexts different from those in which they were trained. The Australian ethical AI principles require that AI systems should reliably operate in accordance with their intended purpose throughout their lifecycle; test and evaluation will have limited guarantees for adaptive AI systems operating in unforeseen contexts, meaning risk levels must be understood and documented at design time. Safety failures in Defence AI are not merely technical incidents but ethical failures with potential for irreversible harm to personnel and non-combatants.",
158
+ riskType: "ethical",
159
+ aivssMetrics: ["GV", "EI"],
160
+ atlasTechniqueIds: [],
161
+ sourceSection: "DSTG-TR-3786 §3.3.2 Safety",
162
+ },
163
+ {
164
+ id: "meaid-trust-supply-chain",
165
+ framework: "dstg-meaid",
166
+ category: "Trust",
167
+ name: "Unvetted AI Supply Chain — Bias, Backdoors and Undisclosed Provenance",
168
+ description: "AI generated through unsecure or opaque supply chains may contain backdoors, be vulnerable to hacking, or embed unjust biases from datasets to learning protocols to interpretive layers. Better data transparency is required to verify the provenance of suppliers and the full lineage of training data, models and components used in Defence AI systems. Participants felt that all aspects of developing AI for Defence should be scrutinised for ethicality — not just the end product — reflecting a 'cradle to grave' assessment model. Supply chain bias that produces unfair discrimination (violating jus in bello principles of distinction and proportionality) is an especially insidious risk because it is often invisible to the end user of a deployed product.",
169
+ riskType: "compliance",
170
+ aivssMetrics: ["LL", "GV", "CS"],
171
+ atlasTechniqueIds: [],
172
+ sourceSection: "DSTG-TR-3786 §3.3.3 Supply Chain",
173
+ },
174
+ {
175
+ id: "meaid-trust-test-and-evaluation",
176
+ framework: "dstg-meaid",
177
+ category: "Trust",
178
+ name: "Test and Evaluation Inadequacy for Adaptive AI Systems",
179
+ description: "Traditional test and evaluation defines desired system responses for all anticipated operating conditions, but the condition-response matrix for AI is intractably large — particularly for deep learning systems that are not programmed with explicit responses and can solve problems in domains not encoded in software. AI weapons systems are subject to Article 36 review under Additional Protocol 1 of the Geneva Conventions, which requires that new weapons be reviewed for compliance with international humanitarian law; adaptive AI systems that develop emergent capabilities challenge this review framework. AI T&E must be iterative, adversarial and conducted throughout design and application — including testing for second and third order effects that are especially likely to be unknown with new technology.",
180
+ riskType: "compliance",
181
+ aivssMetrics: ["GV", "LL"],
182
+ atlasTechniqueIds: [],
183
+ sourceSection: "DSTG-TR-3786 §3.3.4 Test and Evaluation",
184
+ },
185
+ {
186
+ id: "meaid-trust-misuse-and-risks",
187
+ framework: "dstg-meaid",
188
+ category: "Trust",
189
+ name: "AI Misuse, Cyber Exploitation and Unforeseeable Risk Vectors",
190
+ description: "The potential misuses and risks for AI are categorically different and more extensive depending on the anticipated level of autonomy and planned context of use; as AI capabilities become more powerful, threats expand through lower costs, a larger pool of capable threat actors, increased attack rates and a wider set of targets. Cyber capabilities that change system behaviour — either deliberately or as a malware by-product — represent a significant threat to trust in autonomous systems; systems must be resilient to attack and protect their communication feeds. In a worst-case scenario, AI systems could be re-tasked to operate on behalf of opposing forces. Dirty data used to train AI (demonstrated by MIT's 'Norman' experiment) and the unavailability of responsible disclosure norms for AI models present additional misuse vectors that Defence must govern proactively.",
191
+ riskType: "security",
192
+ aivssMetrics: ["MR", "DS", "GV"],
193
+ atlasTechniqueIds: [
194
+ "AML.T0020", // Poison training data
195
+ "AML.T0018", // Backdoor ML model
196
+ ],
197
+ sourceSection: "DSTG-TR-3786 §3.3.5 Misuse and Risks",
198
+ },
199
+ {
200
+ id: "meaid-trust-authority-pathway",
201
+ framework: "dstg-meaid",
202
+ category: "Trust",
203
+ name: "Failure to Embed Authority Pathway and Ethical Constraints in AI Decision Support",
204
+ description: "AI decision support systems used in targeting and use-of-force contexts must be programmed with the applicable ethical and legal constraints — including rules of engagement, IHL distinctions between combatants and non-combatants, and proportionality — so that the AI guides rather than bypasses the authority pathway. The Vincennes incident, where human cognitive biases led to the shooting down of an Iranian civilian aircraft, illustrates how AI prioritising IHL compliance and integrating disconfirming evidence might prevent errors of catastrophic consequence. AI built to assist tactical decision-making at trigger-point decisions must be designed with embedded ethical awareness, reasoning and action constraints — not as post-hoc filters but as constitutive elements of the system's decision architecture.",
205
+ riskType: "ethical",
206
+ aivssMetrics: ["EI", "GV"],
207
+ atlasTechniqueIds: [],
208
+ sourceSection: "DSTG-TR-3786 §3.3.6 Authority Pathway; DSTG-TR-3847 §4.2.5 Decision support for targeting",
209
+ },
210
+ {
211
+ id: "meaid-trust-data-subjects",
212
+ framework: "dstg-meaid",
213
+ category: "Trust",
214
+ name: "Privacy and Dignity Harm to Data Subjects via Defence AI",
215
+ description: "Data of Defence personnel may be used by AI in HR areas such as posting, promotion, disciplinary management, recruitment and retention — contexts where the Australian ethical AI principles require respect for privacy rights and data protection throughout the system lifecycle. The use of big data and statistical research tools creates a heightened risk that individuals could be harmed through mosaic theory techniques — where AI programs with access to both anonymous surveys and system-level demographic data can attribute negative comments or indicators to specific individuals. Defence must balance the business intelligence value of large-scale personnel data analysis against the ethical obligations owed to individuals whose data is analysed, noting that Defence personnel face different circumstances from civilians regarding data availability and national security constraints.",
216
+ riskType: "ethical",
217
+ aivssMetrics: ["EI", "GV"],
218
+ atlasTechniqueIds: [],
219
+ sourceSection: "DSTG-TR-3786 §3.3.7 Data Subjects",
220
+ },
221
+ ];
222
+ // ── LAW ─────────────────────────────────────────────────────────────────────
223
+ // How can AI be used lawfully?
224
+ // Topics: Protected Symbols and Surrender, De-escalation
225
+ const LAW_RISKS = [
226
+ {
227
+ id: "meaid-law-protected-symbols",
228
+ framework: "dstg-meaid",
229
+ category: "Law",
230
+ name: "AI Misidentification of Protected Symbols, Civilians and Surrender",
231
+ description: "AI systems deployed in combat contexts must correctly recognise protected symbols (red cross, red crescent, white flag of surrender) and apply the IHL distinctions of jus in bello — proportionality, distinction and military necessity — to avoid unlawful targeting of protected persons, objects and activities. Human error in protected symbol recognition has produced catastrophic and politically damaging results (e.g. attacks on MSF hospital in Kunduz, 2015; attacks on hospitals in Yemen). Adversarial parties also falsify protected symbols — an act of perfidy that constitutes a war crime and can fool AI classifiers — meaning that human-AI systems seeking to improve IHL compliance must be embedded in an information environment that anticipates deception, disinformation and misinformation regarding protected objects. Failure to address this risk exposes Defence to violations of international humanitarian law.",
232
+ riskType: "compliance",
233
+ aivssMetrics: ["GV", "EI"],
234
+ atlasTechniqueIds: [],
235
+ sourceSection: "DSTG-TR-3786 §3.4.1 Protected Symbols and Surrender",
236
+ },
237
+ {
238
+ id: "meaid-law-de-escalation",
239
+ framework: "dstg-meaid",
240
+ category: "Law",
241
+ name: "AI-Driven Force Escalation and Proportionality Risk",
242
+ description: "The use of AI and autonomous systems changes the escalation calculus in conflict: the reduced political cost of losing an unmanned system versus a crewed aircraft alters retaliatory thresholds, while the un-attributable nature of some cyber and electronic warfare systems creates new challenges for both force escalation and de-escalation. AI could be used to increase situational awareness to enable commanders to manage escalation with better information, but poorly governed AI could also accelerate decision cycles in ways that bypass the proportionality assessments required by jus ad bellum. Defence must understand the evolving dynamics of escalation and deterrence when using autonomous systems, and ensure AI decision support tools are consistent with the legal obligation to consider proportionality in the use of force.",
243
+ riskType: "compliance",
244
+ aivssMetrics: ["GV", "EI"],
245
+ atlasTechniqueIds: [],
246
+ sourceSection: "DSTG-TR-3786 §3.4.2 De-escalation",
247
+ },
248
+ ];
249
+ // ── TRACEABILITY ─────────────────────────────────────────────────────────────
250
+ // How are the actions of AI recorded?
251
+ // Topics: Explainability, Accountability
252
+ const TRACEABILITY_RISKS = [
253
+ {
254
+ id: "meaid-traceability-explainability",
255
+ framework: "dstg-meaid",
256
+ category: "Traceability",
257
+ name: "Insufficient AI Explainability for Meaningful Human Oversight",
258
+ description: "Human oversight, understanding and explainability of AI decisions are complex and variously interpretable requirements; there is no shared definition of what constitutes a sufficient explanation for an AI system. The Boeing 737 Max MCAS case demonstrates how autonomous systems can be deployed without operators and testing authorities being sufficiently informed about system behaviour — a failure of explainability that caused hundreds of deaths. DARPA's Explainable AI (XAI) programme recognises that explainability is critical for humans to appropriately trust and effectively manage human-AI systems, but notes that some explanations can decrease scepticism and increase automation bias. Information about AI system training, test and evaluation, background theories and assumptions must be retained and available to auditors, while the appropriate level of explanation for tactical versus legal review contexts will differ.",
259
+ riskType: "ethical",
260
+ aivssMetrics: ["GV", "EI", "LL"],
261
+ atlasTechniqueIds: [],
262
+ sourceSection: "DSTG-TR-3786 §3.5.1 Explainability",
263
+ },
264
+ {
265
+ id: "meaid-traceability-accountability",
266
+ framework: "dstg-meaid",
267
+ category: "Traceability",
268
+ name: "Accountability Framework Gap for AI-Assisted Decisions",
269
+ description: "Australian domestic legislation — including the Archives Act and the Public Governance, Performance and Accountability Act — imposes obligations on Commonwealth Departments to record and retain records relating to certain decisions; AI-driven decisions are likely captured by these requirements but existing policy has not explicitly addressed how AI decision records should be structured, retained and audited. Decisions made by or with AI must be supported by evidence of the AI decision process so that potential reviews are meaningful; human-AI logistics and operational systems should be able to output explanations of decisions in accordance with legislative obligations. The basis of any particular AI decision in Defence — data, training, theoretical underpinning, decision-making models and actions — should be recorded and auditable by appropriate levels of government, and made available to the public where appropriate.",
270
+ riskType: "compliance",
271
+ aivssMetrics: ["GV", "LL", "EI"],
272
+ atlasTechniqueIds: [],
273
+ sourceSection: "DSTG-TR-3786 §3.5.2 Accountability; DSTG-TR-3847 §4.1.1 Accountability",
274
+ },
275
+ ];
276
+ // ── WHOLE-OF-DEFENCE DATA GOVERNANCE ────────────────────────────────────────
277
+ // From DSTG-TR-3847 key findings — a cross-cutting risk not covered by the
278
+ // 20 topics directly but surfaced as a first-order finding requiring policy action.
279
+ const DATA_GOVERNANCE_RISKS = [
280
+ {
281
+ id: "meaid-data-governance",
282
+ framework: "dstg-meaid",
283
+ category: "Governance",
284
+ name: "Absence of a Whole-of-Defence AI Data Policy",
285
+ description: "The lack of a comprehensive Defence data framework for AI applications — governing collection, processing and transformation, storage, and use of data — represents a significant ethical risk that is insidious because it is often invisible to the user of a product built on poorly governed data. Errors, inaccuracy, bias and discrimination arising from poor data practices are especially likely in AI systems relying on deep learning, where exponential increases in data volume amplify the consequences of any lack of rigour in data collection and use. DSTG-TR-3847 identifies this as a whole-of-Defence finding: any lack of rigour around data practices presents significant ethical risks including unintentional operational harms, and a comprehensive Defence data framework for AI applications is required to allow consistency across all AI projects.",
286
+ riskType: "compliance",
287
+ aivssMetrics: ["GV", "LL", "DS"],
288
+ atlasTechniqueIds: [],
289
+ sourceSection: "DSTG-TR-3847 §4.1.3 Data",
290
+ },
291
+ ];
292
+ /**
293
+ * Complete MEAID risk catalogue.
294
+ *
295
+ * 20 topics across 5 facets, plus one additional cross-cutting data governance
296
+ * risk surfaced by the DSTG-TR-3847 case study as a whole-of-Defence finding.
297
+ * Total: 21 entries.
298
+ */
299
+ export const DSTG_MEAID_RISKS = [
300
+ ...RESPONSIBILITY_RISKS,
301
+ ...GOVERNANCE_RISKS,
302
+ ...TRUST_RISKS,
303
+ ...LAW_RISKS,
304
+ ...TRACEABILITY_RISKS,
305
+ ...DATA_GOVERNANCE_RISKS,
306
+ ];
307
+ /**
308
+ * Citation for the primary MEAID document.
309
+ * The case study (DSTG-TR-3847) is the secondary source and is referenced in
310
+ * individual risk sourceSection fields where it provides additional detail.
311
+ */
312
+ export const DSTG_MEAID_CITATION = {
313
+ id: "dstg-meaid",
314
+ title: "A Method for Ethical AI in Defence",
315
+ version: "DSTG-TR-3786",
316
+ authors: [
317
+ "Kate Devitt",
318
+ "Michael Gan",
319
+ "Jason Scholz",
320
+ "Robert Bolia",
321
+ "Defence Science and Technology Group, Department of Defence",
322
+ "Trusted Autonomous Systems Defence Cooperative Research Centre (TASDCRC)",
323
+ ],
324
+ year: 2020,
325
+ url: "https://www.dst.defence.gov.au/ethicalai",
326
+ };
327
+ // ── LOOKUP HELPERS ────────────────────────────────────────────────────────────
328
+ const helpers = buildHelpers(DSTG_MEAID_RISKS);
329
+ /**
330
+ * Return MEAID risks relevant to a given AIVSS V4 metric.
331
+ * Results are ordered by number of ATLAS techniques (most-grounded first).
332
+ */
333
+ export const getRisksForMetric = helpers.getRisksForMetric;
334
+ /**
335
+ * Return MEAID risks of a given risk type (security | ethical | compliance).
336
+ */
337
+ export const getRisksByType = helpers.getRisksByType;
338
+ /**
339
+ * Look up a MEAID risk by its id. Returns undefined if not found.
340
+ */
341
+ export const getRiskById = helpers.getRiskById;
342
+ /**
343
+ * Complete MEAID framework adapter.
344
+ */
345
+ export const DSTG_MEAID_ADAPTER = {
346
+ citation: DSTG_MEAID_CITATION,
347
+ risks: DSTG_MEAID_RISKS,
348
+ getRisksForMetric,
349
+ getRisksByType,
350
+ getRiskById,
351
+ };
352
+ //# sourceMappingURL=dstg-meaid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dstg-meaid.js","sourceRoot":"","sources":["../../src/references/dstg-meaid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Framework registry bootstrap.
3
+ *
4
+ * Imports each adapter and registers it. Import this module once (the assembler
5
+ * does so) to ensure FRAMEWORK_REGISTRY is populated before any lookups occur.
6
+ *
7
+ * Adding a framework: create src/references/{name}.ts exporting a FrameworkAdapter,
8
+ * then add one registerFrameworkAdapter() call below.
9
+ */
10
+ import { FRAMEWORK_REGISTRY } from "./registry.js";
11
+ /**
12
+ * Framework IDs this build actually registers. Exported so the parity test and
13
+ * the CLI can assert against one list rather than re-deriving it, and so drift
14
+ * between what package.json advertises and what the engine does is mechanical
15
+ * to detect.
16
+ * */
17
+ export declare const REGISTERED_FRAMEWORK_IDS: string[];
18
+ export { FRAMEWORK_REGISTRY };
19
+ export type { FrameworkAdapter, FrameworkRisk, FrameworkCitation, RiskType } from "./registry.js";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/references/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAA4B,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAe7E;;;;;KAKK;AACL,eAAO,MAAM,wBAAwB,UAAsD,CAAC;AAE5F,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Framework registry bootstrap.
3
+ *
4
+ * Imports each adapter and registers it. Import this module once (the assembler
5
+ * does so) to ensure FRAMEWORK_REGISTRY is populated before any lookups occur.
6
+ *
7
+ * Adding a framework: create src/references/{name}.ts exporting a FrameworkAdapter,
8
+ * then add one registerFrameworkAdapter() call below.
9
+ */
10
+ import { registerFrameworkAdapter, FRAMEWORK_REGISTRY } from "./registry.js";
11
+ import { ACSC_ADAPTER } from "./acsc-risks.js";
12
+ import { DSTG_MEAID_ADAPTER } from "./dstg-meaid.js";
13
+ import { AICM_ADAPTER } from "./aicm.js";
14
+ import { NIST_AI_RMF_ADAPTER } from "./nist-ai-rmf.js";
15
+ import { OWASP_AGENTIC_TOP10_ADAPTER } from "./owasp-agentic-top10.js";
16
+ import { NEMOCLAW_ADAPTER } from "./nemoclaw.js";
17
+ registerFrameworkAdapter(ACSC_ADAPTER);
18
+ registerFrameworkAdapter(DSTG_MEAID_ADAPTER);
19
+ registerFrameworkAdapter(AICM_ADAPTER);
20
+ registerFrameworkAdapter(NIST_AI_RMF_ADAPTER);
21
+ registerFrameworkAdapter(OWASP_AGENTIC_TOP10_ADAPTER);
22
+ registerFrameworkAdapter(NEMOCLAW_ADAPTER);
23
+ /**
24
+ * Framework IDs this build actually registers. Exported so the parity test and
25
+ * the CLI can assert against one list rather than re-deriving it, and so drift
26
+ * between what package.json advertises and what the engine does is mechanical
27
+ * to detect.
28
+ * */
29
+ export const REGISTERED_FRAMEWORK_IDS = FRAMEWORK_REGISTRY.map((a) => a.citation.id).sort();
30
+ export { FRAMEWORK_REGISTRY };
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/references/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,wBAAwB,CAAC,YAAY,CAAC,CAAC;AACvC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;AAC7C,wBAAwB,CAAC,YAAY,CAAC,CAAC;AACvC,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;AAC9C,wBAAwB,CAAC,2BAA2B,CAAC,CAAC;AACtD,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;AAE3C;;;;;KAKK;AACL,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAE5F,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * NeMo Claw — Security Isolation Layer Reference
3
+ *
4
+ * NeMo Claw is NVIDIA's enterprise security wrapper for OpenClaw. It places the
5
+ * agent inside a kernel-enforced sandbox (Landlock + seccomp + network namespaces)
6
+ * rather than applying application-layer guardrails. Security constraints live
7
+ * outside the agent process — they cannot be bypassed even if the agent is
8
+ * compromised.
9
+ *
10
+ * This adapter documents NeMo Claw's four isolation layers as FrameworkRisks —
11
+ * specifically, the *residual risks* that persist even with the sandbox active.
12
+ * It is used by Canopy to annotate which threats are mitigated vs. unchanged
13
+ * when comparing a baseline OpenClaw deployment to a NeMo Claw deployment.
14
+ *
15
+ * Architecture:
16
+ * Layer 1 — Network: allowlisted egress only (hot-reloadable YAML policy)
17
+ * Layer 2 — Filesystem: agent restricted to /sandbox + /tmp; host FS read-only
18
+ * Layer 3 — Process: Landlock + seccomp block privilege escalation + dangerous syscalls
19
+ * Layer 4 — Inference: all model API calls routed through controlled backends
20
+ *
21
+ * Container taxonomy mapping (what NeMo Claw changes):
22
+ * L4 Host: largely mitigated by Layers 2 + 3 (Landlock, seccomp, network ns)
23
+ * L3 Engine: largely mitigated by Layer 3 (seccomp)
24
+ * L2 Application: partially mitigated (Layer 1 network, Layer 4 inference routing)
25
+ * L1 Orchestration: unchanged — cron and agent bindings operate inside the sandbox
26
+ *
27
+ * Key caveat: NeMo Claw is alpha/early-access. Ubuntu 22.04+ only. 8 GB RAM min.
28
+ *
29
+ * Reference: https://www.secondtalent.com/resources/nemoclaw-vs-openclaw/
30
+ */
31
+ import type { MetricCode } from "../aivss/types.js";
32
+ import { type FrameworkRisk, type FrameworkCitation, type FrameworkAdapter } from "./registry.js";
33
+ declare const NEMOCLAW_RESIDUAL_RISKS: FrameworkRisk[];
34
+ declare module "./registry.js" {
35
+ interface FrameworkRisk {
36
+ containerTaxonomy?: {
37
+ layer: string;
38
+ exploitType: string;
39
+ };
40
+ }
41
+ }
42
+ export declare const NEMOCLAW_CITATION: FrameworkCitation;
43
+ export declare const getRisksForMetric: (metric: MetricCode) => FrameworkRisk[];
44
+ export declare const getRisksByType: (type: import("./registry.js").RiskType) => FrameworkRisk[];
45
+ export declare const getRiskById: (id: string) => FrameworkRisk | undefined;
46
+ export declare const NEMOCLAW_ADAPTER: FrameworkAdapter;
47
+ export { NEMOCLAW_RESIDUAL_RISKS };
48
+ //# sourceMappingURL=nemoclaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nemoclaw.d.ts","sourceRoot":"","sources":["../../src/references/nemoclaw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAEtB,MAAM,eAAe,CAAC;AAIvB,QAAA,MAAM,uBAAuB,EAAE,aAAa,EA2F3C,CAAC;AAIF,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,aAAa;QACrB,iBAAiB,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5D;CACF;AAID,eAAO,MAAM,iBAAiB,EAAE,iBAO/B,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,aAAa,EAA8B,CAAC;AACpG,eAAO,MAAM,cAAc,6DAAyB,CAAC;AACrD,eAAO,MAAM,WAAW,2CAAsB,CAAC;AAE/C,eAAO,MAAM,gBAAgB,EAAE,gBAM9B,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * NeMo Claw — Security Isolation Layer Reference
3
+ *
4
+ * NeMo Claw is NVIDIA's enterprise security wrapper for OpenClaw. It places the
5
+ * agent inside a kernel-enforced sandbox (Landlock + seccomp + network namespaces)
6
+ * rather than applying application-layer guardrails. Security constraints live
7
+ * outside the agent process — they cannot be bypassed even if the agent is
8
+ * compromised.
9
+ *
10
+ * This adapter documents NeMo Claw's four isolation layers as FrameworkRisks —
11
+ * specifically, the *residual risks* that persist even with the sandbox active.
12
+ * It is used by Canopy to annotate which threats are mitigated vs. unchanged
13
+ * when comparing a baseline OpenClaw deployment to a NeMo Claw deployment.
14
+ *
15
+ * Architecture:
16
+ * Layer 1 — Network: allowlisted egress only (hot-reloadable YAML policy)
17
+ * Layer 2 — Filesystem: agent restricted to /sandbox + /tmp; host FS read-only
18
+ * Layer 3 — Process: Landlock + seccomp block privilege escalation + dangerous syscalls
19
+ * Layer 4 — Inference: all model API calls routed through controlled backends
20
+ *
21
+ * Container taxonomy mapping (what NeMo Claw changes):
22
+ * L4 Host: largely mitigated by Layers 2 + 3 (Landlock, seccomp, network ns)
23
+ * L3 Engine: largely mitigated by Layer 3 (seccomp)
24
+ * L2 Application: partially mitigated (Layer 1 network, Layer 4 inference routing)
25
+ * L1 Orchestration: unchanged — cron and agent bindings operate inside the sandbox
26
+ *
27
+ * Key caveat: NeMo Claw is alpha/early-access. Ubuntu 22.04+ only. 8 GB RAM min.
28
+ *
29
+ * Reference: https://www.secondtalent.com/resources/nemoclaw-vs-openclaw/
30
+ */
31
+ import { buildHelpers, } from "./registry.js";
32
+ // ── RESIDUAL RISKS (what NeMo Claw does NOT fix) ─────────────────────────────
33
+ const NEMOCLAW_RESIDUAL_RISKS = [
34
+ {
35
+ id: "nemoclaw-residual-prompt-injection",
36
+ framework: "nemoclaw",
37
+ category: "Residual — Application Layer",
38
+ name: "Prompt Injection Within Sandboxed Process",
39
+ description: "NeMo Claw's kernel-level sandbox confines the damage from a successful prompt injection, " +
40
+ "but does not prevent the injection itself. An attacker who injects a malicious instruction " +
41
+ "via an inbound channel can still cause the agent to execute unintended tool calls, " +
42
+ "exfiltrate data to allowlisted endpoints, or abuse skills that operate within /sandbox. " +
43
+ "The blast radius is reduced (no host FS access, egress filtered) but the attack vector " +
44
+ "remains fully open at L2 Application. MR and EI metrics are unchanged by the sandbox.",
45
+ riskType: "security",
46
+ aivssMetrics: ["MR", "EI"],
47
+ atlasTechniqueIds: ["AML.T0051"],
48
+ sourceSection: "NeMo Claw — Layer 2 Filesystem (residual)",
49
+ containerTaxonomy: { layer: "L2 Application", exploitType: "Prompt injection (contained)" },
50
+ },
51
+ {
52
+ id: "nemoclaw-residual-cron-persistence",
53
+ framework: "nemoclaw",
54
+ category: "Residual — Orchestration Layer",
55
+ name: "Autonomous Cron Execution Within Sandbox",
56
+ description: "Cron-based job execution operates entirely inside the sandbox boundary. A successful " +
57
+ "prompt injection that creates a cron job establishes persistence that survives conversation " +
58
+ "resets and executes autonomously — the sandbox does not prevent this. The persistence " +
59
+ "mechanism remains intact; only the escape path (host FS, network exfiltration beyond " +
60
+ "allowlist) is blocked. The AA metric (Agentic Autonomy) risk is unchanged.",
61
+ riskType: "security",
62
+ aivssMetrics: ["AA"],
63
+ atlasTechniqueIds: ["AML.T0080"],
64
+ sourceSection: "NeMo Claw — L1 Orchestration (unchanged)",
65
+ containerTaxonomy: { layer: "L1 Orchestration", exploitType: "Scheduled task persistence" },
66
+ },
67
+ {
68
+ id: "nemoclaw-residual-alpha-stability",
69
+ framework: "nemoclaw",
70
+ category: "Residual — Deployment Risk",
71
+ name: "Alpha-Stage Deployment Maturity",
72
+ description: "NeMo Claw is alpha/early-access software. The security properties of the four isolation " +
73
+ "layers have not been independently audited at production scale. Organisations relying on " +
74
+ "NeMo Claw as their primary security control should treat the isolation guarantees as " +
75
+ "best-effort until a stable release with published CVE history is available. " +
76
+ "Ubuntu 22.04+ requirement also limits deployment flexibility. The GV metric " +
77
+ "(Governance) must account for this maturity gap.",
78
+ riskType: "compliance",
79
+ aivssMetrics: ["GV", "DC"],
80
+ atlasTechniqueIds: [],
81
+ sourceSection: "NeMo Claw — Deployment maturity (alpha)",
82
+ containerTaxonomy: { layer: "L2 Application", exploitType: "Immature security control" },
83
+ },
84
+ // ── MITIGATIONS (what NeMo Claw DOES fix — documented for completeness) ────
85
+ {
86
+ id: "nemoclaw-mitigated-supply-chain",
87
+ framework: "nemoclaw",
88
+ category: "Mitigated — Filesystem Isolation",
89
+ name: "Malicious Skill Exfiltration Path Broken",
90
+ description: "NeMo Claw's Layer 2 filesystem isolation restricts all skill execution to /sandbox and /tmp. " +
91
+ "A malicious skill cannot read host credentials, cannot write to persistent storage outside " +
92
+ "the sandbox, and cannot reach unapproved network endpoints. The 900-malicious-package " +
93
+ "OpenClaw registry incident (early 2026) would have had significantly reduced impact " +
94
+ "under NeMo Claw — skills could not escape their confined environment regardless of payload.",
95
+ riskType: "security",
96
+ aivssMetrics: ["CS", "DC"],
97
+ atlasTechniqueIds: ["AML.T0010"],
98
+ sourceSection: "NeMo Claw — Layer 2 Filesystem + Layer 1 Network",
99
+ containerTaxonomy: { layer: "L2 Application", exploitType: "Supply chain (blast radius reduced)" },
100
+ },
101
+ {
102
+ id: "nemoclaw-mitigated-credential-theft",
103
+ framework: "nemoclaw",
104
+ category: "Mitigated — Host Filesystem",
105
+ name: "Host Credential Access Blocked",
106
+ description: "Without NeMo Claw, skill API keys and channel tokens in openclaw.json are accessible to " +
107
+ "any process with device access. NeMo Claw's Layer 2 isolation makes the host filesystem " +
108
+ "read-only outside /sandbox — a compromised skill or injected agent action cannot read " +
109
+ "openclaw.json or other host credential stores. This directly mitigates the container taxonomy L4 " +
110
+ "Host credential theft vector.",
111
+ riskType: "security",
112
+ aivssMetrics: ["DC", "CS"],
113
+ atlasTechniqueIds: ["AML.T0044"],
114
+ sourceSection: "NeMo Claw — Layer 2 Filesystem",
115
+ containerTaxonomy: { layer: "L4 Host", exploitType: "Credential theft (mitigated)" },
116
+ },
117
+ ];
118
+ // ── Citation ──────────────────────────────────────────────────────────────────
119
+ export const NEMOCLAW_CITATION = {
120
+ id: "nemoclaw",
121
+ title: "NeMo Claw: Security Wrapper for OpenClaw",
122
+ authors: ["Second Talent"],
123
+ url: "https://www.secondtalent.com/resources/nemoclaw-vs-openclaw/",
124
+ version: "alpha-2026",
125
+ year: 2026,
126
+ };
127
+ // ── Adapter ───────────────────────────────────────────────────────────────────
128
+ const helpers = buildHelpers(NEMOCLAW_RESIDUAL_RISKS);
129
+ export const getRisksForMetric = helpers.getRisksForMetric;
130
+ export const getRisksByType = helpers.getRisksByType;
131
+ export const getRiskById = helpers.getRiskById;
132
+ export const NEMOCLAW_ADAPTER = {
133
+ citation: NEMOCLAW_CITATION,
134
+ risks: NEMOCLAW_RESIDUAL_RISKS,
135
+ getRisksForMetric: helpers.getRisksForMetric,
136
+ getRisksByType: helpers.getRisksByType,
137
+ getRiskById: helpers.getRiskById,
138
+ };
139
+ export { NEMOCLAW_RESIDUAL_RISKS };
140
+ //# sourceMappingURL=nemoclaw.js.map