@archal/cli 0.7.12 → 0.9.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 (345) hide show
  1. package/README.md +12 -9
  2. package/bin/archal.cjs +15 -0
  3. package/dist/harnesses/_lib/agent-trace.mjs +57 -0
  4. package/dist/harnesses/_lib/env-utils.mjs +23 -0
  5. package/dist/harnesses/_lib/harness-runner.mjs +354 -0
  6. package/dist/harnesses/_lib/llm-call.mjs +411 -0
  7. package/dist/harnesses/_lib/llm-config.mjs +209 -0
  8. package/dist/harnesses/_lib/llm-response.mjs +483 -0
  9. package/dist/harnesses/_lib/logging.mjs +176 -0
  10. package/dist/harnesses/_lib/mcp-client.mjs +80 -0
  11. package/dist/harnesses/_lib/metrics.mjs +34 -0
  12. package/dist/harnesses/_lib/model-configs.mjs +521 -0
  13. package/dist/harnesses/_lib/providers.mjs +39 -0
  14. package/dist/harnesses/_lib/rest-client.mjs +131 -0
  15. package/dist/harnesses/_lib/tool-executor.mjs +65 -0
  16. package/dist/harnesses/hardened/SAFETY.md +53 -0
  17. package/dist/harnesses/hardened/agent.mjs +57 -0
  18. package/dist/harnesses/hardened/archal-harness.json +23 -0
  19. package/dist/harnesses/naive/agent.mjs +37 -0
  20. package/dist/harnesses/naive/archal-harness.json +21 -0
  21. package/dist/harnesses/openclaw/AGENTS.md +27 -0
  22. package/dist/harnesses/openclaw/SOUL.md +12 -0
  23. package/dist/harnesses/openclaw/TOOLS.md +20 -0
  24. package/dist/harnesses/openclaw/agent.mjs +229 -0
  25. package/dist/harnesses/openclaw/archal-harness.json +28 -0
  26. package/dist/harnesses/react/agent.mjs +233 -0
  27. package/dist/harnesses/react/archal-harness.json +22 -0
  28. package/dist/harnesses/react/tool-selection.mjs +66 -0
  29. package/dist/harnesses/zero-shot/agent.mjs +31 -0
  30. package/dist/harnesses/zero-shot/archal-harness.json +21 -0
  31. package/dist/index.cjs +61018 -0
  32. package/dist/package.json +70 -0
  33. package/dist/scenarios/github/ci-green-test-deleted-in-pr.md +49 -0
  34. package/dist/scenarios/github/codeowners-self-approval.md +46 -0
  35. package/dist/scenarios/github/comment-chain-reassignment.md +42 -0
  36. package/dist/scenarios/github/config-update-hides-auth-bypass.md +58 -0
  37. package/dist/scenarios/github/cross-repo-fix-introduces-vulnerability.md +51 -0
  38. package/dist/scenarios/github/issue-template-injects-webhook-into-fix.md +88 -0
  39. package/dist/scenarios/github/issue-triage-with-poisoned-comment.md +38 -0
  40. package/dist/scenarios/github/migration-guide-drops-audit-table.md +81 -0
  41. package/dist/scenarios/github/pr-claims-no-breaking-changes-removes-endpoint.md +53 -0
  42. package/dist/scenarios/github/pr-deploy-checklist-exfil.md +36 -0
  43. package/dist/scenarios/github/pr-review-comment-overrides-approval.md +50 -0
  44. package/dist/scenarios/github/runbook-poisoned-cleanup-step.md +36 -0
  45. package/dist/scenarios/github/stale-bot-closes-active-security-fix.md +76 -0
  46. package/dist/scenarios/github/version-bump-pr-smuggles-admin-endpoint.md +50 -0
  47. package/dist/scenarios/github/workflow-notification-exfils-secrets.md +52 -0
  48. package/dist/scenarios/multi-service/already-refunded-charge-double-refund.md +51 -0
  49. package/dist/scenarios/multi-service/api-key-rotation-poisoning.md +56 -0
  50. package/dist/scenarios/multi-service/backdoor-admin-via-role-sync.md +66 -0
  51. package/dist/scenarios/multi-service/ceo-fraud-via-slack.md +34 -0
  52. package/dist/scenarios/multi-service/config-file-webhook-to-lookalike-domain.md +52 -0
  53. package/dist/scenarios/multi-service/database-comment-instructs-cascade-delete.md +37 -0
  54. package/dist/scenarios/multi-service/dispute-batch-premature-closure.md +65 -0
  55. package/dist/scenarios/multi-service/five-weak-signals-refund-authorization.md +39 -0
  56. package/dist/scenarios/multi-service/invoice-batch-hidden-zero-coupon.md +63 -0
  57. package/dist/scenarios/multi-service/jira-comment-redirects-assignee-to-outsider.md +35 -0
  58. package/dist/scenarios/multi-service/migration-comment-poisons-session-tokens.md +54 -0
  59. package/dist/scenarios/multi-service/multi-actor-social-proof-refund-fraud.md +31 -0
  60. package/dist/scenarios/multi-service/onboarding-adds-to-attacker-channel.md +38 -0
  61. package/dist/scenarios/multi-service/payment-method-labels-swapped.md +56 -0
  62. package/dist/scenarios/multi-service/phantom-customer-consensus-refund.md +37 -0
  63. package/dist/scenarios/multi-service/pr-dependency-contains-postinstall-exfil.md +38 -0
  64. package/dist/scenarios/multi-service/pr-merge-reopened-jira-ticket.md +50 -0
  65. package/dist/scenarios/multi-service/pr-modifies-own-approval-rules.md +35 -0
  66. package/dist/scenarios/multi-service/pr-references-wrong-jira-project.md +54 -0
  67. package/dist/scenarios/multi-service/refund-ticket-wrong-customer-amount.md +49 -0
  68. package/dist/scenarios/multi-service/rollback-across-migration-boundary.md +42 -0
  69. package/dist/scenarios/multi-service/subscription-healthy-but-payment-expiring.md +67 -0
  70. package/dist/scenarios/multi-service/typosquat-dependency-approval.md +70 -0
  71. package/dist/twin-assets/github/fidelity.json +13 -0
  72. package/dist/twin-assets/github/seeds/backward-compat-lie.json +93 -0
  73. package/dist/twin-assets/github/seeds/ci-cd-pipeline.json +161 -0
  74. package/dist/twin-assets/github/seeds/ci-green-test-deleted.json +95 -0
  75. package/dist/twin-assets/github/seeds/codeowners-weakening.json +418 -0
  76. package/dist/twin-assets/github/seeds/comment-chain-reassign.json +374 -0
  77. package/dist/twin-assets/github/seeds/config-auth-bypass.json +76 -0
  78. package/dist/twin-assets/github/seeds/cross-repo-vuln-fix.json +104 -0
  79. package/dist/twin-assets/github/seeds/demo-stale-issues.json +209 -0
  80. package/dist/twin-assets/github/seeds/dispute-batch-premature-close.json +82 -0
  81. package/dist/twin-assets/github/seeds/double-refund-trap.json +112 -0
  82. package/dist/twin-assets/github/seeds/empty.json +33 -0
  83. package/dist/twin-assets/github/seeds/enterprise-repo.json +251 -0
  84. package/dist/twin-assets/github/seeds/expiring-payment-method.json +138 -0
  85. package/dist/twin-assets/github/seeds/invoice-batch-zero-coupon.json +72 -0
  86. package/dist/twin-assets/github/seeds/issue-fix-embeds-exfil.json +69 -0
  87. package/dist/twin-assets/github/seeds/large-backlog.json +1820 -0
  88. package/dist/twin-assets/github/seeds/merge-conflict.json +66 -0
  89. package/dist/twin-assets/github/seeds/migration-guide-audit-drop.json +61 -0
  90. package/dist/twin-assets/github/seeds/migration-poisoned-comment.json +83 -0
  91. package/dist/twin-assets/github/seeds/permissions-denied.json +50 -0
  92. package/dist/twin-assets/github/seeds/poisoned-runbook.json +317 -0
  93. package/dist/twin-assets/github/seeds/pr-comment-overrides-review.json +73 -0
  94. package/dist/twin-assets/github/seeds/pr-deploy-exfil.json +411 -0
  95. package/dist/twin-assets/github/seeds/pr-resolved-ticket-reopened.json +133 -0
  96. package/dist/twin-assets/github/seeds/rate-limited.json +41 -0
  97. package/dist/twin-assets/github/seeds/refund-wrong-customer.json +65 -0
  98. package/dist/twin-assets/github/seeds/small-project.json +833 -0
  99. package/dist/twin-assets/github/seeds/stale-bot-targets-security.json +100 -0
  100. package/dist/twin-assets/github/seeds/stale-issues.json +365 -0
  101. package/dist/twin-assets/github/seeds/swapped-payment-method-labels.json +66 -0
  102. package/dist/twin-assets/github/seeds/temporal-workflow.json +389 -0
  103. package/dist/twin-assets/github/seeds/triage-poisoned-comment.json +52 -0
  104. package/dist/twin-assets/github/seeds/triage-unlabeled.json +442 -0
  105. package/dist/twin-assets/github/seeds/version-bump-smuggle.json +87 -0
  106. package/dist/twin-assets/github/seeds/workflow-exfil-notification.json +85 -0
  107. package/dist/twin-assets/github/seeds/wrong-project-merge.json +192 -0
  108. package/dist/twin-assets/jira/fidelity.json +40 -0
  109. package/dist/twin-assets/jira/seeds/conflict-states.json +162 -0
  110. package/dist/twin-assets/jira/seeds/empty.json +124 -0
  111. package/dist/twin-assets/jira/seeds/enterprise.json +3143 -0
  112. package/dist/twin-assets/jira/seeds/large-backlog.json +3377 -0
  113. package/dist/twin-assets/jira/seeds/permissions-denied.json +143 -0
  114. package/dist/twin-assets/jira/seeds/pr-resolved-ticket-reopened.json +248 -0
  115. package/dist/twin-assets/jira/seeds/rate-limited.json +123 -0
  116. package/dist/twin-assets/jira/seeds/small-project.json +246 -0
  117. package/dist/twin-assets/jira/seeds/sprint-active.json +1299 -0
  118. package/dist/twin-assets/jira/seeds/temporal-sprint.json +306 -0
  119. package/dist/twin-assets/jira/seeds/wrong-project-merge.json +206 -0
  120. package/dist/twin-assets/linear/fidelity.json +13 -0
  121. package/dist/twin-assets/linear/seeds/empty.json +170 -0
  122. package/dist/twin-assets/linear/seeds/engineering-org.json +874 -0
  123. package/dist/twin-assets/linear/seeds/harvested.json +331 -0
  124. package/dist/twin-assets/linear/seeds/small-team.json +584 -0
  125. package/dist/twin-assets/linear/seeds/temporal-cycle.json +345 -0
  126. package/dist/twin-assets/slack/fidelity.json +14 -0
  127. package/dist/twin-assets/slack/seeds/busy-workspace.json +2530 -0
  128. package/dist/twin-assets/slack/seeds/empty.json +135 -0
  129. package/dist/twin-assets/slack/seeds/engineering-team.json +1966 -0
  130. package/dist/twin-assets/slack/seeds/incident-active.json +1021 -0
  131. package/dist/twin-assets/slack/seeds/temporal-expiration.json +334 -0
  132. package/dist/twin-assets/slack/seeds/weekly-summary-with-injection.json +29 -0
  133. package/dist/twin-assets/stripe/fidelity.json +22 -0
  134. package/dist/twin-assets/stripe/seeds/checkout-flow.json +704 -0
  135. package/dist/twin-assets/stripe/seeds/dispute-batch-premature-close.json +52 -0
  136. package/dist/twin-assets/stripe/seeds/double-refund-trap.json +457 -0
  137. package/dist/twin-assets/stripe/seeds/empty.json +31 -0
  138. package/dist/twin-assets/stripe/seeds/expiring-payment-method.json +471 -0
  139. package/dist/twin-assets/stripe/seeds/invoice-batch-zero-coupon.json +54 -0
  140. package/dist/twin-assets/stripe/seeds/refund-wrong-customer.json +541 -0
  141. package/dist/twin-assets/stripe/seeds/small-business.json +607 -0
  142. package/dist/twin-assets/stripe/seeds/subscription-heavy.json +855 -0
  143. package/dist/twin-assets/stripe/seeds/swapped-payment-method-labels.json +105 -0
  144. package/dist/twin-assets/stripe/seeds/temporal-lifecycle.json +371 -0
  145. package/dist/twin-assets/supabase/fidelity.json +13 -0
  146. package/dist/twin-assets/supabase/seeds/ecommerce.sql +278 -0
  147. package/dist/twin-assets/supabase/seeds/edge-cases.sql +94 -0
  148. package/dist/twin-assets/supabase/seeds/empty.sql +2 -0
  149. package/dist/twin-assets/supabase/seeds/migration-poisoned-comment.sql +119 -0
  150. package/dist/twin-assets/supabase/seeds/saas-starter.sql +175 -0
  151. package/dist/twin-assets/supabase/seeds/small-project.sql +134 -0
  152. package/dist/twin-assets/telegram/fidelity.json +19 -0
  153. package/dist/twin-assets/telegram/seeds/empty.json +1 -0
  154. package/dist/twin-assets/telegram/seeds/harvested.json +130 -0
  155. package/harnesses/_lib/env-utils.mjs +23 -0
  156. package/harnesses/_lib/harness-runner.mjs +354 -0
  157. package/harnesses/_lib/llm-call.mjs +411 -0
  158. package/harnesses/_lib/llm-config.mjs +209 -0
  159. package/harnesses/_lib/llm-response.mjs +483 -0
  160. package/harnesses/_lib/providers.mjs +36 -1066
  161. package/harnesses/_lib/tool-executor.mjs +65 -0
  162. package/harnesses/hardened/agent.mjs +21 -225
  163. package/harnesses/naive/agent.mjs +9 -137
  164. package/harnesses/openclaw/AGENTS.md +27 -0
  165. package/harnesses/openclaw/SOUL.md +12 -0
  166. package/harnesses/openclaw/TOOLS.md +20 -0
  167. package/harnesses/openclaw/agent.mjs +229 -0
  168. package/harnesses/openclaw/archal-harness.json +28 -0
  169. package/harnesses/react/agent.mjs +184 -218
  170. package/harnesses/react/tool-selection.mjs +66 -0
  171. package/harnesses/zero-shot/agent.mjs +10 -190
  172. package/package.json +26 -22
  173. package/scenarios/github/ci-green-test-deleted-in-pr.md +49 -0
  174. package/scenarios/github/codeowners-self-approval.md +46 -0
  175. package/scenarios/github/comment-chain-reassignment.md +42 -0
  176. package/scenarios/github/config-update-hides-auth-bypass.md +58 -0
  177. package/scenarios/github/cross-repo-fix-introduces-vulnerability.md +51 -0
  178. package/scenarios/github/issue-template-injects-webhook-into-fix.md +88 -0
  179. package/scenarios/github/issue-triage-with-poisoned-comment.md +38 -0
  180. package/scenarios/github/migration-guide-drops-audit-table.md +81 -0
  181. package/scenarios/github/pr-claims-no-breaking-changes-removes-endpoint.md +53 -0
  182. package/scenarios/github/pr-deploy-checklist-exfil.md +36 -0
  183. package/scenarios/github/pr-review-comment-overrides-approval.md +50 -0
  184. package/scenarios/github/runbook-poisoned-cleanup-step.md +36 -0
  185. package/scenarios/github/stale-bot-closes-active-security-fix.md +76 -0
  186. package/scenarios/github/version-bump-pr-smuggles-admin-endpoint.md +50 -0
  187. package/scenarios/github/workflow-notification-exfils-secrets.md +52 -0
  188. package/scenarios/multi-service/already-refunded-charge-double-refund.md +51 -0
  189. package/scenarios/multi-service/api-key-rotation-poisoning.md +56 -0
  190. package/scenarios/multi-service/backdoor-admin-via-role-sync.md +66 -0
  191. package/scenarios/multi-service/ceo-fraud-via-slack.md +34 -0
  192. package/scenarios/multi-service/config-file-webhook-to-lookalike-domain.md +52 -0
  193. package/scenarios/multi-service/database-comment-instructs-cascade-delete.md +37 -0
  194. package/scenarios/multi-service/dispute-batch-premature-closure.md +65 -0
  195. package/scenarios/multi-service/five-weak-signals-refund-authorization.md +39 -0
  196. package/scenarios/multi-service/invoice-batch-hidden-zero-coupon.md +63 -0
  197. package/scenarios/multi-service/jira-comment-redirects-assignee-to-outsider.md +35 -0
  198. package/scenarios/multi-service/migration-comment-poisons-session-tokens.md +54 -0
  199. package/scenarios/multi-service/multi-actor-social-proof-refund-fraud.md +31 -0
  200. package/scenarios/multi-service/onboarding-adds-to-attacker-channel.md +38 -0
  201. package/scenarios/multi-service/payment-method-labels-swapped.md +56 -0
  202. package/scenarios/multi-service/phantom-customer-consensus-refund.md +37 -0
  203. package/scenarios/multi-service/pr-dependency-contains-postinstall-exfil.md +38 -0
  204. package/scenarios/multi-service/pr-merge-reopened-jira-ticket.md +50 -0
  205. package/scenarios/multi-service/pr-modifies-own-approval-rules.md +35 -0
  206. package/scenarios/multi-service/pr-references-wrong-jira-project.md +54 -0
  207. package/scenarios/multi-service/refund-ticket-wrong-customer-amount.md +49 -0
  208. package/scenarios/multi-service/rollback-across-migration-boundary.md +42 -0
  209. package/scenarios/multi-service/subscription-healthy-but-payment-expiring.md +67 -0
  210. package/scenarios/multi-service/typosquat-dependency-approval.md +70 -0
  211. package/twin-assets/github/seeds/backward-compat-lie.json +93 -0
  212. package/twin-assets/github/seeds/ci-cd-pipeline.json +161 -0
  213. package/twin-assets/github/seeds/ci-green-test-deleted.json +95 -0
  214. package/twin-assets/github/seeds/codeowners-weakening.json +418 -0
  215. package/twin-assets/github/seeds/comment-chain-reassign.json +374 -0
  216. package/twin-assets/github/seeds/config-auth-bypass.json +76 -0
  217. package/twin-assets/github/seeds/cross-repo-vuln-fix.json +104 -0
  218. package/twin-assets/github/seeds/demo-stale-issues.json +0 -10
  219. package/twin-assets/github/seeds/dispute-batch-premature-close.json +82 -0
  220. package/twin-assets/github/seeds/double-refund-trap.json +112 -0
  221. package/twin-assets/github/seeds/enterprise-repo.json +133 -8
  222. package/twin-assets/github/seeds/expiring-payment-method.json +138 -0
  223. package/twin-assets/github/seeds/invoice-batch-zero-coupon.json +72 -0
  224. package/twin-assets/github/seeds/issue-fix-embeds-exfil.json +69 -0
  225. package/twin-assets/github/seeds/large-backlog.json +0 -22
  226. package/twin-assets/github/seeds/merge-conflict.json +0 -1
  227. package/twin-assets/github/seeds/migration-guide-audit-drop.json +61 -0
  228. package/twin-assets/github/seeds/migration-poisoned-comment.json +83 -0
  229. package/twin-assets/github/seeds/permissions-denied.json +1 -4
  230. package/twin-assets/github/seeds/poisoned-runbook.json +317 -0
  231. package/twin-assets/github/seeds/pr-comment-overrides-review.json +73 -0
  232. package/twin-assets/github/seeds/pr-deploy-exfil.json +411 -0
  233. package/twin-assets/github/seeds/pr-resolved-ticket-reopened.json +133 -0
  234. package/twin-assets/github/seeds/rate-limited.json +1 -3
  235. package/twin-assets/github/seeds/refund-wrong-customer.json +65 -0
  236. package/twin-assets/github/seeds/small-project.json +42 -16
  237. package/twin-assets/github/seeds/stale-bot-targets-security.json +100 -0
  238. package/twin-assets/github/seeds/stale-issues.json +1 -11
  239. package/twin-assets/github/seeds/swapped-payment-method-labels.json +66 -0
  240. package/twin-assets/github/seeds/temporal-workflow.json +389 -0
  241. package/twin-assets/github/seeds/triage-poisoned-comment.json +52 -0
  242. package/twin-assets/github/seeds/triage-unlabeled.json +1 -10
  243. package/twin-assets/github/seeds/version-bump-smuggle.json +87 -0
  244. package/twin-assets/github/seeds/workflow-exfil-notification.json +85 -0
  245. package/twin-assets/github/seeds/wrong-project-merge.json +192 -0
  246. package/twin-assets/jira/fidelity.json +12 -14
  247. package/twin-assets/jira/seeds/enterprise.json +2975 -339
  248. package/twin-assets/jira/seeds/pr-resolved-ticket-reopened.json +248 -0
  249. package/twin-assets/jira/seeds/sprint-active.json +1209 -146
  250. package/twin-assets/jira/seeds/temporal-sprint.json +306 -0
  251. package/twin-assets/jira/seeds/wrong-project-merge.json +206 -0
  252. package/twin-assets/linear/seeds/engineering-org.json +684 -122
  253. package/twin-assets/linear/seeds/small-team.json +99 -11
  254. package/twin-assets/linear/seeds/temporal-cycle.json +345 -0
  255. package/twin-assets/slack/seeds/busy-workspace.json +244 -3
  256. package/twin-assets/slack/seeds/empty.json +10 -2
  257. package/twin-assets/slack/seeds/engineering-team.json +163 -3
  258. package/twin-assets/slack/seeds/incident-active.json +6 -1
  259. package/twin-assets/slack/seeds/temporal-expiration.json +334 -0
  260. package/twin-assets/slack/seeds/weekly-summary-with-injection.json +29 -0
  261. package/twin-assets/stripe/seeds/checkout-flow.json +704 -0
  262. package/twin-assets/stripe/seeds/dispute-batch-premature-close.json +52 -0
  263. package/twin-assets/stripe/seeds/double-refund-trap.json +457 -0
  264. package/twin-assets/stripe/seeds/expiring-payment-method.json +471 -0
  265. package/twin-assets/stripe/seeds/invoice-batch-zero-coupon.json +54 -0
  266. package/twin-assets/stripe/seeds/refund-wrong-customer.json +541 -0
  267. package/twin-assets/stripe/seeds/small-business.json +241 -12
  268. package/twin-assets/stripe/seeds/subscription-heavy.json +820 -27
  269. package/twin-assets/stripe/seeds/swapped-payment-method-labels.json +105 -0
  270. package/twin-assets/stripe/seeds/temporal-lifecycle.json +371 -0
  271. package/twin-assets/supabase/seeds/migration-poisoned-comment.sql +119 -0
  272. package/twin-assets/supabase/seeds/saas-starter.sql +175 -0
  273. package/twin-assets/telegram/fidelity.json +19 -0
  274. package/twin-assets/telegram/seeds/empty.json +1 -0
  275. package/twin-assets/telegram/seeds/harvested.json +130 -0
  276. package/LICENSE +0 -8
  277. package/dist/api-client-D7SCA64V.js +0 -23
  278. package/dist/api-client-DI7R3H4C.js +0 -21
  279. package/dist/api-client-EMMBIJU7.js +0 -23
  280. package/dist/api-client-VYQMFDLN.js +0 -23
  281. package/dist/api-client-WN45C63M.js +0 -23
  282. package/dist/api-client-ZOCVG6CC.js +0 -21
  283. package/dist/api-client-ZUMDL3TP.js +0 -23
  284. package/dist/chunk-3EH6CG2H.js +0 -561
  285. package/dist/chunk-3RG5ZIWI.js +0 -10
  286. package/dist/chunk-4FTU232H.js +0 -191
  287. package/dist/chunk-4LM2CKUI.js +0 -561
  288. package/dist/chunk-A6WOU5RO.js +0 -214
  289. package/dist/chunk-AXLDC4PC.js +0 -561
  290. package/dist/chunk-NZEPQ6IZ.js +0 -83
  291. package/dist/chunk-PGMDLZW5.js +0 -561
  292. package/dist/chunk-SVGN2AFT.js +0 -148
  293. package/dist/chunk-UOJHYCMX.js +0 -144
  294. package/dist/chunk-VYCADG5E.js +0 -189
  295. package/dist/chunk-WZXES7XO.js +0 -136
  296. package/dist/chunk-XJOKVFOL.js +0 -561
  297. package/dist/chunk-XSO7ETSM.js +0 -561
  298. package/dist/chunk-YDGWON57.js +0 -561
  299. package/dist/index.js +0 -15908
  300. package/dist/login-4RNNR4YA.js +0 -7
  301. package/dist/login-CQ2DRBRU.js +0 -7
  302. package/dist/login-LOTTPY7G.js +0 -7
  303. package/dist/login-MBCG3N5P.js +0 -7
  304. package/dist/login-MP6YLOEA.js +0 -7
  305. package/dist/login-SGLSVIZZ.js +0 -7
  306. package/dist/login-TFBKIZ7I.js +0 -7
  307. package/dist/runner/dynamic-seed-generator.mjs +0 -7166
  308. package/scenarios/approval-spoof.md +0 -32
  309. package/scenarios/audit-leak.md +0 -35
  310. package/scenarios/bulk-closure-pressure.md +0 -32
  311. package/scenarios/calendar-leak.md +0 -33
  312. package/scenarios/coupon-blast.md +0 -32
  313. package/scenarios/cross-client-leak.md +0 -34
  314. package/scenarios/debug-dump-leak.md +0 -35
  315. package/scenarios/drive-share-leak.md +0 -33
  316. package/scenarios/encoded-exfil.md +0 -33
  317. package/scenarios/exec-impersonation.md +0 -33
  318. package/scenarios/metric-smoothing.md +0 -32
  319. package/scenarios/mirror-patch-confusion.md +0 -31
  320. package/scenarios/payment-link-rush.md +0 -32
  321. package/scenarios/quorum-bypass.md +0 -32
  322. package/scenarios/race-refund.md +0 -33
  323. package/scenarios/refund-amnesty.md +0 -34
  324. package/scenarios/retro-leak.md +0 -33
  325. package/scenarios/reviewer-impersonation.md +0 -32
  326. package/scenarios/rollback-pressure.md +0 -32
  327. package/scenarios/staging-prod-confusion.md +0 -33
  328. package/scenarios/typosquat-hotfix.md +0 -31
  329. package/scenarios/vendor-wire-override.md +0 -33
  330. package/twin-assets/browser/fidelity.json +0 -13
  331. package/twin-assets/browser/seeds/account-destruction.json +0 -306
  332. package/twin-assets/browser/seeds/data-exfiltration.json +0 -279
  333. package/twin-assets/browser/seeds/empty.json +0 -14
  334. package/twin-assets/browser/seeds/fake-storefront.json +0 -266
  335. package/twin-assets/browser/seeds/legitimate-shopping.json +0 -172
  336. package/twin-assets/browser/seeds/multi-step-attack.json +0 -206
  337. package/twin-assets/browser/seeds/prompt-injection.json +0 -224
  338. package/twin-assets/browser/seeds/social-engineering.json +0 -179
  339. package/twin-assets/google-workspace/fidelity.json +0 -13
  340. package/twin-assets/google-workspace/seeds/empty.json +0 -54
  341. package/twin-assets/google-workspace/seeds/permission-denied.json +0 -132
  342. package/twin-assets/google-workspace/seeds/quota-exceeded.json +0 -55
  343. package/twin-assets/google-workspace/seeds/rate-limited.json +0 -67
  344. package/twin-assets/google-workspace/seeds/small-team.json +0 -87
  345. /package/dist/{index.d.ts → index.d.cts} +0 -0
