@openauditmodel/cli 0.4.1 → 0.4.2

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 (339) hide show
  1. package/README.md +1 -1
  2. package/conformance-kit/README.md +109 -0
  3. package/conformance-kit/manifest.json +8023 -0
  4. package/examples/README.md +62 -0
  5. package/examples/integrity/README.md +103 -0
  6. package/examples/integrity/invalid/broken-previous-hash/001.json +53 -0
  7. package/examples/integrity/invalid/broken-previous-hash/002.json +52 -0
  8. package/examples/integrity/invalid/broken-previous-hash/003.json +43 -0
  9. package/examples/integrity/invalid/duplicate-sequence/001.json +53 -0
  10. package/examples/integrity/invalid/duplicate-sequence/002.json +52 -0
  11. package/examples/integrity/invalid/duplicate-sequence/003.json +43 -0
  12. package/examples/integrity/invalid/missing-sequence/001.json +53 -0
  13. package/examples/integrity/invalid/missing-sequence/002.json +51 -0
  14. package/examples/integrity/invalid/missing-sequence/003.json +43 -0
  15. package/examples/integrity/invalid/reordered-chain/001.json +53 -0
  16. package/examples/integrity/invalid/reordered-chain/002.json +52 -0
  17. package/examples/integrity/invalid/reordered-chain/003.json +43 -0
  18. package/examples/integrity/invalid/tampered-event.json +51 -0
  19. package/examples/integrity/invalid/tampered-signed-event.json +46 -0
  20. package/examples/integrity/invalid/unsupported-algorithm.json +51 -0
  21. package/examples/integrity/invalid/unsupported-signature-algorithm.json +46 -0
  22. package/examples/integrity/invalid/wrong-declared-hash.json +51 -0
  23. package/examples/integrity/keys/ed25519-test-public.pem +3 -0
  24. package/examples/integrity/valid/signed-event-ed25519.json +46 -0
  25. package/examples/integrity/valid/single-event-sha256.json +51 -0
  26. package/examples/integrity/valid/three-event-chain/001.json +53 -0
  27. package/examples/integrity/valid/three-event-chain/002.json +52 -0
  28. package/examples/integrity/valid/three-event-chain/003.json +43 -0
  29. package/examples/integrity/valid/unicode-and-number-event.json +68 -0
  30. package/examples/invalid/README.md +38 -0
  31. package/examples/invalid/delegation-without-subject.json +27 -0
  32. package/examples/invalid/failure-without-error.json +28 -0
  33. package/examples/invalid/invalid-event-name.json +22 -0
  34. package/examples/invalid/invalid-extension-name.json +25 -0
  35. package/examples/invalid/missing-actor.json +18 -0
  36. package/examples/invalid/missing-resource.json +18 -0
  37. package/examples/invalid/unknown-core-property.json +23 -0
  38. package/examples/privacy/README.md +101 -0
  39. package/examples/privacy/clean/hashes-and-identifiers.json +42 -0
  40. package/examples/privacy/clean/minimal-clean-event.json +22 -0
  41. package/examples/privacy/clean/safe-evidence-reference.json +43 -0
  42. package/examples/privacy/clean/sanitized-change.json +40 -0
  43. package/examples/privacy/clean/structured-metadata.json +43 -0
  44. package/examples/privacy/findings/access-token-field.json +27 -0
  45. package/examples/privacy/findings/bearer-token.json +26 -0
  46. package/examples/privacy/findings/credentialed-connection-string.json +26 -0
  47. package/examples/privacy/findings/evidence-query-string.json +29 -0
  48. package/examples/privacy/findings/high-entropy-token.json +26 -0
  49. package/examples/privacy/findings/jwt-token.json +26 -0
  50. package/examples/privacy/findings/oversized-change-before.json +89 -0
  51. package/examples/privacy/findings/password-field.json +27 -0
  52. package/examples/privacy/findings/private-key.json +26 -0
  53. package/examples/privacy/findings/raw-response-body.json +26 -0
  54. package/examples/privacy/findings/url-userinfo.json +26 -0
  55. package/examples/profiles/api-and-integration-management/README.md +119 -0
  56. package/examples/profiles/api-and-integration-management/invalid/api-key-create-missing-authentication.json +64 -0
  57. package/examples/profiles/api-and-integration-management/invalid/api-key-create-missing-authorization.json +64 -0
  58. package/examples/profiles/api-and-integration-management/invalid/api-key-rotate-missing-credential-reference.json +58 -0
  59. package/examples/profiles/api-and-integration-management/invalid/integration-configuration-update-missing-connection-id.json +67 -0
  60. package/examples/profiles/api-and-integration-management/invalid/integration-connect-missing-approval-status.json +78 -0
  61. package/examples/profiles/api-and-integration-management/invalid/integration-disconnect-missing-authentication.json +63 -0
  62. package/examples/profiles/api-and-integration-management/invalid/integration-reauthorize-missing-error-type.json +68 -0
  63. package/examples/profiles/api-and-integration-management/invalid/integration-sync-start-missing-correlation-id.json +58 -0
  64. package/examples/profiles/api-and-integration-management/invalid/webhook-create-missing-endpoint-class.json +63 -0
  65. package/examples/profiles/api-and-integration-management/invalid/webhook-create-missing-type.json +63 -0
  66. package/examples/profiles/api-and-integration-management/invalid/webhook-disable-missing-reason.json +58 -0
  67. package/examples/profiles/api-and-integration-management/invalid/webhook-update-missing-change.json +63 -0
  68. package/examples/profiles/api-and-integration-management/not-applicable/api-request.json +45 -0
  69. package/examples/profiles/api-and-integration-management/not-applicable/integration-sync-progress.json +44 -0
  70. package/examples/profiles/api-and-integration-management/not-applicable/webhook-delivery.json +44 -0
  71. package/examples/profiles/api-and-integration-management/valid/api-key-create.json +70 -0
  72. package/examples/profiles/api-and-integration-management/valid/api-key-revoke.json +72 -0
  73. package/examples/profiles/api-and-integration-management/valid/api-key-rotate.json +59 -0
  74. package/examples/profiles/api-and-integration-management/valid/integration-configuration-update.json +68 -0
  75. package/examples/profiles/api-and-integration-management/valid/integration-connect.json +79 -0
  76. package/examples/profiles/api-and-integration-management/valid/integration-disconnect.json +69 -0
  77. package/examples/profiles/api-and-integration-management/valid/integration-reauthorize-failure.json +69 -0
  78. package/examples/profiles/api-and-integration-management/valid/integration-sync-cancel.json +65 -0
  79. package/examples/profiles/api-and-integration-management/valid/integration-sync-start.json +59 -0
  80. package/examples/profiles/api-and-integration-management/valid/webhook-create.json +64 -0
  81. package/examples/profiles/api-and-integration-management/valid/webhook-disable.json +63 -0
  82. package/examples/profiles/api-and-integration-management/valid/webhook-test.json +59 -0
  83. package/examples/profiles/api-and-integration-management/valid/webhook-update.json +76 -0
  84. package/examples/profiles/backup-and-recovery/README.md +127 -0
  85. package/examples/profiles/backup-and-recovery/invalid/backup-complete-missing-backup-id.json +55 -0
  86. package/examples/profiles/backup-and-recovery/invalid/backup-complete-missing-recovery-point.json +55 -0
  87. package/examples/profiles/backup-and-recovery/invalid/backup-create-missing-authorization.json +50 -0
  88. package/examples/profiles/backup-and-recovery/invalid/backup-delete-missing-reason.json +78 -0
  89. package/examples/profiles/backup-and-recovery/invalid/backup-expire-missing-retention-class.json +55 -0
  90. package/examples/profiles/backup-and-recovery/invalid/backup-verify-missing-verification-status.json +66 -0
  91. package/examples/profiles/backup-and-recovery/invalid/policy-update-missing-change.json +65 -0
  92. package/examples/profiles/backup-and-recovery/invalid/recovery-failover-missing-recovery-id.json +71 -0
  93. package/examples/profiles/backup-and-recovery/invalid/recovery-failover-missing-target-scope.json +71 -0
  94. package/examples/profiles/backup-and-recovery/invalid/restore-start-missing-approval.json +66 -0
  95. package/examples/profiles/backup-and-recovery/invalid/restore-start-missing-source-id.json +73 -0
  96. package/examples/profiles/backup-and-recovery/invalid/snapshot-create-missing-snapshot-id.json +57 -0
  97. package/examples/profiles/backup-and-recovery/not-applicable/backup-chunk-write.json +43 -0
  98. package/examples/profiles/backup-and-recovery/not-applicable/restore-progress.json +42 -0
  99. package/examples/profiles/backup-and-recovery/not-applicable/storage-replica-heartbeat.json +37 -0
  100. package/examples/profiles/backup-and-recovery/valid/backup-complete-failed.json +62 -0
  101. package/examples/profiles/backup-and-recovery/valid/backup-complete.json +56 -0
  102. package/examples/profiles/backup-and-recovery/valid/backup-create.json +56 -0
  103. package/examples/profiles/backup-and-recovery/valid/backup-delete.json +83 -0
  104. package/examples/profiles/backup-and-recovery/valid/backup-expire.json +56 -0
  105. package/examples/profiles/backup-and-recovery/valid/backup-verify.json +67 -0
  106. package/examples/profiles/backup-and-recovery/valid/policy-update.json +78 -0
  107. package/examples/profiles/backup-and-recovery/valid/recovery-complete.json +61 -0
  108. package/examples/profiles/backup-and-recovery/valid/recovery-failback.json +72 -0
  109. package/examples/profiles/backup-and-recovery/valid/recovery-failover.json +72 -0
  110. package/examples/profiles/backup-and-recovery/valid/recovery-start.json +61 -0
  111. package/examples/profiles/backup-and-recovery/valid/restore-complete.json +63 -0
  112. package/examples/profiles/backup-and-recovery/valid/restore-start.json +74 -0
  113. package/examples/profiles/backup-and-recovery/valid/snapshot-create.json +58 -0
  114. package/examples/profiles/backup-and-recovery/valid/snapshot-delete.json +60 -0
  115. package/examples/profiles/customer-and-account-management/README.md +127 -0
  116. package/examples/profiles/customer-and-account-management/invalid/account-close-missing-approval.json +70 -0
  117. package/examples/profiles/customer-and-account-management/invalid/account-freeze-missing-restriction-scope.json +83 -0
  118. package/examples/profiles/customer-and-account-management/invalid/account-freeze-missing-status.json +83 -0
  119. package/examples/profiles/customer-and-account-management/invalid/account-limit-missing-before.json +74 -0
  120. package/examples/profiles/customer-and-account-management/invalid/account-open-missing-owner.json +58 -0
  121. package/examples/profiles/customer-and-account-management/invalid/account-status-missing-subject.json +73 -0
  122. package/examples/profiles/customer-and-account-management/invalid/account-update-missing-override-reason.json +67 -0
  123. package/examples/profiles/customer-and-account-management/invalid/customer-close-missing-authorization.json +69 -0
  124. package/examples/profiles/customer-and-account-management/invalid/customer-create-missing-customer-type.json +62 -0
  125. package/examples/profiles/customer-and-account-management/invalid/customer-delete-missing-scope.json +70 -0
  126. package/examples/profiles/customer-and-account-management/invalid/customer-merge-missing-source.json +78 -0
  127. package/examples/profiles/customer-and-account-management/invalid/customer-update-missing-change.json +61 -0
  128. package/examples/profiles/customer-and-account-management/not-applicable/account-balance-view.json +39 -0
  129. package/examples/profiles/customer-and-account-management/not-applicable/customer-profile-view.json +38 -0
  130. package/examples/profiles/customer-and-account-management/not-applicable/customer-search.json +38 -0
  131. package/examples/profiles/customer-and-account-management/valid/account-close-approved.json +78 -0
  132. package/examples/profiles/customer-and-account-management/valid/account-freeze.json +84 -0
  133. package/examples/profiles/customer-and-account-management/valid/account-limit-increase.json +77 -0
  134. package/examples/profiles/customer-and-account-management/valid/account-open.json +59 -0
  135. package/examples/profiles/customer-and-account-management/valid/account-status-on-behalf.json +79 -0
  136. package/examples/profiles/customer-and-account-management/valid/account-update-override.json +72 -0
  137. package/examples/profiles/customer-and-account-management/valid/customer-close.json +75 -0
  138. package/examples/profiles/customer-and-account-management/valid/customer-create.json +63 -0
  139. package/examples/profiles/customer-and-account-management/valid/customer-delete.json +71 -0
  140. package/examples/profiles/customer-and-account-management/valid/customer-merge.json +79 -0
  141. package/examples/profiles/customer-and-account-management/valid/customer-restrict.json +76 -0
  142. package/examples/profiles/customer-and-account-management/valid/customer-update.json +65 -0
  143. package/examples/profiles/deployment-and-change-management/README.md +115 -0
  144. package/examples/profiles/deployment-and-change-management/invalid/cancel-missing-authorization.json +59 -0
  145. package/examples/profiles/deployment-and-change-management/invalid/cancel-missing-reason.json +61 -0
  146. package/examples/profiles/deployment-and-change-management/invalid/change-request-approve-missing-approval.json +57 -0
  147. package/examples/profiles/deployment-and-change-management/invalid/configuration-update-missing-authorization.json +81 -0
  148. package/examples/profiles/deployment-and-change-management/invalid/deploy-approved-missing-approval.json +73 -0
  149. package/examples/profiles/deployment-and-change-management/invalid/deploy-failed-missing-resulting-state.json +71 -0
  150. package/examples/profiles/deployment-and-change-management/invalid/deploy-missing-approval-required.json +67 -0
  151. package/examples/profiles/deployment-and-change-management/invalid/deploy-missing-deployment-id.json +67 -0
  152. package/examples/profiles/deployment-and-change-management/invalid/deploy-missing-environment.json +67 -0
  153. package/examples/profiles/deployment-and-change-management/invalid/deploy-missing-previous-version.json +67 -0
  154. package/examples/profiles/deployment-and-change-management/invalid/deploy-missing-version.json +67 -0
  155. package/examples/profiles/deployment-and-change-management/invalid/deploy-partial-missing-resulting-state.json +68 -0
  156. package/examples/profiles/deployment-and-change-management/invalid/secret-rotate-missing-changed-fields.json +72 -0
  157. package/examples/profiles/deployment-and-change-management/invalid/secret-rotate-missing-reason.json +68 -0
  158. package/examples/profiles/deployment-and-change-management/not-applicable/build-log-append.json +33 -0
  159. package/examples/profiles/deployment-and-change-management/not-applicable/pipeline-poll.json +33 -0
  160. package/examples/profiles/deployment-and-change-management/not-applicable/secret-access.json +39 -0
  161. package/examples/profiles/deployment-and-change-management/valid/change-request-approve.json +69 -0
  162. package/examples/profiles/deployment-and-change-management/valid/configuration-update.json +88 -0
  163. package/examples/profiles/deployment-and-change-management/valid/deploy-approved.json +85 -0
  164. package/examples/profiles/deployment-and-change-management/valid/deploy-automated.json +68 -0
  165. package/examples/profiles/deployment-and-change-management/valid/deploy-failed.json +72 -0
  166. package/examples/profiles/deployment-and-change-management/valid/deploy-partial.json +69 -0
  167. package/examples/profiles/deployment-and-change-management/valid/infrastructure-apply.json +78 -0
  168. package/examples/profiles/deployment-and-change-management/valid/release-approve.json +77 -0
  169. package/examples/profiles/deployment-and-change-management/valid/release-cancel.json +65 -0
  170. package/examples/profiles/deployment-and-change-management/valid/release-create.json +53 -0
  171. package/examples/profiles/deployment-and-change-management/valid/rollback-emergency.json +80 -0
  172. package/examples/profiles/deployment-and-change-management/valid/secret-rotate-emergency.json +73 -0
  173. package/examples/profiles/document-management/README.md +80 -0
  174. package/examples/profiles/document-management/invalid/delete-missing-reason.json +53 -0
  175. package/examples/profiles/document-management/invalid/download-missing-classification.json +46 -0
  176. package/examples/profiles/document-management/invalid/external-share-missing-expiry.json +68 -0
  177. package/examples/profiles/document-management/invalid/external-share-missing-reason.json +64 -0
  178. package/examples/profiles/document-management/invalid/legal-hold-missing-state.json +63 -0
  179. package/examples/profiles/document-management/invalid/permission-grant-missing-grantee.json +57 -0
  180. package/examples/profiles/document-management/invalid/retention-update-missing-class.json +71 -0
  181. package/examples/profiles/document-management/invalid/share-create-missing-permission.json +53 -0
  182. package/examples/profiles/document-management/invalid/share-missing-recipient-type.json +53 -0
  183. package/examples/profiles/document-management/invalid/upload-missing-authorization.json +42 -0
  184. package/examples/profiles/document-management/invalid/version-rollback-missing-previous.json +58 -0
  185. package/examples/profiles/document-management/not-applicable/file-view.json +42 -0
  186. package/examples/profiles/document-management/valid/file-delete.json +58 -0
  187. package/examples/profiles/document-management/valid/file-download.json +47 -0
  188. package/examples/profiles/document-management/valid/file-upload.json +47 -0
  189. package/examples/profiles/document-management/valid/legal-hold-apply.json +64 -0
  190. package/examples/profiles/document-management/valid/permission-grant.json +58 -0
  191. package/examples/profiles/document-management/valid/retention-update.json +72 -0
  192. package/examples/profiles/document-management/valid/share-external.json +69 -0
  193. package/examples/profiles/document-management/valid/share-internal.json +54 -0
  194. package/examples/profiles/document-management/valid/share-revoke.json +56 -0
  195. package/examples/profiles/document-management/valid/version-rollback.json +59 -0
  196. package/examples/profiles/financial-transaction-management/README.md +123 -0
  197. package/examples/profiles/financial-transaction-management/invalid/limit-update-missing-limit-type.json +101 -0
  198. package/examples/profiles/financial-transaction-management/invalid/manual-deposit-missing-change.json +85 -0
  199. package/examples/profiles/financial-transaction-management/invalid/payment-capture-missing-amount.json +69 -0
  200. package/examples/profiles/financial-transaction-management/invalid/payment-capture-missing-authorization.json +65 -0
  201. package/examples/profiles/financial-transaction-management/invalid/payout-missing-direction.json +63 -0
  202. package/examples/profiles/financial-transaction-management/invalid/reconciliation-adjust-missing-change.json +79 -0
  203. package/examples/profiles/financial-transaction-management/invalid/reconciliation-missing-identifier.json +88 -0
  204. package/examples/profiles/financial-transaction-management/invalid/refund-missing-reason.json +70 -0
  205. package/examples/profiles/financial-transaction-management/invalid/reversal-missing-original-transaction.json +84 -0
  206. package/examples/profiles/financial-transaction-management/invalid/transfer-missing-related-resources.json +66 -0
  207. package/examples/profiles/financial-transaction-management/invalid/withdrawal-missing-approval-status.json +96 -0
  208. package/examples/profiles/financial-transaction-management/invalid/withdrawal-missing-correlation.json +96 -0
  209. package/examples/profiles/financial-transaction-management/not-applicable/balance-view.json +36 -0
  210. package/examples/profiles/financial-transaction-management/not-applicable/quote-create.json +33 -0
  211. package/examples/profiles/financial-transaction-management/not-applicable/report-generate.json +36 -0
  212. package/examples/profiles/financial-transaction-management/valid/chargeback-open.json +73 -0
  213. package/examples/profiles/financial-transaction-management/valid/deposit-manual-correction.json +86 -0
  214. package/examples/profiles/financial-transaction-management/valid/limit-update.json +92 -0
  215. package/examples/profiles/financial-transaction-management/valid/payment-capture.json +70 -0
  216. package/examples/profiles/financial-transaction-management/valid/payment-reject.json +76 -0
  217. package/examples/profiles/financial-transaction-management/valid/payout-execute.json +64 -0
  218. package/examples/profiles/financial-transaction-management/valid/reconciliation-adjust.json +85 -0
  219. package/examples/profiles/financial-transaction-management/valid/refund-create.json +75 -0
  220. package/examples/profiles/financial-transaction-management/valid/reversal-execute.json +80 -0
  221. package/examples/profiles/financial-transaction-management/valid/settlement-execute.json +70 -0
  222. package/examples/profiles/financial-transaction-management/valid/transfer-execute.json +74 -0
  223. package/examples/profiles/financial-transaction-management/valid/withdrawal-execute.json +91 -0
  224. package/examples/profiles/identity-and-access-management/README.md +93 -0
  225. package/examples/profiles/identity-and-access-management/invalid/credential-rotate-missing-reason.json +47 -0
  226. package/examples/profiles/identity-and-access-management/invalid/permission-grant-missing-scope.json +54 -0
  227. package/examples/profiles/identity-and-access-management/invalid/privileged-role-without-approval.json +68 -0
  228. package/examples/profiles/identity-and-access-management/invalid/privileged-role-without-mfa.json +83 -0
  229. package/examples/profiles/identity-and-access-management/invalid/role-assign-missing-authorization.json +54 -0
  230. package/examples/profiles/identity-and-access-management/invalid/role-assign-missing-role-id.json +60 -0
  231. package/examples/profiles/identity-and-access-management/invalid/service-account-missing-owner.json +53 -0
  232. package/examples/profiles/identity-and-access-management/not-applicable/document-share.json +49 -0
  233. package/examples/profiles/identity-and-access-management/valid/credential-rotate.json +59 -0
  234. package/examples/profiles/identity-and-access-management/valid/permission-revoke.json +77 -0
  235. package/examples/profiles/identity-and-access-management/valid/role-assign-privileged.json +87 -0
  236. package/examples/profiles/identity-and-access-management/valid/role-assign-standard.json +80 -0
  237. package/examples/profiles/identity-and-access-management/valid/service-account-create.json +55 -0
  238. package/examples/profiles/identity-and-access-management/valid/user-create.json +55 -0
  239. package/examples/profiles/identity-and-access-management/valid/user-disable.json +79 -0
  240. package/examples/profiles/incident-management/README.md +125 -0
  241. package/examples/profiles/incident-management/invalid/assignment-change-missing-assignee.json +69 -0
  242. package/examples/profiles/incident-management/invalid/assignment-change-missing-change.json +59 -0
  243. package/examples/profiles/incident-management/invalid/case-close-missing-approval.json +94 -0
  244. package/examples/profiles/incident-management/invalid/case-close-missing-authorization.json +108 -0
  245. package/examples/profiles/incident-management/invalid/case-close-missing-reason.json +109 -0
  246. package/examples/profiles/incident-management/invalid/case-create-missing-status.json +67 -0
  247. package/examples/profiles/incident-management/invalid/case-reopen-missing-change.json +66 -0
  248. package/examples/profiles/incident-management/invalid/case-reopen-missing-reason.json +72 -0
  249. package/examples/profiles/incident-management/invalid/case-resolve-missing-resolution-type.json +74 -0
  250. package/examples/profiles/incident-management/invalid/corrective-action-verify-missing-method.json +81 -0
  251. package/examples/profiles/incident-management/invalid/priority-change-missing-priority.json +73 -0
  252. package/examples/profiles/incident-management/invalid/rca-approve-missing-approval.json +66 -0
  253. package/examples/profiles/incident-management/invalid/rca-create-missing-method.json +72 -0
  254. package/examples/profiles/incident-management/invalid/sla-breach-missing-target.json +49 -0
  255. package/examples/profiles/incident-management/not-applicable/case-view.json +40 -0
  256. package/examples/profiles/incident-management/not-applicable/monitoring-alert-raise.json +40 -0
  257. package/examples/profiles/incident-management/not-applicable/note-create.json +46 -0
  258. package/examples/profiles/incident-management/valid/assignment-change.json +70 -0
  259. package/examples/profiles/incident-management/valid/case-close.json +114 -0
  260. package/examples/profiles/incident-management/valid/case-create.json +68 -0
  261. package/examples/profiles/incident-management/valid/case-reopen.json +77 -0
  262. package/examples/profiles/incident-management/valid/case-resolve.json +75 -0
  263. package/examples/profiles/incident-management/valid/corrective-action-open.json +72 -0
  264. package/examples/profiles/incident-management/valid/corrective-action-verify.json +82 -0
  265. package/examples/profiles/incident-management/valid/create-short-form.json +64 -0
  266. package/examples/profiles/incident-management/valid/major-declare.json +79 -0
  267. package/examples/profiles/incident-management/valid/priority-change.json +74 -0
  268. package/examples/profiles/incident-management/valid/problem-case-close.json +73 -0
  269. package/examples/profiles/incident-management/valid/rca-approve.json +86 -0
  270. package/examples/profiles/incident-management/valid/rca-create.json +73 -0
  271. package/examples/profiles/incident-management/valid/sla-breach.json +50 -0
  272. package/examples/profiles/message-broker-management/README.md +123 -0
  273. package/examples/profiles/message-broker-management/invalid/acl-grant-missing-principal.json +78 -0
  274. package/examples/profiles/message-broker-management/invalid/configuration-update-missing-change.json +58 -0
  275. package/examples/profiles/message-broker-management/invalid/message-replay-missing-scope.json +76 -0
  276. package/examples/profiles/message-broker-management/invalid/offset-reset-missing-target.json +96 -0
  277. package/examples/profiles/message-broker-management/invalid/queue-purge-missing-destructive-flag.json +79 -0
  278. package/examples/profiles/message-broker-management/invalid/queue-purge-missing-reason.json +77 -0
  279. package/examples/profiles/message-broker-management/invalid/quota-update-missing-dimension.json +72 -0
  280. package/examples/profiles/message-broker-management/invalid/topic-create-missing-authorization.json +61 -0
  281. package/examples/profiles/message-broker-management/invalid/topic-create-missing-classification.json +66 -0
  282. package/examples/profiles/message-broker-management/invalid/topic-create-missing-cluster.json +66 -0
  283. package/examples/profiles/message-broker-management/invalid/topic-delete-denied-missing-error-type.json +68 -0
  284. package/examples/profiles/message-broker-management/invalid/topic-delete-missing-approval.json +65 -0
  285. package/examples/profiles/message-broker-management/not-applicable/consumer-group-rebalance.json +40 -0
  286. package/examples/profiles/message-broker-management/not-applicable/message-consume.json +41 -0
  287. package/examples/profiles/message-broker-management/not-applicable/message-publish.json +41 -0
  288. package/examples/profiles/message-broker-management/valid/acl-grant.json +79 -0
  289. package/examples/profiles/message-broker-management/valid/cluster-upgrade.json +77 -0
  290. package/examples/profiles/message-broker-management/valid/configuration-update.json +65 -0
  291. package/examples/profiles/message-broker-management/valid/consumer-group-delete.json +64 -0
  292. package/examples/profiles/message-broker-management/valid/message-replay.json +77 -0
  293. package/examples/profiles/message-broker-management/valid/offset-reset.json +97 -0
  294. package/examples/profiles/message-broker-management/valid/queue-purge.json +82 -0
  295. package/examples/profiles/message-broker-management/valid/quota-update.json +73 -0
  296. package/examples/profiles/message-broker-management/valid/topic-create.json +67 -0
  297. package/examples/profiles/message-broker-management/valid/topic-delete-denied.json +69 -0
  298. package/examples/profiles/message-broker-management/valid/topic-delete.json +77 -0
  299. package/examples/profiles/message-broker-management/valid/topic-retention-reduce.json +77 -0
  300. package/examples/profiles/secrets-and-key-management/README.md +115 -0
  301. package/examples/profiles/secrets-and-key-management/invalid/certificate-issue-missing-expiry.json +54 -0
  302. package/examples/profiles/secrets-and-key-management/invalid/emergency-reveal-missing-approval.json +61 -0
  303. package/examples/profiles/secrets-and-key-management/invalid/key-destroy-missing-approval.json +56 -0
  304. package/examples/profiles/secrets-and-key-management/invalid/key-generate-missing-owner.json +56 -0
  305. package/examples/profiles/secrets-and-key-management/invalid/key-import-missing-reason.json +59 -0
  306. package/examples/profiles/secrets-and-key-management/invalid/policy-update-missing-change.json +61 -0
  307. package/examples/profiles/secrets-and-key-management/invalid/secret-create-missing-authorization.json +53 -0
  308. package/examples/profiles/secrets-and-key-management/invalid/secret-export-missing-destination.json +74 -0
  309. package/examples/profiles/secrets-and-key-management/invalid/secret-reveal-missing-reason.json +65 -0
  310. package/examples/profiles/secrets-and-key-management/invalid/secret-revoke-missing-reason.json +52 -0
  311. package/examples/profiles/secrets-and-key-management/invalid/secret-rotate-missing-change.json +48 -0
  312. package/examples/profiles/secrets-and-key-management/invalid/secret-rotate-missing-type.json +54 -0
  313. package/examples/profiles/secrets-and-key-management/not-applicable/key-decrypt.json +27 -0
  314. package/examples/profiles/secrets-and-key-management/not-applicable/secret-cache-refresh.json +27 -0
  315. package/examples/profiles/secrets-and-key-management/not-applicable/secret-retrieve.json +27 -0
  316. package/examples/profiles/secrets-and-key-management/valid/certificate-issue.json +55 -0
  317. package/examples/profiles/secrets-and-key-management/valid/key-destroy.json +64 -0
  318. package/examples/profiles/secrets-and-key-management/valid/key-export.json +73 -0
  319. package/examples/profiles/secrets-and-key-management/valid/key-generate.json +57 -0
  320. package/examples/profiles/secrets-and-key-management/valid/key-import.json +64 -0
  321. package/examples/profiles/secrets-and-key-management/valid/secret-create.json +59 -0
  322. package/examples/profiles/secrets-and-key-management/valid/secret-export.json +75 -0
  323. package/examples/profiles/secrets-and-key-management/valid/secret-policy-update.json +68 -0
  324. package/examples/profiles/secrets-and-key-management/valid/secret-reveal-emergency.json +68 -0
  325. package/examples/profiles/secrets-and-key-management/valid/secret-reveal.json +70 -0
  326. package/examples/profiles/secrets-and-key-management/valid/secret-revoke.json +57 -0
  327. package/examples/profiles/secrets-and-key-management/valid/secret-rotate.json +55 -0
  328. package/examples/valid/access-request-approval.json +47 -0
  329. package/examples/valid/document-external-share.json +92 -0
  330. package/examples/valid/incident-case-close.json +114 -0
  331. package/examples/valid/kafka-consumer-offset-reset.json +105 -0
  332. package/examples/valid/minimal-event.json +22 -0
  333. package/examples/valid/nightly-reconciliation-job.json +33 -0
  334. package/examples/valid/order-api-publish.json +34 -0
  335. package/examples/valid/order-consumer-new-trace.json +36 -0
  336. package/examples/valid/privileged-configuration-change.json +109 -0
  337. package/examples/valid/service-account-data-export.json +83 -0
  338. package/examples/valid/user-role-assignment.json +92 -0
  339. package/package.json +6 -2
@@ -0,0 +1,77 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "id": "018f4a05-1111-7222-8333-000000000005",
4
+ "time": "2026-06-01T11:00:00.000Z",
5
+ "event": {
6
+ "name": "identity.permission.revoke",
7
+ "category": "identity",
8
+ "type": "revoke",
9
+ "outcome": "success",
10
+ "severity": "medium",
11
+ "summary": "Direct export permission withdrawn after an access review."
12
+ },
13
+ "actor": {
14
+ "type": "admin",
15
+ "id": "admin-4821",
16
+ "roles": ["identity-administrator"]
17
+ },
18
+ "application": {
19
+ "name": "identity-service",
20
+ "environment": "production",
21
+ "version": "3.4.1"
22
+ },
23
+ "resource": {
24
+ "type": "user",
25
+ "id": "user-5120",
26
+ "tenantId": "tenant-42"
27
+ },
28
+ "relatedResources": [
29
+ {
30
+ "type": "permission",
31
+ "id": "permission-report-export"
32
+ }
33
+ ],
34
+ "authorization": {
35
+ "decision": "allow",
36
+ "engine": "policy-service",
37
+ "policy": "identity-permission-change",
38
+ "policyVersion": "7"
39
+ },
40
+ "approval": {
41
+ "status": "approved",
42
+ "workflowId": "workflow-access-change",
43
+ "requestId": "approval-request-5512",
44
+ "requiredApprovals": 1,
45
+ "receivedApprovals": 1,
46
+ "approvers": [
47
+ {
48
+ "type": "user",
49
+ "id": "user-2210",
50
+ "roles": ["access-approver"]
51
+ }
52
+ ],
53
+ "approvedAt": "2026-06-01T09:59:47Z"
54
+ },
55
+ "reason": {
56
+ "code": "access-review",
57
+ "text": "Permission no longer required by the reviewed role definition.",
58
+ "reference": "access-review-2026-q2"
59
+ },
60
+ "request": {
61
+ "requestId": "request-a5",
62
+ "correlationId": "correlation-a5",
63
+ "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
64
+ "spanId": "00f067aa0ba902b7",
65
+ "protocol": "https",
66
+ "method": "POST",
67
+ "route": "/identity/{principalId}/access"
68
+ },
69
+ "controlCategories": ["privileged-access", "separation-of-duties"],
70
+ "metadata": {
71
+ "permission": {
72
+ "id": "permission-report-export",
73
+ "scope": "tenant",
74
+ "privileged": false
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "id": "018f4a04-1111-7222-8333-000000000004",
4
+ "time": "2026-06-01T10:00:00.000Z",
5
+ "event": {
6
+ "name": "identity.role.assign",
7
+ "category": "identity",
8
+ "type": "update",
9
+ "outcome": "success",
10
+ "severity": "critical",
11
+ "summary": "Time-bound platform administrator role assigned for a change window."
12
+ },
13
+ "actor": {
14
+ "type": "admin",
15
+ "id": "admin-4821",
16
+ "roles": ["identity-administrator"]
17
+ },
18
+ "application": {
19
+ "name": "identity-service",
20
+ "environment": "production",
21
+ "version": "3.4.1"
22
+ },
23
+ "resource": {
24
+ "type": "user",
25
+ "id": "admin-0091",
26
+ "tenantId": "tenant-42"
27
+ },
28
+ "relatedResources": [
29
+ {
30
+ "type": "role",
31
+ "id": "role-platform-administrator",
32
+ "name": "platform-administrator"
33
+ }
34
+ ],
35
+ "authentication": {
36
+ "method": "oidc",
37
+ "provider": "corporate-idp",
38
+ "mfa": true,
39
+ "assuranceLevel": "high",
40
+ "authenticatedAt": "2026-06-01T09:58:02Z"
41
+ },
42
+ "authorization": {
43
+ "decision": "allow",
44
+ "engine": "policy-service",
45
+ "policy": "just-in-time-privileged-access",
46
+ "policyVersion": "7"
47
+ },
48
+ "approval": {
49
+ "status": "approved",
50
+ "workflowId": "workflow-access-change",
51
+ "requestId": "approval-request-5512",
52
+ "requiredApprovals": 2,
53
+ "receivedApprovals": 2,
54
+ "approvers": [
55
+ {
56
+ "type": "user",
57
+ "id": "user-2210",
58
+ "roles": ["access-approver"]
59
+ }
60
+ ],
61
+ "approvedAt": "2026-06-01T09:59:47Z"
62
+ },
63
+ "reason": {
64
+ "code": "scheduled-maintenance",
65
+ "text": "Approved change window for the authentication configuration update.",
66
+ "reference": "change-10241"
67
+ },
68
+ "request": {
69
+ "requestId": "request-a4",
70
+ "correlationId": "correlation-a4",
71
+ "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
72
+ "spanId": "00f067aa0ba902b7",
73
+ "protocol": "https",
74
+ "method": "POST",
75
+ "route": "/identity/{principalId}/access"
76
+ },
77
+ "controlCategories": ["privileged-access", "change-approval", "separation-of-duties"],
78
+ "metadata": {
79
+ "role": {
80
+ "id": "role-platform-administrator",
81
+ "privileged": true,
82
+ "scope": "tenant"
83
+ },
84
+ "effectiveFrom": "2026-06-01T10:00:00Z",
85
+ "expiresAt": "2026-06-01T12:00:00Z"
86
+ }
87
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "id": "018f4a03-1111-7222-8333-000000000003",
4
+ "time": "2026-06-01T09:00:00.000Z",
5
+ "event": {
6
+ "name": "identity.role.assign",
7
+ "category": "identity",
8
+ "type": "update",
9
+ "outcome": "success",
10
+ "severity": "medium",
11
+ "summary": "Support role assigned for the duty rotation."
12
+ },
13
+ "actor": {
14
+ "type": "admin",
15
+ "id": "admin-4821",
16
+ "roles": ["identity-administrator"]
17
+ },
18
+ "application": {
19
+ "name": "identity-service",
20
+ "environment": "production",
21
+ "version": "3.4.1"
22
+ },
23
+ "resource": {
24
+ "type": "user",
25
+ "id": "user-7391",
26
+ "tenantId": "tenant-42"
27
+ },
28
+ "relatedResources": [
29
+ {
30
+ "type": "role",
31
+ "id": "role-support-agent",
32
+ "name": "support-agent"
33
+ }
34
+ ],
35
+ "authorization": {
36
+ "decision": "allow",
37
+ "engine": "policy-service",
38
+ "policy": "identity-role-assignment",
39
+ "policyVersion": "7"
40
+ },
41
+ "approval": {
42
+ "status": "approved",
43
+ "workflowId": "workflow-access-change",
44
+ "requestId": "approval-request-5512",
45
+ "requiredApprovals": 1,
46
+ "receivedApprovals": 1,
47
+ "approvers": [
48
+ {
49
+ "type": "user",
50
+ "id": "user-2210",
51
+ "roles": ["access-approver"]
52
+ }
53
+ ],
54
+ "approvedAt": "2026-06-01T09:59:47Z"
55
+ },
56
+ "reason": {
57
+ "code": "access-request",
58
+ "text": "Approved access request for the support duty rotation.",
59
+ "reference": "access-request-8841"
60
+ },
61
+ "request": {
62
+ "requestId": "request-a3",
63
+ "correlationId": "correlation-a3",
64
+ "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
65
+ "spanId": "00f067aa0ba902b7",
66
+ "protocol": "https",
67
+ "method": "POST",
68
+ "route": "/identity/{principalId}/access"
69
+ },
70
+ "controlCategories": ["privileged-access", "change-approval"],
71
+ "metadata": {
72
+ "role": {
73
+ "id": "role-support-agent",
74
+ "privileged": false,
75
+ "scope": "tenant"
76
+ },
77
+ "effectiveFrom": "2026-06-02T00:00:00Z",
78
+ "expiresAt": "2026-09-02T00:00:00Z"
79
+ }
80
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "id": "018f4a06-1111-7222-8333-000000000006",
4
+ "time": "2026-06-01T12:00:00.000Z",
5
+ "event": {
6
+ "name": "identity.service-account.create",
7
+ "category": "identity",
8
+ "type": "create",
9
+ "outcome": "success",
10
+ "severity": "high",
11
+ "summary": "Service account created for the reporting export worker."
12
+ },
13
+ "actor": {
14
+ "type": "admin",
15
+ "id": "admin-4821",
16
+ "roles": ["identity-administrator"]
17
+ },
18
+ "application": {
19
+ "name": "identity-service",
20
+ "environment": "production",
21
+ "version": "3.4.1"
22
+ },
23
+ "resource": {
24
+ "type": "service-account",
25
+ "id": "service-account-reporting-worker"
26
+ },
27
+ "authorization": {
28
+ "decision": "allow",
29
+ "engine": "policy-service",
30
+ "policy": "identity-service-account-lifecycle",
31
+ "policyVersion": "7"
32
+ },
33
+ "reason": {
34
+ "code": "platform-change",
35
+ "text": "Scheduled export worker requires its own workload identity.",
36
+ "reference": "change-10118"
37
+ },
38
+ "request": {
39
+ "requestId": "request-a6",
40
+ "correlationId": "correlation-a6",
41
+ "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
42
+ "spanId": "00f067aa0ba902b7",
43
+ "protocol": "https",
44
+ "method": "POST",
45
+ "route": "/identity/{principalId}/access"
46
+ },
47
+ "controlCategories": ["privileged-access"],
48
+ "metadata": {
49
+ "serviceAccount": {
50
+ "purpose": "Generates scheduled customer activity exports.",
51
+ "ownerId": "user-1180",
52
+ "expiresAt": "2027-06-01T00:00:00Z"
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "id": "018f4a01-1111-7222-8333-000000000001",
4
+ "time": "2026-06-01T08:00:00.000Z",
5
+ "event": {
6
+ "name": "identity.user.create",
7
+ "category": "identity",
8
+ "type": "create",
9
+ "outcome": "success",
10
+ "severity": "medium",
11
+ "summary": "Account created for a new joiner."
12
+ },
13
+ "actor": {
14
+ "type": "admin",
15
+ "id": "admin-4821",
16
+ "roles": ["identity-administrator"]
17
+ },
18
+ "application": {
19
+ "name": "identity-service",
20
+ "environment": "production",
21
+ "version": "3.4.1"
22
+ },
23
+ "resource": {
24
+ "type": "user",
25
+ "id": "user-9001",
26
+ "tenantId": "tenant-42"
27
+ },
28
+ "authorization": {
29
+ "decision": "allow",
30
+ "engine": "policy-service",
31
+ "policy": "identity-user-lifecycle",
32
+ "policyVersion": "7"
33
+ },
34
+ "reason": {
35
+ "code": "onboarding",
36
+ "text": "Scheduled onboarding for a confirmed start date.",
37
+ "reference": "onboarding-7741"
38
+ },
39
+ "request": {
40
+ "requestId": "request-a1",
41
+ "correlationId": "correlation-a1",
42
+ "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
43
+ "spanId": "00f067aa0ba902b7",
44
+ "protocol": "https",
45
+ "method": "POST",
46
+ "route": "/identity/{principalId}/access"
47
+ },
48
+ "controlCategories": ["privileged-access"],
49
+ "metadata": {
50
+ "user": {
51
+ "type": "employee",
52
+ "departmentId": "department-support"
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "id": "018f4a02-1111-7222-8333-000000000002",
4
+ "time": "2026-06-01T08:15:00.000Z",
5
+ "event": {
6
+ "name": "identity.user.disable",
7
+ "category": "identity",
8
+ "type": "update",
9
+ "outcome": "success",
10
+ "severity": "high",
11
+ "summary": "Account disabled on the last working day."
12
+ },
13
+ "actor": {
14
+ "type": "admin",
15
+ "id": "admin-4821",
16
+ "roles": ["identity-administrator"]
17
+ },
18
+ "application": {
19
+ "name": "identity-service",
20
+ "environment": "production",
21
+ "version": "3.4.1"
22
+ },
23
+ "resource": {
24
+ "type": "user",
25
+ "id": "user-7391",
26
+ "tenantId": "tenant-42"
27
+ },
28
+ "authorization": {
29
+ "decision": "allow",
30
+ "engine": "policy-service",
31
+ "policy": "identity-user-lifecycle",
32
+ "policyVersion": "7"
33
+ },
34
+ "approval": {
35
+ "status": "approved",
36
+ "workflowId": "workflow-access-change",
37
+ "requestId": "approval-request-5512",
38
+ "requiredApprovals": 1,
39
+ "receivedApprovals": 1,
40
+ "approvers": [
41
+ {
42
+ "type": "user",
43
+ "id": "user-2210",
44
+ "roles": ["access-approver"]
45
+ }
46
+ ],
47
+ "approvedAt": "2026-06-01T09:59:47Z"
48
+ },
49
+ "reason": {
50
+ "code": "offboarding",
51
+ "text": "Employment ended and access was withdrawn on the agreed date.",
52
+ "reference": "offboarding-3312"
53
+ },
54
+ "request": {
55
+ "requestId": "request-a2",
56
+ "correlationId": "correlation-a2",
57
+ "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
58
+ "spanId": "00f067aa0ba902b7",
59
+ "protocol": "https",
60
+ "method": "POST",
61
+ "route": "/identity/{principalId}/access"
62
+ },
63
+ "change": {
64
+ "type": "update",
65
+ "changedFields": ["status"],
66
+ "before": {
67
+ "status": "active"
68
+ },
69
+ "after": {
70
+ "status": "disabled"
71
+ }
72
+ },
73
+ "controlCategories": ["privileged-access"],
74
+ "metadata": {
75
+ "user": {
76
+ "type": "employee"
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,125 @@
1
+ # Incident management profile fixtures
2
+
3
+ **Status: Informative.** These fixtures illustrate and regression-test the
4
+ [incident-management profile](../../../profiles/incident-management/). The rules themselves are in
5
+ [profile.json](../../../profiles/incident-management/profile.json).
6
+
7
+ ```bash
8
+ auditmodel check-profile examples/profiles/incident-management/valid --profile incident-management
9
+ ```
10
+
11
+ Every fixture here — valid, invalid and not-applicable alike — is a **core-conforming** event. The
12
+ ones under `invalid/` fail the profile, not the core schema. That separation is the point: a profile
13
+ adds requirements to events the core already accepts.
14
+
15
+ Read in order, the valid fixtures tell one story: a checkout latency incident raised from a
16
+ monitoring signal, escalated to major, reassigned, resolved with a workaround, analysed, remediated,
17
+ closed under approval, and then reopened when the problem came back. They share one
18
+ `request.correlationId`, which is what makes them assemble into that story rather than sit as thirteen
19
+ unrelated records.
20
+
21
+ ## The guarantee these fixtures carry
22
+
23
+ Each file under `valid/` must satisfy all three commands, and a test enforces it:
24
+
25
+ ```bash
26
+ auditmodel validate examples/profiles/incident-management/valid
27
+ auditmodel lint-privacy examples/profiles/incident-management/valid
28
+ auditmodel check-profile examples/profiles/incident-management/valid --profile incident-management
29
+ ```
30
+
31
+ A profile that accepted an event the core rejects would break the core invariant. A profile that
32
+ accepted an event carrying a credential would be worse than no profile. The fixtures under
33
+ `invalid/` and `not-applicable/` are held to the same core and privacy standards; only the profile
34
+ result differs.
35
+
36
+ ## Valid fixtures
37
+
38
+ | File | Event | Demonstrates |
39
+ | ------------------------------- | ---------------------------- | ------------------------------------------------------------------------- |
40
+ | `case-create.json` | `incident.case.create` | Raising a case with priority, impact, urgency and a detection time |
41
+ | `priority-change.json` | `incident.priority.change` | Reprioritisation recorded as a transition with a justification |
42
+ | `assignment-change.json` | `incident.assignment.change` | The newly accountable principal named in `subject`, not `actor` |
43
+ | `major-declare.json` | `incident.major.declare` | Escalation to major: transition, justification and the priority in force |
44
+ | `case-resolve.json` | `incident.case.resolve` | A workaround, distinguished from a permanent fix by `resolutionType` |
45
+ | `case-close.json` | `incident.case.close` | Closure the producer declared as needing approval, with the decision |
46
+ | `case-reopen.json` | `incident.case.reopen` | A reopen as a new transition, on the original correlation identifier |
47
+ | `problem-case-close.json` | `problem.case.close` | A closure declared as **not** needing approval, so the condition is quiet |
48
+ | `rca-create.json` | `incident.rca.create` | An analysis naming its method and referencing the document |
49
+ | `rca-approve.json` | `incident.rca.approve` | An event that is itself an approval, recording the decision |
50
+ | `corrective-action-open.json` | `corrective-action.open` | Remediation opened against a named owner |
51
+ | `corrective-action-verify.json` | `corrective-action.verify` | Verification recording **how** the fix was demonstrated |
52
+ | `sla-breach.json` | `incident.sla.breach` | A system observation, with no `/authorization` demanded of it |
53
+
54
+ All thirteen conform with **no warnings**: every recommendation the profile makes is also satisfied.
55
+ That is a property of this fixture set, not a requirement — a warning never fails conformance.
56
+
57
+ Two fixtures are worth reading for what they leave out. `sla-breach.json` carries no
58
+ `/authorization`, because a missed commitment is detected by a monitor rather than decided by a
59
+ person, and `INC-CORE-001` deliberately excludes it. `problem-case-close.json` carries no
60
+ `/approval`, because it records `approvalRequired: false` — the flag is stated rather than omitted,
61
+ so the trail distinguishes "approval was not required" from "nobody said".
62
+
63
+ ## Invalid fixtures
64
+
65
+ Each removes exactly one profile-required value from a valid fixture, so it fails for one documented
66
+ reason. A test asserts both the rule and the pointer, and that **exactly one** error is produced.
67
+
68
+ | File | Derived from | Violates | At |
69
+ | ---------------------------------------------- | ------------------------------- | ------------------ | -------------------------------------------------------- |
70
+ | `case-close-missing-authorization.json` | `case-close.json` | `INC-CORE-001` | `/authorization` |
71
+ | `case-create-missing-status.json` | `case-create.json` | `INC-CORE-001` | `/metadata/incident/status` |
72
+ | `assignment-change-missing-change.json` | `assignment-change.json` | `INC-STATE-001` | `/change` |
73
+ | `case-close-missing-reason.json` | `case-close.json` | `INC-STATE-002` | `/reason` |
74
+ | `priority-change-missing-priority.json` | `priority-change.json` | `INC-PRIORITY-001` | `/metadata/incident/priority` |
75
+ | `assignment-change-missing-assignee.json` | `assignment-change.json` | `INC-ASSIGN-001` | `/subject` |
76
+ | `case-resolve-missing-resolution-type.json` | `case-resolve.json` | `INC-RESOLVE-001` | `/metadata/incident/resolutionType` |
77
+ | `case-close-missing-approval.json` | `case-close.json` | `INC-CLOSE-001` | `/approval/status` |
78
+ | `case-reopen-missing-change.json` | `case-reopen.json` | `INC-REOPEN-001` | `/change` |
79
+ | `case-reopen-missing-reason.json` | `case-reopen.json` | `INC-REOPEN-001` | `/reason` |
80
+ | `rca-create-missing-method.json` | `rca-create.json` | `INC-RCA-001` | `/metadata/incident/rca/method` |
81
+ | `rca-approve-missing-approval.json` | `rca-approve.json` | `INC-RCA-002` | `/approval/status` |
82
+ | `corrective-action-verify-missing-method.json` | `corrective-action-verify.json` | `INC-CAPA-001` | `/metadata/incident/correctiveAction/verificationMethod` |
83
+ | `sla-breach-missing-target.json` | `sla-breach.json` | `INC-SLA-001` | `/metadata/incident/sla/target` |
84
+
85
+ There is one invalid fixture for **every requirement of every enforceable rule**, which is why
86
+ `INC-CORE-001` and `INC-REOPEN-001` have two each: each of them requires two different things, and a
87
+ fixture that removed only one of them would leave the other requirement untested. A test derives that
88
+ list from `profile.json` and fails if a requirement is added without a fixture that holds it in place.
89
+ The three advisory rules — `INC-CORE-002`, `INC-CREATE-001` and `INC-EVIDENCE-001` — have no invalid
90
+ fixture by construction: a recommendation produces a warning and can never fail.
91
+
92
+ `case-close-missing-approval.json` also emits two warnings, for the recommended `/approval/approvers`
93
+ and `/approval/approvedAt` that vanished with the object. Warnings are not errors, and the fixture
94
+ still fails for exactly one reason.
95
+
96
+ ## Not-applicable fixtures
97
+
98
+ | File | Event | Why it is out of scope |
99
+ | ----------------------------- | ------------------------ | ----------------------------------------------------------------------------------------- |
100
+ | `monitoring-alert-raise.json` | `monitoring.alert.raise` | A threshold alert that cleared itself in 45 seconds and never became a managed case |
101
+ | `note-create.json` | `incident.note.create` | A working note appended to an incident timeline — high volume, not a lifecycle transition |
102
+ | `case-view.json` | `incident.case.view` | Reading a closed case in a console; a data-access event, not a change to the case |
103
+
104
+ `check-profile` reports each as **not applicable**, with exit code 3. Not applicable is not
105
+ conformance: the tool says the profile is silent about the event, never that the profile is satisfied.
106
+
107
+ They exist to hold the exclusions in place. If a future edit widened a selector to a bare `incident.`
108
+ or `incident.case.` prefix, these fixtures would start conforming instead of being skipped, and the
109
+ test would fail — which is the point, because that edit would put the profile's heaviest requirements
110
+ on every alert, every note and every record view in a service management system.
111
+
112
+ `case-view.json` carries `/metadata/incident/status` even though nothing asks it to. That is
113
+ deliberate: an event is out of scope because of its **name**, not because it happens to lack the
114
+ fields the profile would have wanted.
115
+
116
+ ## Vendor neutrality
117
+
118
+ No fixture names a real product, company, person, jurisdiction or regulation. Priority values,
119
+ resolution types, verification methods, policy names and commitment names are illustrative tokens,
120
+ not any organization's scheme, and the profile closes none of those vocabularies.
121
+
122
+ Identifiers are opaque and lower-case (`incident-2026-0418`, `user-5140`, `service-checkout`). No
123
+ fixture contains a credential, a token, a personal email address, a real name or free text describing
124
+ an individual — the profile requires no free-text field, and these fixtures are checked by
125
+ `auditmodel lint-privacy` in CI to keep it that way.
@@ -0,0 +1,69 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "id": "018f1c1a-0003-7a2b-9c3d-4e5f60718303",
4
+ "time": "2026-03-14T09:48:19.220Z",
5
+ "event": {
6
+ "name": "incident.assignment.change",
7
+ "category": "workflow",
8
+ "type": "update",
9
+ "outcome": "success",
10
+ "severity": "low",
11
+ "summary": "Incident reassigned from the service desk to the platform team."
12
+ },
13
+ "actor": {
14
+ "type": "user",
15
+ "id": "user-3301",
16
+ "roles": ["incident-manager"],
17
+ "tenantId": "tenant-7"
18
+ },
19
+ "resource": {
20
+ "type": "incident",
21
+ "id": "incident-2026-0418",
22
+ "name": "checkout-latency-degradation",
23
+ "classification": "internal",
24
+ "tenantId": "tenant-7"
25
+ },
26
+ "relatedResources": [
27
+ {
28
+ "type": "service",
29
+ "id": "service-checkout"
30
+ }
31
+ ],
32
+ "application": {
33
+ "name": "incident-service",
34
+ "environment": "production",
35
+ "version": "5.2.0"
36
+ },
37
+ "authorization": {
38
+ "decision": "allow",
39
+ "policy": "incident-handling",
40
+ "permissions": ["incident.assignment.change"]
41
+ },
42
+ "request": {
43
+ "requestId": "request-4493",
44
+ "correlationId": "correlation-incident-2026-0418"
45
+ },
46
+ "change": {
47
+ "type": "update",
48
+ "changedFields": ["assignedTeam", "assignedTo"],
49
+ "before": {
50
+ "assignedTeam": "team-service-desk"
51
+ },
52
+ "after": {
53
+ "assignedTeam": "team-platform"
54
+ },
55
+ "incidentId": "incident-2026-0418"
56
+ },
57
+ "reason": {
58
+ "code": "specialist-required",
59
+ "text": "Diagnosis moved to the team that owns the checkout connection pool."
60
+ },
61
+ "controlCategories": ["incident-traceability"],
62
+ "metadata": {
63
+ "incident": {
64
+ "status": "in-progress",
65
+ "priority": "p1",
66
+ "assignedTeam": "team-platform"
67
+ }
68
+ }
69
+ }