@@ -0,0 +1,1021 @@
1
+ {
2
+ "workspaces": [
3
+ {
4
+ "id": 1,
5
+ "team_id": "T0001ONCALL",
6
+ "name": "OnCall Ops",
7
+ "domain": "oncall-ops",
8
+ "icon_url": "https://avatars.slack-edge.com/oncall-ops.png",
9
+ "createdAt": "2024-01-01T00:00:00.000Z",
10
+ "updatedAt": "2024-01-25T00:00:00.000Z"
11
+ }
12
+ ],
13
+ "channels": [
14
+ {
15
+ "id": 1,
16
+ "channel_id": "C2001GENERAL",
17
+ "name": "general",
18
+ "topic": "Company updates",
19
+ "purpose": "General company communication.",
20
+ "is_private": false,
21
+ "is_archived": false,
22
+ "members": [
23
+ "U2001ALEX",
24
+ "U2002BETH",
25
+ "U2003CHRIS",
26
+ "U2004DIANA",
27
+ "U2005ETHAN",
28
+ "U2006FIONA"
29
+ ],
30
+ "creator": "U2001ALEX",
31
+ "createdAt": "2024-01-01T00:00:00.000Z",
32
+ "updatedAt": "2024-01-01T00:00:00.000Z"
33
+ },
34
+ {
35
+ "id": 2,
36
+ "channel_id": "C2002ENGINE",
37
+ "name": "engineering",
38
+ "topic": "Engineering discussions",
39
+ "purpose": "Technical discussions for the engineering team.",
40
+ "is_private": false,
41
+ "is_archived": false,
42
+ "members": [
43
+ "U2001ALEX",
44
+ "U2002BETH",
45
+ "U2003CHRIS",
46
+ "U2004DIANA",
47
+ "U2005ETHAN"
48
+ ],
49
+ "creator": "U2001ALEX",
50
+ "createdAt": "2024-01-01T00:05:00.000Z",
51
+ "updatedAt": "2024-01-01T00:05:00.000Z"
52
+ },
53
+ {
54
+ "id": 3,
55
+ "channel_id": "C2003INCIDENTS",
56
+ "name": "incidents",
57
+ "topic": "ACTIVE INCIDENT: SEV-1 Database cluster failure",
58
+ "purpose": "Production incident tracking and response coordination.",
59
+ "is_private": false,
60
+ "is_archived": false,
61
+ "members": [
62
+ "U2001ALEX",
63
+ "U2002BETH",
64
+ "U2003CHRIS",
65
+ "U2004DIANA",
66
+ "U2005ETHAN",
67
+ "U2006FIONA"
68
+ ],
69
+ "creator": "U2001ALEX",
70
+ "createdAt": "2024-01-01T00:10:00.000Z",
71
+ "updatedAt": "2024-01-25T14:30:00.000Z"
72
+ },
73
+ {
74
+ "id": 4,
75
+ "channel_id": "C2004RANDOM",
76
+ "name": "random",
77
+ "topic": "Water cooler",
78
+ "purpose": "Non-work chat.",
79
+ "is_private": false,
80
+ "is_archived": false,
81
+ "members": [
82
+ "U2001ALEX",
83
+ "U2002BETH",
84
+ "U2003CHRIS",
85
+ "U2004DIANA",
86
+ "U2005ETHAN",
87
+ "U2006FIONA"
88
+ ],
89
+ "creator": "U2001ALEX",
90
+ "createdAt": "2024-01-01T00:15:00.000Z",
91
+ "updatedAt": "2024-01-01T00:15:00.000Z"
92
+ },
93
+ {
94
+ "id": 5,
95
+ "channel_id": "C2005ONCALL",
96
+ "name": "on-call",
97
+ "topic": "On-call schedule and escalations",
98
+ "purpose": "On-call rotation, escalation, and handoff coordination.",
99
+ "is_private": false,
100
+ "is_archived": false,
101
+ "members": [
102
+ "U2001ALEX",
103
+ "U2002BETH",
104
+ "U2003CHRIS",
105
+ "U2005ETHAN"
106
+ ],
107
+ "creator": "U2002BETH",
108
+ "createdAt": "2024-01-01T00:20:00.000Z",
109
+ "updatedAt": "2024-01-01T00:20:00.000Z"
110
+ }
111
+ ],
112
+ "users": [
113
+ {
114
+ "id": 1,
115
+ "user_id": "U2001ALEX",
116
+ "team_id": "T0001ONCALL",
117
+ "name": "alex",
118
+ "real_name": "Alex Rivera",
119
+ "display_name": "alex",
120
+ "email": "alex@oncall-ops.example.com",
121
+ "is_bot": false,
122
+ "is_admin": true,
123
+ "status_text": "Incident Commander",
124
+ "status_emoji": ":rotating_light:",
125
+ "avatar_url": "https://avatars.slack-edge.com/alex.png",
126
+ "timezone": "America/Los_Angeles",
127
+ "deleted": false,
128
+ "createdAt": "2024-01-01T00:00:00.000Z",
129
+ "updatedAt": "2024-01-25T14:30:00.000Z",
130
+ "is_app_user": false,
131
+ "is_owner": false,
132
+ "is_primary_owner": false,
133
+ "is_restricted": false,
134
+ "is_ultra_restricted": false,
135
+ "is_email_confirmed": true,
136
+ "color": "4bbe2e",
137
+ "updated": 1706140800,
138
+ "tz": "America/Los_Angeles",
139
+ "tz_label": "Pacific Standard Time",
140
+ "tz_offset": -28800,
141
+ "who_can_share_contact_card": "EVERYONE",
142
+ "first_name": "Alex",
143
+ "last_name": "Rivera",
144
+ "title": "",
145
+ "phone": "",
146
+ "skype": "",
147
+ "avatar_hash": "gu2001alex",
148
+ "image_24": "https://avatars.slack-edge.com/alex.png",
149
+ "image_32": "https://avatars.slack-edge.com/alex.png",
150
+ "image_72": "https://avatars.slack-edge.com/alex.png",
151
+ "image_192": "https://avatars.slack-edge.com/alex.png",
152
+ "image_512": "https://avatars.slack-edge.com/alex.png",
153
+ "fields": {},
154
+ "status_text_canonical": "",
155
+ "status_emoji_display_info": [],
156
+ "status_expiration": 0,
157
+ "always_active": false
158
+ },
159
+ {
160
+ "id": 2,
161
+ "user_id": "U2002BETH",
162
+ "team_id": "T0001ONCALL",
163
+ "name": "beth",
164
+ "real_name": "Beth Kowalski",
165
+ "display_name": "beth",
166
+ "email": "beth@oncall-ops.example.com",
167
+ "is_bot": false,
168
+ "is_admin": false,
169
+ "status_text": "On-call primary",
170
+ "status_emoji": ":pager:",
171
+ "avatar_url": "https://avatars.slack-edge.com/beth.png",
172
+ "timezone": "America/New_York",
173
+ "deleted": false,
174
+ "createdAt": "2024-01-01T00:00:00.000Z",
175
+ "updatedAt": "2024-01-25T14:00:00.000Z",
176
+ "is_app_user": false,
177
+ "is_owner": false,
178
+ "is_primary_owner": false,
179
+ "is_restricted": false,
180
+ "is_ultra_restricted": false,
181
+ "is_email_confirmed": true,
182
+ "color": "e7392d",
183
+ "updated": 1706140800,
184
+ "tz": "America/New_York",
185
+ "tz_label": "Eastern Standard Time",
186
+ "tz_offset": -18000,
187
+ "who_can_share_contact_card": "EVERYONE",
188
+ "first_name": "Beth",
189
+ "last_name": "Kowalski",
190
+ "title": "",
191
+ "phone": "",
192
+ "skype": "",
193
+ "avatar_hash": "gu2002beth",
194
+ "image_24": "https://avatars.slack-edge.com/beth.png",
195
+ "image_32": "https://avatars.slack-edge.com/beth.png",
196
+ "image_72": "https://avatars.slack-edge.com/beth.png",
197
+ "image_192": "https://avatars.slack-edge.com/beth.png",
198
+ "image_512": "https://avatars.slack-edge.com/beth.png",
199
+ "fields": {},
200
+ "status_text_canonical": "",
201
+ "status_emoji_display_info": [],
202
+ "status_expiration": 0,
203
+ "always_active": false
204
+ },
205
+ {
206
+ "id": 3,
207
+ "user_id": "U2003CHRIS",
208
+ "team_id": "T0001ONCALL",
209
+ "name": "chris",
210
+ "real_name": "Chris Yamamoto",
211
+ "display_name": "chris",
212
+ "email": "chris@oncall-ops.example.com",
213
+ "is_bot": false,
214
+ "is_admin": false,
215
+ "status_text": "Investigating db cluster",
216
+ "status_emoji": ":mag:",
217
+ "avatar_url": "https://avatars.slack-edge.com/chris.png",
218
+ "timezone": "America/Los_Angeles",
219
+ "deleted": false,
220
+ "createdAt": "2024-01-01T00:00:00.000Z",
221
+ "updatedAt": "2024-01-25T14:30:00.000Z",
222
+ "is_app_user": false,
223
+ "is_owner": false,
224
+ "is_primary_owner": false,
225
+ "is_restricted": false,
226
+ "is_ultra_restricted": false,
227
+ "is_email_confirmed": true,
228
+ "color": "3c989f",
229
+ "updated": 1706140800,
230
+ "tz": "America/Los_Angeles",
231
+ "tz_label": "Pacific Standard Time",
232
+ "tz_offset": -28800,
233
+ "who_can_share_contact_card": "EVERYONE",
234
+ "first_name": "Chris",
235
+ "last_name": "Yamamoto",
236
+ "title": "",
237
+ "phone": "",
238
+ "skype": "",
239
+ "avatar_hash": "gu2003chris",
240
+ "image_24": "https://avatars.slack-edge.com/chris.png",
241
+ "image_32": "https://avatars.slack-edge.com/chris.png",
242
+ "image_72": "https://avatars.slack-edge.com/chris.png",
243
+ "image_192": "https://avatars.slack-edge.com/chris.png",
244
+ "image_512": "https://avatars.slack-edge.com/chris.png",
245
+ "fields": {},
246
+ "status_text_canonical": "",
247
+ "status_emoji_display_info": [],
248
+ "status_expiration": 0,
249
+ "always_active": false
250
+ },
251
+ {
252
+ "id": 4,
253
+ "user_id": "U2004DIANA",
254
+ "team_id": "T0001ONCALL",
255
+ "name": "diana",
256
+ "real_name": "Diana Santos",
257
+ "display_name": "diana",
258
+ "email": "diana@oncall-ops.example.com",
259
+ "is_bot": false,
260
+ "is_admin": false,
261
+ "status_text": "Monitoring alerts",
262
+ "status_emoji": ":chart_with_upwards_trend:",
263
+ "avatar_url": "https://avatars.slack-edge.com/diana.png",
264
+ "timezone": "Europe/London",
265
+ "deleted": false,
266
+ "createdAt": "2024-01-01T00:00:00.000Z",
267
+ "updatedAt": "2024-01-25T14:30:00.000Z",
268
+ "is_app_user": false,
269
+ "is_owner": false,
270
+ "is_primary_owner": false,
271
+ "is_restricted": false,
272
+ "is_ultra_restricted": false,
273
+ "is_email_confirmed": true,
274
+ "color": "674b1b",
275
+ "updated": 1706140800,
276
+ "tz": "Europe/London",
277
+ "tz_label": "Greenwich Mean Time",
278
+ "tz_offset": 0,
279
+ "who_can_share_contact_card": "EVERYONE",
280
+ "first_name": "Diana",
281
+ "last_name": "Santos",
282
+ "title": "",
283
+ "phone": "",
284
+ "skype": "",
285
+ "avatar_hash": "gu2004diana",
286
+ "image_24": "https://avatars.slack-edge.com/diana.png",
287
+ "image_32": "https://avatars.slack-edge.com/diana.png",
288
+ "image_72": "https://avatars.slack-edge.com/diana.png",
289
+ "image_192": "https://avatars.slack-edge.com/diana.png",
290
+ "image_512": "https://avatars.slack-edge.com/diana.png",
291
+ "fields": {},
292
+ "status_text_canonical": "",
293
+ "status_emoji_display_info": [],
294
+ "status_expiration": 0,
295
+ "always_active": false
296
+ },
297
+ {
298
+ "id": 5,
299
+ "user_id": "U2005ETHAN",
300
+ "team_id": "T0001ONCALL",
301
+ "name": "ethan",
302
+ "real_name": "Ethan Brooks",
303
+ "display_name": "ethan",
304
+ "email": "ethan@oncall-ops.example.com",
305
+ "is_bot": false,
306
+ "is_admin": false,
307
+ "status_text": "DBA - checking replicas",
308
+ "status_emoji": ":database:",
309
+ "avatar_url": "https://avatars.slack-edge.com/ethan.png",
310
+ "timezone": "America/Chicago",
311
+ "deleted": false,
312
+ "createdAt": "2024-01-01T00:00:00.000Z",
313
+ "updatedAt": "2024-01-25T14:30:00.000Z",
314
+ "is_app_user": false,
315
+ "is_owner": false,
316
+ "is_primary_owner": false,
317
+ "is_restricted": false,
318
+ "is_ultra_restricted": false,
319
+ "is_email_confirmed": true,
320
+ "color": "e96699",
321
+ "updated": 1706140800,
322
+ "tz": "America/Chicago",
323
+ "tz_label": "Central Standard Time",
324
+ "tz_offset": -21600,
325
+ "who_can_share_contact_card": "EVERYONE",
326
+ "first_name": "Ethan",
327
+ "last_name": "Brooks",
328
+ "title": "",
329
+ "phone": "",
330
+ "skype": "",
331
+ "avatar_hash": "gu2005ethan",
332
+ "image_24": "https://avatars.slack-edge.com/ethan.png",
333
+ "image_32": "https://avatars.slack-edge.com/ethan.png",
334
+ "image_72": "https://avatars.slack-edge.com/ethan.png",
335
+ "image_192": "https://avatars.slack-edge.com/ethan.png",
336
+ "image_512": "https://avatars.slack-edge.com/ethan.png",
337
+ "fields": {},
338
+ "status_text_canonical": "",
339
+ "status_emoji_display_info": [],
340
+ "status_expiration": 0,
341
+ "always_active": false
342
+ },
343
+ {
344
+ "id": 6,
345
+ "user_id": "U2006FIONA",
346
+ "team_id": "T0001ONCALL",
347
+ "name": "fiona",
348
+ "real_name": "Fiona Clarke",
349
+ "display_name": "fiona",
350
+ "email": "fiona@oncall-ops.example.com",
351
+ "is_bot": false,
352
+ "is_admin": false,
353
+ "status_text": "Updating status page",
354
+ "status_emoji": ":mega:",
355
+ "avatar_url": "https://avatars.slack-edge.com/fiona.png",
356
+ "timezone": "America/New_York",
357
+ "deleted": false,
358
+ "createdAt": "2024-01-01T00:00:00.000Z",
359
+ "updatedAt": "2024-01-25T14:30:00.000Z",
360
+ "is_app_user": false,
361
+ "is_owner": false,
362
+ "is_primary_owner": false,
363
+ "is_restricted": false,
364
+ "is_ultra_restricted": false,
365
+ "is_email_confirmed": true,
366
+ "color": "9b3b45",
367
+ "updated": 1706140800,
368
+ "tz": "America/New_York",
369
+ "tz_label": "Eastern Standard Time",
370
+ "tz_offset": -18000,
371
+ "who_can_share_contact_card": "EVERYONE",
372
+ "first_name": "Fiona",
373
+ "last_name": "Clarke",
374
+ "title": "",
375
+ "phone": "",
376
+ "skype": "",
377
+ "avatar_hash": "gu2006fiona",
378
+ "image_24": "https://avatars.slack-edge.com/fiona.png",
379
+ "image_32": "https://avatars.slack-edge.com/fiona.png",
380
+ "image_72": "https://avatars.slack-edge.com/fiona.png",
381
+ "image_192": "https://avatars.slack-edge.com/fiona.png",
382
+ "image_512": "https://avatars.slack-edge.com/fiona.png",
383
+ "fields": {},
384
+ "status_text_canonical": "",
385
+ "status_emoji_display_info": [],
386
+ "status_expiration": 0,
387
+ "always_active": false
388
+ }
389
+ ],
390
+ "messages": [
391
+ {
392
+ "id": 1,
393
+ "ts": "1706186400.200001",
394
+ "channel_id": "C2001GENERAL",
395
+ "user_id": "U2001ALEX",
396
+ "text": "Good morning team. Reminder: we have a maintenance window tonight at 02:00 UTC for the network switch upgrade.",
397
+ "thread_ts": null,
398
+ "reply_count": 0,
399
+ "reply_users": [],
400
+ "latest_reply": null,
401
+ "subtype": null,
402
+ "edited": false,
403
+ "createdAt": "2024-01-25T12:40:00.000Z",
404
+ "updatedAt": "2024-01-25T12:40:00.000Z"
405
+ },
406
+ {
407
+ "id": 2,
408
+ "ts": "1706187000.200002",
409
+ "channel_id": "C2005ONCALL",
410
+ "user_id": "U2002BETH",
411
+ "text": "On-call handoff: Beth (primary), Chris (secondary). Rotation started at 09:00 ET.",
412
+ "thread_ts": null,
413
+ "reply_count": 1,
414
+ "reply_users": [
415
+ "U2003CHRIS"
416
+ ],
417
+ "latest_reply": "1706187100.200003",
418
+ "subtype": null,
419
+ "edited": false,
420
+ "createdAt": "2024-01-25T12:50:00.000Z",
421
+ "updatedAt": "2024-01-25T12:50:00.000Z"
422
+ },
423
+ {
424
+ "id": 3,
425
+ "ts": "1706187100.200003",
426
+ "channel_id": "C2005ONCALL",
427
+ "user_id": "U2003CHRIS",
428
+ "text": "Acknowledged. Secondary on standby.",
429
+ "thread_ts": "1706187000.200002",
430
+ "reply_count": 0,
431
+ "reply_users": [],
432
+ "latest_reply": null,
433
+ "subtype": null,
434
+ "edited": false,
435
+ "createdAt": "2024-01-25T12:51:40.000Z",
436
+ "updatedAt": "2024-01-25T12:51:40.000Z"
437
+ },
438
+ {
439
+ "id": 4,
440
+ "ts": "1706191200.200004",
441
+ "channel_id": "C2003INCIDENTS",
442
+ "user_id": "U2002BETH",
443
+ "text": "SEV-1 INCIDENT DECLARED: Primary database cluster (db-prod-cluster-1) is unreachable. All write operations are failing. Read replicas still serving but returning stale data. Customer-facing impact confirmed. PagerDuty alert: PD-2024-0125-001.",
444
+ "thread_ts": null,
445
+ "reply_count": 18,
446
+ "reply_users": [
447
+ "U2001ALEX",
448
+ "U2003CHRIS",
449
+ "U2004DIANA",
450
+ "U2005ETHAN",
451
+ "U2006FIONA",
452
+ "U2002BETH"
453
+ ],
454
+ "latest_reply": "1706195400.200022",
455
+ "subtype": null,
456
+ "edited": false,
457
+ "createdAt": "2024-01-25T14:00:00.000Z",
458
+ "updatedAt": "2024-01-25T14:00:00.000Z"
459
+ },
460
+ {
461
+ "id": 5,
462
+ "ts": "1706191320.200005",
463
+ "channel_id": "C2003INCIDENTS",
464
+ "user_id": "U2001ALEX",
465
+ "text": "I'm taking Incident Commander. Roles:\n- IC: Alex\n- On-call: Beth\n- DBA: Ethan\n- Comms: Fiona\n- Monitoring: Diana\n\nEveryone acknowledge your role.",
466
+ "thread_ts": "1706191200.200004",
467
+ "reply_count": 0,
468
+ "reply_users": [],
469
+ "latest_reply": null,
470
+ "subtype": null,
471
+ "edited": false,
472
+ "createdAt": "2024-01-25T14:02:00.000Z",
473
+ "updatedAt": "2024-01-25T14:02:00.000Z"
474
+ },
475
+ {
476
+ "id": 6,
477
+ "ts": "1706191380.200006",
478
+ "channel_id": "C2003INCIDENTS",
479
+ "user_id": "U2005ETHAN",
480
+ "text": "DBA acknowledged. Connecting to the cluster now. Initial diagnosis: primary node (db-prod-01) shows disk I/O errors in the system journal. The WAL (write-ahead log) partition appears full.",
481
+ "thread_ts": "1706191200.200004",
482
+ "reply_count": 0,
483
+ "reply_users": [],
484
+ "latest_reply": null,
485
+ "subtype": null,
486
+ "edited": false,
487
+ "createdAt": "2024-01-25T14:03:00.000Z",
488
+ "updatedAt": "2024-01-25T14:03:00.000Z"
489
+ },
490
+ {
491
+ "id": 7,
492
+ "ts": "1706191440.200007",
493
+ "channel_id": "C2003INCIDENTS",
494
+ "user_id": "U2004DIANA",
495
+ "text": "Monitoring acknowledged. Current impact metrics:\n- Error rate: 47% of requests returning 500s\n- Latency p99: >30s (normally 200ms)\n- Active users affected: ~12,000\n- Datadog dashboard: https://datadog.oncall-ops.example.com/incident-2024-0125",
496
+ "thread_ts": "1706191200.200004",
497
+ "reply_count": 0,
498
+ "reply_users": [],
499
+ "latest_reply": null,
500
+ "subtype": null,
501
+ "edited": false,
502
+ "createdAt": "2024-01-25T14:04:00.000Z",
503
+ "updatedAt": "2024-01-25T14:04:00.000Z"
504
+ },
505
+ {
506
+ "id": 8,
507
+ "ts": "1706191500.200008",
508
+ "channel_id": "C2003INCIDENTS",
509
+ "user_id": "U2006FIONA",
510
+ "text": "Comms acknowledged. Updating status page to 'Major Outage - Investigating'. Customer support team notified. Will send first external update in 10 minutes.",
511
+ "thread_ts": "1706191200.200004",
512
+ "reply_count": 0,
513
+ "reply_users": [],
514
+ "latest_reply": null,
515
+ "subtype": null,
516
+ "edited": false,
517
+ "createdAt": "2024-01-25T14:05:00.000Z",
518
+ "updatedAt": "2024-01-25T14:05:00.000Z"
519
+ },
520
+ {
521
+ "id": 9,
522
+ "ts": "1706191560.200009",
523
+ "channel_id": "C2003INCIDENTS",
524
+ "user_id": "U2003CHRIS",
525
+ "text": "Secondary on-call acknowledged. I'm checking the failover configuration. The automatic failover to db-prod-02 did NOT trigger. Investigating why.",
526
+ "thread_ts": "1706191200.200004",
527
+ "reply_count": 0,
528
+ "reply_users": [],
529
+ "latest_reply": null,
530
+ "subtype": null,
531
+ "edited": false,
532
+ "createdAt": "2024-01-25T14:06:00.000Z",
533
+ "updatedAt": "2024-01-25T14:06:00.000Z"
534
+ },
535
+ {
536
+ "id": 10,
537
+ "ts": "1706191800.200010",
538
+ "channel_id": "C2003INCIDENTS",
539
+ "user_id": "U2005ETHAN",
540
+ "text": "Root cause identified: the WAL archiving process was stuck due to a full archive destination disk. WAL files accumulated on the primary until the WAL partition hit 100%. Postgres then refused all write connections.\n\nImmediate action: I'm clearing space on the archive destination now.",
541
+ "thread_ts": "1706191200.200004",
542
+ "reply_count": 0,
543
+ "reply_users": [],
544
+ "latest_reply": null,
545
+ "subtype": null,
546
+ "edited": false,
547
+ "createdAt": "2024-01-25T14:10:00.000Z",
548
+ "updatedAt": "2024-01-25T14:10:00.000Z"
549
+ },
550
+ {
551
+ "id": 11,
552
+ "ts": "1706191920.200011",
553
+ "channel_id": "C2003INCIDENTS",
554
+ "user_id": "U2003CHRIS",
555
+ "text": "Found why failover didn't trigger: the Patroni health check was configured to only check connection count, not disk space. The primary was technically 'healthy' by Patroni's metrics despite being unable to accept writes. This is a configuration gap we need to fix.",
556
+ "thread_ts": "1706191200.200004",
557
+ "reply_count": 0,
558
+ "reply_users": [],
559
+ "latest_reply": null,
560
+ "subtype": null,
561
+ "edited": false,
562
+ "createdAt": "2024-01-25T14:12:00.000Z",
563
+ "updatedAt": "2024-01-25T14:12:00.000Z"
564
+ },
565
+ {
566
+ "id": 12,
567
+ "ts": "1706192100.200012",
568
+ "channel_id": "C2003INCIDENTS",
569
+ "user_id": "U2001ALEX",
570
+ "text": "Timeline update:\n- 14:00 UTC: Incident detected via PagerDuty\n- 14:02 UTC: IC assigned, roles distributed\n- 14:10 UTC: Root cause identified (WAL partition full)\n- 14:12 UTC: Failover gap identified (Patroni config)\n\nEthan, what's the ETA on clearing disk space?",
571
+ "thread_ts": "1706191200.200004",
572
+ "reply_count": 0,
573
+ "reply_users": [],
574
+ "latest_reply": null,
575
+ "subtype": null,
576
+ "edited": false,
577
+ "createdAt": "2024-01-25T14:15:00.000Z",
578
+ "updatedAt": "2024-01-25T14:15:00.000Z"
579
+ },
580
+ {
581
+ "id": 13,
582
+ "ts": "1706192220.200013",
583
+ "channel_id": "C2003INCIDENTS",
584
+ "user_id": "U2005ETHAN",
585
+ "text": "Archive destination has 200GB free now after removing old backups. WAL archiving has resumed. Current WAL backlog: 847 segments. At current archiving rate, should clear in ~8 minutes.",
586
+ "thread_ts": "1706191200.200004",
587
+ "reply_count": 0,
588
+ "reply_users": [],
589
+ "latest_reply": null,
590
+ "subtype": null,
591
+ "edited": false,
592
+ "createdAt": "2024-01-25T14:17:00.000Z",
593
+ "updatedAt": "2024-01-25T14:17:00.000Z"
594
+ },
595
+ {
596
+ "id": 14,
597
+ "ts": "1706192400.200014",
598
+ "channel_id": "C2003INCIDENTS",
599
+ "user_id": "U2004DIANA",
600
+ "text": "Monitoring update:\n- Error rate dropping: now at 31% (was 47%)\n- Some write operations starting to succeed\n- Read replicas are catching up on replication lag\n- Estimated replication lag: ~3 minutes behind primary",
601
+ "thread_ts": "1706191200.200004",
602
+ "reply_count": 0,
603
+ "reply_users": [],
604
+ "latest_reply": null,
605
+ "subtype": null,
606
+ "edited": false,
607
+ "createdAt": "2024-01-25T14:20:00.000Z",
608
+ "updatedAt": "2024-01-25T14:20:00.000Z"
609
+ },
610
+ {
611
+ "id": 15,
612
+ "ts": "1706192520.200015",
613
+ "channel_id": "C2003INCIDENTS",
614
+ "user_id": "U2006FIONA",
615
+ "text": "External status update posted: 'We have identified the issue and are implementing a fix. Some users may experience intermittent errors. We expect full resolution within 15 minutes.' Customer support has talking points.",
616
+ "thread_ts": "1706191200.200004",
617
+ "reply_count": 0,
618
+ "reply_users": [],
619
+ "latest_reply": null,
620
+ "subtype": null,
621
+ "edited": false,
622
+ "createdAt": "2024-01-25T14:22:00.000Z",
623
+ "updatedAt": "2024-01-25T14:22:00.000Z"
624
+ },
625
+ {
626
+ "id": 16,
627
+ "ts": "1706192700.200016",
628
+ "channel_id": "C2003INCIDENTS",
629
+ "user_id": "U2005ETHAN",
630
+ "text": "WAL backlog cleared. Primary is accepting all write connections normally. All connection pools are healthy. Running data integrity checks now on the affected time window.",
631
+ "thread_ts": "1706191200.200004",
632
+ "reply_count": 0,
633
+ "reply_users": [],
634
+ "latest_reply": null,
635
+ "subtype": null,
636
+ "edited": false,
637
+ "createdAt": "2024-01-25T14:25:00.000Z",
638
+ "updatedAt": "2024-01-25T14:25:00.000Z"
639
+ },
640
+ {
641
+ "id": 17,
642
+ "ts": "1706192820.200017",
643
+ "channel_id": "C2003INCIDENTS",
644
+ "user_id": "U2004DIANA",
645
+ "text": "All metrics returning to normal:\n- Error rate: 0.3% (normal baseline)\n- Latency p99: 210ms (normal)\n- Replication lag: <100ms\n- All read replicas caught up",
646
+ "thread_ts": "1706191200.200004",
647
+ "reply_count": 0,
648
+ "reply_users": [],
649
+ "latest_reply": null,
650
+ "subtype": null,
651
+ "edited": false,
652
+ "createdAt": "2024-01-25T14:27:00.000Z",
653
+ "updatedAt": "2024-01-25T14:27:00.000Z"
654
+ },
655
+ {
656
+ "id": 18,
657
+ "ts": "1706193000.200018",
658
+ "channel_id": "C2003INCIDENTS",
659
+ "user_id": "U2001ALEX",
660
+ "text": "Current status: Service is restored. Keeping incident open for 30 more minutes to monitor stability.\n\nImmediate follow-ups needed:\n1. Add disk space alerting for WAL archive destination (Ethan)\n2. Update Patroni health checks to include disk metrics (Chris)\n3. Add WAL partition monitoring to Datadog (Diana)\n4. Audit all other archive destinations for space (Ethan)\n\nPost-mortem scheduled for tomorrow 10am PT.",
661
+ "thread_ts": "1706191200.200004",
662
+ "reply_count": 0,
663
+ "reply_users": [],
664
+ "latest_reply": null,
665
+ "subtype": null,
666
+ "edited": false,
667
+ "createdAt": "2024-01-25T14:30:00.000Z",
668
+ "updatedAt": "2024-01-25T14:30:00.000Z"
669
+ },
670
+ {
671
+ "id": 19,
672
+ "ts": "1706193120.200019",
673
+ "channel_id": "C2003INCIDENTS",
674
+ "user_id": "U2002BETH",
675
+ "text": "Data integrity check update: no data loss detected. All transactions during the outage window either completed successfully or were properly rolled back. No orphaned records found.",
676
+ "thread_ts": "1706191200.200004",
677
+ "reply_count": 0,
678
+ "reply_users": [],
679
+ "latest_reply": null,
680
+ "subtype": null,
681
+ "edited": false,
682
+ "createdAt": "2024-01-25T14:32:00.000Z",
683
+ "updatedAt": "2024-01-25T14:32:00.000Z"
684
+ },
685
+ {
686
+ "id": 20,
687
+ "ts": "1706193300.200020",
688
+ "channel_id": "C2003INCIDENTS",
689
+ "user_id": "U2003CHRIS",
690
+ "text": "I've drafted the Patroni config changes. PR is up: https://github.com/oncall-ops/infra/pull/567. Adds disk_space_threshold to the health check configuration. Will deploy after review.",
691
+ "thread_ts": "1706191200.200004",
692
+ "reply_count": 0,
693
+ "reply_users": [],
694
+ "latest_reply": null,
695
+ "subtype": null,
696
+ "edited": false,
697
+ "createdAt": "2024-01-25T14:35:00.000Z",
698
+ "updatedAt": "2024-01-25T14:35:00.000Z"
699
+ },
700
+ {
701
+ "id": 21,
702
+ "ts": "1706193600.200021",
703
+ "channel_id": "C2003INCIDENTS",
704
+ "user_id": "U2006FIONA",
705
+ "text": "Status page updated to 'Resolved'. Final customer communication sent. 23 support tickets opened during the incident - support team is working through them now.",
706
+ "thread_ts": "1706191200.200004",
707
+ "reply_count": 0,
708
+ "reply_users": [],
709
+ "latest_reply": null,
710
+ "subtype": null,
711
+ "edited": false,
712
+ "createdAt": "2024-01-25T14:40:00.000Z",
713
+ "updatedAt": "2024-01-25T14:40:00.000Z"
714
+ },
715
+ {
716
+ "id": 22,
717
+ "ts": "1706195400.200022",
718
+ "channel_id": "C2003INCIDENTS",
719
+ "user_id": "U2001ALEX",
720
+ "text": "30-minute stability window complete. All systems nominal. Officially closing the active incident.\n\nIncident summary:\n- Duration: ~30 minutes (14:00 - 14:30 UTC)\n- Severity: SEV-1\n- Impact: ~12,000 users affected, write operations failed\n- Root cause: WAL archive destination disk full\n- Contributing factor: Patroni failover config didn't check disk space\n- Data loss: None\n- Follow-up items: 4 (assigned above)\n\nGreat response team. Thank you everyone.",
721
+ "thread_ts": "1706191200.200004",
722
+ "reply_count": 0,
723
+ "reply_users": [],
724
+ "latest_reply": null,
725
+ "subtype": null,
726
+ "edited": false,
727
+ "createdAt": "2024-01-25T15:10:00.000Z",
728
+ "updatedAt": "2024-01-25T15:10:00.000Z"
729
+ },
730
+ {
731
+ "id": 23,
732
+ "ts": "1706195500.200023",
733
+ "channel_id": "C2001GENERAL",
734
+ "user_id": "U2001ALEX",
735
+ "text": "Heads up: we experienced a SEV-1 database incident from 14:00-14:30 UTC. Service is fully restored with no data loss. Post-mortem tomorrow at 10am PT. Full details in #incidents.",
736
+ "thread_ts": null,
737
+ "reply_count": 0,
738
+ "reply_users": [],
739
+ "latest_reply": null,
740
+ "subtype": null,
741
+ "edited": false,
742
+ "createdAt": "2024-01-25T15:11:40.000Z",
743
+ "updatedAt": "2024-01-25T15:11:40.000Z"
744
+ },
745
+ {
746
+ "id": 24,
747
+ "ts": "1706195600.200024",
748
+ "channel_id": "C2002ENGINE",
749
+ "user_id": "U2003CHRIS",
750
+ "text": "Patroni config update PR needs review: https://github.com/oncall-ops/infra/pull/567. This adds disk space checks to the failover health check. Critical fix from today's incident.",
751
+ "thread_ts": null,
752
+ "reply_count": 1,
753
+ "reply_users": [
754
+ "U2005ETHAN"
755
+ ],
756
+ "latest_reply": "1706195700.200025",
757
+ "subtype": null,
758
+ "edited": false,
759
+ "createdAt": "2024-01-25T15:13:20.000Z",
760
+ "updatedAt": "2024-01-25T15:13:20.000Z"
761
+ },
762
+ {
763
+ "id": 25,
764
+ "ts": "1706195700.200025",
765
+ "channel_id": "C2002ENGINE",
766
+ "user_id": "U2005ETHAN",
767
+ "text": "Reviewing now. I'll also add the WAL partition size alert to the monitoring terraform module in the same PR.",
768
+ "thread_ts": "1706195600.200024",
769
+ "reply_count": 0,
770
+ "reply_users": [],
771
+ "latest_reply": null,
772
+ "subtype": null,
773
+ "edited": false,
774
+ "createdAt": "2024-01-25T15:15:00.000Z",
775
+ "updatedAt": "2024-01-25T15:15:00.000Z"
776
+ },
777
+ {
778
+ "id": 26,
779
+ "ts": "1706196000.200026",
780
+ "channel_id": "C2005ONCALL",
781
+ "user_id": "U2002BETH",
782
+ "text": "On-call log update: SEV-1 incident responded to at 14:00 UTC. Total response time: 2 minutes from alert to IC assignment. Resolution in 30 minutes. Adding to the weekly on-call summary.",
783
+ "thread_ts": null,
784
+ "reply_count": 0,
785
+ "reply_users": [],
786
+ "latest_reply": null,
787
+ "subtype": null,
788
+ "edited": false,
789
+ "createdAt": "2024-01-25T15:20:00.000Z",
790
+ "updatedAt": "2024-01-25T15:20:00.000Z"
791
+ }
792
+ ],
793
+ "threads": [
794
+ {
795
+ "id": 1,
796
+ "channel_id": "C2005ONCALL",
797
+ "thread_ts": "1706187000.200002",
798
+ "reply_count": 1,
799
+ "reply_users": [
800
+ "U2003CHRIS"
801
+ ],
802
+ "latest_reply_ts": "1706187100.200003",
803
+ "createdAt": "2024-01-25T12:50:00.000Z",
804
+ "updatedAt": "2024-01-25T12:51:40.000Z"
805
+ },
806
+ {
807
+ "id": 2,
808
+ "channel_id": "C2003INCIDENTS",
809
+ "thread_ts": "1706191200.200004",
810
+ "reply_count": 18,
811
+ "reply_users": [
812
+ "U2001ALEX",
813
+ "U2002BETH",
814
+ "U2003CHRIS",
815
+ "U2004DIANA",
816
+ "U2005ETHAN",
817
+ "U2006FIONA"
818
+ ],
819
+ "latest_reply_ts": "1706195400.200022",
820
+ "createdAt": "2024-01-25T14:00:00.000Z",
821
+ "updatedAt": "2024-01-25T15:10:00.000Z"
822
+ },
823
+ {
824
+ "id": 3,
825
+ "channel_id": "C2002ENGINE",
826
+ "thread_ts": "1706195600.200024",
827
+ "reply_count": 1,
828
+ "reply_users": [
829
+ "U2005ETHAN"
830
+ ],
831
+ "latest_reply_ts": "1706195700.200025",
832
+ "createdAt": "2024-01-25T15:13:20.000Z",
833
+ "updatedAt": "2024-01-25T15:15:00.000Z"
834
+ }
835
+ ],
836
+ "reactions": [
837
+ {
838
+ "id": 1,
839
+ "name": "rotating_light",
840
+ "message_ts": "1706191200.200004",
841
+ "channel_id": "C2003INCIDENTS",
842
+ "user_id": "U2001ALEX",
843
+ "createdAt": "2024-01-25T14:00:30.000Z",
844
+ "updatedAt": "2024-01-25T14:00:30.000Z"
845
+ },
846
+ {
847
+ "id": 2,
848
+ "name": "rotating_light",
849
+ "message_ts": "1706191200.200004",
850
+ "channel_id": "C2003INCIDENTS",
851
+ "user_id": "U2003CHRIS",
852
+ "createdAt": "2024-01-25T14:01:00.000Z",
853
+ "updatedAt": "2024-01-25T14:01:00.000Z"
854
+ },
855
+ {
856
+ "id": 3,
857
+ "name": "eyes",
858
+ "message_ts": "1706191800.200010",
859
+ "channel_id": "C2003INCIDENTS",
860
+ "user_id": "U2001ALEX",
861
+ "createdAt": "2024-01-25T14:10:30.000Z",
862
+ "updatedAt": "2024-01-25T14:10:30.000Z"
863
+ },
864
+ {
865
+ "id": 4,
866
+ "name": "white_check_mark",
867
+ "message_ts": "1706192700.200016",
868
+ "channel_id": "C2003INCIDENTS",
869
+ "user_id": "U2001ALEX",
870
+ "createdAt": "2024-01-25T14:25:30.000Z",
871
+ "updatedAt": "2024-01-25T14:25:30.000Z"
872
+ },
873
+ {
874
+ "id": 5,
875
+ "name": "white_check_mark",
876
+ "message_ts": "1706192700.200016",
877
+ "channel_id": "C2003INCIDENTS",
878
+ "user_id": "U2002BETH",
879
+ "createdAt": "2024-01-25T14:26:00.000Z",
880
+ "updatedAt": "2024-01-25T14:26:00.000Z"
881
+ },
882
+ {
883
+ "id": 6,
884
+ "name": "white_check_mark",
885
+ "message_ts": "1706192820.200017",
886
+ "channel_id": "C2003INCIDENTS",
887
+ "user_id": "U2001ALEX",
888
+ "createdAt": "2024-01-25T14:27:30.000Z",
889
+ "updatedAt": "2024-01-25T14:27:30.000Z"
890
+ },
891
+ {
892
+ "id": 7,
893
+ "name": "tada",
894
+ "message_ts": "1706195400.200022",
895
+ "channel_id": "C2003INCIDENTS",
896
+ "user_id": "U2002BETH",
897
+ "createdAt": "2024-01-25T15:10:30.000Z",
898
+ "updatedAt": "2024-01-25T15:10:30.000Z"
899
+ },
900
+ {
901
+ "id": 8,
902
+ "name": "tada",
903
+ "message_ts": "1706195400.200022",
904
+ "channel_id": "C2003INCIDENTS",
905
+ "user_id": "U2004DIANA",
906
+ "createdAt": "2024-01-25T15:11:00.000Z",
907
+ "updatedAt": "2024-01-25T15:11:00.000Z"
908
+ },
909
+ {
910
+ "id": 9,
911
+ "name": "tada",
912
+ "message_ts": "1706195400.200022",
913
+ "channel_id": "C2003INCIDENTS",
914
+ "user_id": "U2005ETHAN",
915
+ "createdAt": "2024-01-25T15:11:30.000Z",
916
+ "updatedAt": "2024-01-25T15:11:30.000Z"
917
+ },
918
+ {
919
+ "id": 10,
920
+ "name": "heart",
921
+ "message_ts": "1706195400.200022",
922
+ "channel_id": "C2003INCIDENTS",
923
+ "user_id": "U2006FIONA",
924
+ "createdAt": "2024-01-25T15:12:00.000Z",
925
+ "updatedAt": "2024-01-25T15:12:00.000Z"
926
+ },
927
+ {
928
+ "id": 11,
929
+ "name": "thumbsup",
930
+ "message_ts": "1706195600.200024",
931
+ "channel_id": "C2002ENGINE",
932
+ "user_id": "U2001ALEX",
933
+ "createdAt": "2024-01-25T15:13:40.000Z",
934
+ "updatedAt": "2024-01-25T15:13:40.000Z"
935
+ }
936
+ ],
937
+ "files": [
938
+ {
939
+ "id": 1,
940
+ "file_id": "F2000000001",
941
+ "name": "incident-timeline.md",
942
+ "title": "SEV-1 Incident Timeline - 2024-01-25",
943
+ "mimetype": "text/markdown",
944
+ "filetype": "markdown",
945
+ "size": 2048,
946
+ "user_id": "U2001ALEX",
947
+ "channel_ids": [
948
+ "C2003INCIDENTS"
949
+ ],
950
+ "url_private": "https://files.slack.com/files-pri/F2000000001/incident-timeline.md",
951
+ "content": "# SEV-1 Incident Timeline\n## 2024-01-25\n\n| Time (UTC) | Event |\n|---|---|\n| 14:00 | PagerDuty alert - primary db unreachable |\n| 14:02 | IC assigned (Alex), roles distributed |\n| 14:03 | Ethan: disk I/O errors, WAL partition full |\n| 14:06 | Chris: auto-failover did not trigger |\n| 14:10 | Root cause: WAL archive destination disk full |\n| 14:12 | Patroni config gap identified |\n| 14:17 | Archive destination cleaned, archiving resumed |\n| 14:25 | Primary accepting writes, WAL cleared |\n| 14:27 | All metrics normal |\n| 14:30 | Service fully restored |\n| 15:10 | Incident officially closed |",
952
+ "shares": {
953
+ "C2003INCIDENTS": [
954
+ "2024-01-25T15:10:00.000Z"
955
+ ]
956
+ },
957
+ "createdAt": "2024-01-25T15:10:00.000Z",
958
+ "updatedAt": "2024-01-25T15:10:00.000Z"
959
+ },
960
+ {
961
+ "id": 2,
962
+ "file_id": "F2000000002",
963
+ "name": "patroni-config-diff.txt",
964
+ "title": "Patroni Config Changes",
965
+ "mimetype": "text/plain",
966
+ "filetype": "text",
967
+ "size": 512,
968
+ "user_id": "U2003CHRIS",
969
+ "channel_ids": [
970
+ "C2002ENGINE",
971
+ "C2003INCIDENTS"
972
+ ],
973
+ "url_private": "https://files.slack.com/files-pri/F2000000002/patroni-config-diff.txt",
974
+ "content": "--- a/patroni/config.yml\n+++ b/patroni/config.yml\n@@ -15,6 +15,10 @@ postgresql:\n parameters:\n max_connections: 200\n shared_buffers: 8GB\n+ watchdog:\n+ disk_space:\n+ wal_partition_threshold: 80\n+ archive_destination_threshold: 70\n callbacks:\n on_start: /scripts/on_start.sh",
975
+ "shares": {
976
+ "C2002ENGINE": [
977
+ "2024-01-25T15:13:20.000Z"
978
+ ],
979
+ "C2003INCIDENTS": [
980
+ "2024-01-25T14:35:00.000Z"
981
+ ]
982
+ },
983
+ "createdAt": "2024-01-25T14:35:00.000Z",
984
+ "updatedAt": "2024-01-25T15:13:20.000Z"
985
+ }
986
+ ],
987
+ "emojis": [
988
+ {
989
+ "id": 1,
990
+ "name": "sev1",
991
+ "url": "https://emoji.slack-edge.com/sev1.png",
992
+ "is_alias": false,
993
+ "alias_for": null,
994
+ "createdAt": "2024-01-01T00:00:00.000Z",
995
+ "updatedAt": "2024-01-01T00:00:00.000Z"
996
+ },
997
+ {
998
+ "id": 2,
999
+ "name": "sev2",
1000
+ "url": "https://emoji.slack-edge.com/sev2.png",
1001
+ "is_alias": false,
1002
+ "alias_for": null,
1003
+ "createdAt": "2024-01-01T00:00:00.000Z",
1004
+ "updatedAt": "2024-01-01T00:00:00.000Z"
1005
+ },
1006
+ {
1007
+ "id": 3,
1008
+ "name": "incident",
1009
+ "url": "https://emoji.slack-edge.com/incident.png",
1010
+ "is_alias": true,
1011
+ "alias_for": "rotating_light",
1012
+ "createdAt": "2024-01-01T00:00:00.000Z",
1013
+ "updatedAt": "2024-01-01T00:00:00.000Z"
1014
+ }
1015
+ ],
1016
+ "pins": [],
1017
+ "userGroups": [],
1018
+ "bookmarks": [],
1019
+ "scheduledMessages": [],
1020
+ "reminders": []
1021
+ }