@sunaiva/gate 1.0.0 → 1.1.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 (76) hide show
  1. package/BUSINESS_LICENSE.md +70 -0
  2. package/CHANGELOG.md +148 -0
  3. package/LICENSE +0 -0
  4. package/README.md +411 -27
  5. package/dist/config/defaults.d.ts +22 -1
  6. package/dist/config/defaults.d.ts.map +1 -1
  7. package/dist/config/defaults.js +56 -8
  8. package/dist/config/defaults.js.map +1 -1
  9. package/dist/config/loader.d.ts +0 -0
  10. package/dist/config/loader.d.ts.map +1 -1
  11. package/dist/config/loader.js +24 -6
  12. package/dist/config/loader.js.map +1 -1
  13. package/dist/engine/backend-client.d.ts +58 -0
  14. package/dist/engine/backend-client.d.ts.map +1 -0
  15. package/dist/engine/backend-client.js +287 -0
  16. package/dist/engine/backend-client.js.map +1 -0
  17. package/dist/engine/hmac-verifier.d.ts +33 -0
  18. package/dist/engine/hmac-verifier.d.ts.map +1 -0
  19. package/dist/engine/hmac-verifier.js +161 -0
  20. package/dist/engine/hmac-verifier.js.map +1 -0
  21. package/dist/engine/immutability.d.ts +59 -0
  22. package/dist/engine/immutability.d.ts.map +1 -0
  23. package/dist/engine/immutability.js +129 -0
  24. package/dist/engine/immutability.js.map +1 -0
  25. package/dist/engine/pattern-matcher.d.ts +13 -0
  26. package/dist/engine/pattern-matcher.d.ts.map +1 -1
  27. package/dist/engine/pattern-matcher.js +85 -17
  28. package/dist/engine/pattern-matcher.js.map +1 -1
  29. package/dist/engine/rule-engine.d.ts +62 -1
  30. package/dist/engine/rule-engine.d.ts.map +1 -1
  31. package/dist/engine/rule-engine.js +222 -12
  32. package/dist/engine/rule-engine.js.map +1 -1
  33. package/dist/engine/session-state.d.ts +0 -0
  34. package/dist/engine/session-state.d.ts.map +1 -1
  35. package/dist/engine/session-state.js +8 -2
  36. package/dist/engine/session-state.js.map +1 -1
  37. package/dist/engine/ship-confidence-gate.d.ts +184 -0
  38. package/dist/engine/ship-confidence-gate.d.ts.map +1 -0
  39. package/dist/engine/ship-confidence-gate.js +768 -0
  40. package/dist/engine/ship-confidence-gate.js.map +1 -0
  41. package/dist/index.d.ts +0 -0
  42. package/dist/index.d.ts.map +0 -0
  43. package/dist/index.js +289 -2
  44. package/dist/index.js.map +1 -1
  45. package/dist/rules/categories.json +0 -0
  46. package/dist/rules/presets.json +0 -0
  47. package/dist/rules/rules.json +200 -100
  48. package/dist/tools/audit.d.ts +6 -0
  49. package/dist/tools/audit.d.ts.map +1 -1
  50. package/dist/tools/audit.js +43 -6
  51. package/dist/tools/audit.js.map +1 -1
  52. package/dist/tools/bypass.d.ts +0 -0
  53. package/dist/tools/bypass.d.ts.map +1 -1
  54. package/dist/tools/bypass.js +50 -6
  55. package/dist/tools/bypass.js.map +1 -1
  56. package/dist/tools/rules.d.ts +0 -0
  57. package/dist/tools/rules.d.ts.map +0 -0
  58. package/dist/tools/rules.js +0 -0
  59. package/dist/tools/rules.js.map +0 -0
  60. package/dist/tools/ship-confidence.d.ts +11 -0
  61. package/dist/tools/ship-confidence.d.ts.map +1 -0
  62. package/dist/tools/ship-confidence.js +42 -0
  63. package/dist/tools/ship-confidence.js.map +1 -0
  64. package/dist/tools/update.d.ts +0 -0
  65. package/dist/tools/update.d.ts.map +1 -1
  66. package/dist/tools/update.js +45 -9
  67. package/dist/tools/update.js.map +1 -1
  68. package/dist/tools/validate.d.ts +0 -0
  69. package/dist/tools/validate.d.ts.map +1 -1
  70. package/dist/tools/validate.js +56 -4
  71. package/dist/tools/validate.js.map +1 -1
  72. package/dist/types/backend.d.ts +69 -0
  73. package/dist/types/backend.d.ts.map +1 -0
  74. package/dist/types/backend.js +18 -0
  75. package/dist/types/backend.js.map +1 -0
  76. package/package.json +11 -3
@@ -7,6 +7,7 @@
7
7
  "enforcement": "constitutional",
8
8
  "gate_type": "pre-action",
9
9
  "severity": "block",
10
+ "detection_pattern": "Detects: Stripe charges, PayPal payments, checkout URLs, credit card forms, subscription signups, Buy Now buttons, in-app purchases, recurring billing setup",
10
11
  "example_blocked": "Agent attempts to subscribe to a $5,000/yr software license on behalf of the user",
11
12
  "example_allowed": "Agent presents purchase options with pricing and asks for human approval before proceeding",
12
13
  "tags": [
@@ -21,7 +22,7 @@
21
22
  "full-suite",
22
23
  "minimal"
23
24
  ],
24
- "detection_pattern": "[server-side]"
25
+ "backend_required": false
25
26
  },
26
27
  {
27
28
  "id": "fin-002",
@@ -31,6 +32,7 @@
31
32
  "enforcement": "constitutional",
32
33
  "gate_type": "pre-action",
33
34
  "severity": "block",
35
+ "detection_pattern": "Detects: cumulative spend tracking, API cost estimates, cloud billing events, token usage costs, service invoices exceeding budget threshold",
34
36
  "example_blocked": "Agent triggers 35 parallel Gemini API workers totalling $800 in one week without billing cap",
35
37
  "example_allowed": "Agent estimates API cost before run, confirms it is within budget, then proceeds",
36
38
  "tags": [
@@ -44,7 +46,7 @@
44
46
  "financial-protection",
45
47
  "full-suite"
46
48
  ],
47
- "detection_pattern": "[server-side]"
49
+ "backend_required": false
48
50
  },
49
51
  {
50
52
  "id": "fin-003",
@@ -54,6 +56,7 @@
54
56
  "enforcement": "constitutional",
55
57
  "gate_type": "pre-action",
56
58
  "severity": "block",
59
+ "detection_pattern": "Detects: recurring billing setup, subscription plan changes, free trial conversions, annual plan upgrades, auto-renewal toggles",
57
60
  "example_blocked": "Agent upgrades a free Slack plan to Business+ without user confirmation",
58
61
  "example_allowed": "Agent presents upgrade options and cost impact, waits for explicit approval before clicking upgrade",
59
62
  "tags": [
@@ -65,7 +68,7 @@
65
68
  "financial-protection",
66
69
  "full-suite"
67
70
  ],
68
- "detection_pattern": "[server-side]"
71
+ "backend_required": false
69
72
  },
70
73
  {
71
74
  "id": "fin-004",
@@ -75,6 +78,7 @@
75
78
  "enforcement": "constitutional",
76
79
  "gate_type": "pre-action",
77
80
  "severity": "block",
81
+ "detection_pattern": "Detects: wallet addresses, ETH/BTC/USDC transfers, DeFi interactions, NFT purchases, gas fee submissions, seed phrase usage",
78
82
  "example_blocked": "Agent sends 0.5 ETH to a contract address during an automated DeFi strategy",
79
83
  "example_allowed": "Agent prepares transaction details for human review and requires signed confirmation before any transfer",
80
84
  "tags": [
@@ -87,7 +91,7 @@
87
91
  "financial-protection",
88
92
  "full-suite"
89
93
  ],
90
- "detection_pattern": "[server-side]"
94
+ "backend_required": false
91
95
  },
92
96
  {
93
97
  "id": "fin-005",
@@ -108,7 +112,8 @@
108
112
  "financial-protection",
109
113
  "full-suite"
110
114
  ],
111
- "detection_pattern": "[server-side]"
115
+ "detection_pattern": "[server-side]",
116
+ "backend_required": true
112
117
  },
113
118
  {
114
119
  "id": "fin-006",
@@ -129,7 +134,8 @@
129
134
  "financial-protection",
130
135
  "full-suite"
131
136
  ],
132
- "detection_pattern": "[server-side]"
137
+ "detection_pattern": "[server-side]",
138
+ "backend_required": true
133
139
  },
134
140
  {
135
141
  "id": "fin-007",
@@ -151,7 +157,8 @@
151
157
  "full-suite",
152
158
  "developer-safety"
153
159
  ],
154
- "detection_pattern": "[server-side]"
160
+ "detection_pattern": "[server-side]",
161
+ "backend_required": true
155
162
  },
156
163
  {
157
164
  "id": "fin-008",
@@ -161,6 +168,7 @@
161
168
  "enforcement": "constitutional",
162
169
  "gate_type": "pre-action",
163
170
  "severity": "block",
171
+ "detection_pattern": "Detects: bank routing numbers, SWIFT codes, ACH batch files, wire transfer form submissions, IBAN entries, banking API payment calls",
164
172
  "example_blocked": "Agent submits ACH payroll file containing $250,000 in transfers after misreading a payroll spreadsheet",
165
173
  "example_allowed": "Agent prepares wire transfer details for human review — no submission occurs without signed approval",
166
174
  "tags": [
@@ -173,7 +181,7 @@
173
181
  "full-suite",
174
182
  "minimal"
175
183
  ],
176
- "detection_pattern": "[server-side]"
184
+ "backend_required": false
177
185
  },
178
186
  {
179
187
  "id": "fin-009",
@@ -183,6 +191,7 @@
183
191
  "enforcement": "constitutional",
184
192
  "gate_type": "pre-action",
185
193
  "severity": "block",
194
+ "detection_pattern": "Detects: Google Ads campaign creation, Meta Ads budget changes, TikTok ad launches, LinkedIn ad spend, programmatic bid submissions",
186
195
  "example_blocked": "Agent launches a Google Ads campaign with $5,000 daily budget after misinterpreting targeting instructions",
187
196
  "example_allowed": "Agent sets up campaign draft, presents estimated spend, and activates only after explicit budget approval",
188
197
  "tags": [
@@ -194,7 +203,7 @@
194
203
  "financial-protection",
195
204
  "full-suite"
196
205
  ],
197
- "detection_pattern": "[server-side]"
206
+ "backend_required": false
198
207
  },
199
208
  {
200
209
  "id": "fin-010",
@@ -216,7 +225,8 @@
216
225
  "full-suite",
217
226
  "developer-safety"
218
227
  ],
219
- "detection_pattern": "[server-side]"
228
+ "detection_pattern": "[server-side]",
229
+ "backend_required": true
220
230
  },
221
231
  {
222
232
  "id": "fin-011",
@@ -237,7 +247,8 @@
237
247
  "financial-protection",
238
248
  "full-suite"
239
249
  ],
240
- "detection_pattern": "[server-side]"
250
+ "detection_pattern": "[server-side]",
251
+ "backend_required": true
241
252
  },
242
253
  {
243
254
  "id": "fin-012",
@@ -259,7 +270,8 @@
259
270
  "financial-protection",
260
271
  "full-suite"
261
272
  ],
262
- "detection_pattern": "[server-side]"
273
+ "detection_pattern": "[server-side]",
274
+ "backend_required": true
263
275
  },
264
276
  {
265
277
  "id": "dat-001",
@@ -269,6 +281,7 @@
269
281
  "enforcement": "constitutional",
270
282
  "gate_type": "pre-action",
271
283
  "severity": "block",
284
+ "detection_pattern": "Detects: API key patterns (sk-ant, AKIA, ghp_, Bearer tokens), password fields in logs, secret environment variables in stdout, credential strings in commit diffs",
272
285
  "example_blocked": "Agent logs full Stripe secret key to a public Cloudflare Worker debug endpoint",
273
286
  "example_allowed": "Agent references credentials by variable name only, uses secret manager references, never logs actual values",
274
287
  "tags": [
@@ -282,7 +295,7 @@
282
295
  "full-suite",
283
296
  "minimal"
284
297
  ],
285
- "detection_pattern": "[server-side]"
298
+ "backend_required": false
286
299
  },
287
300
  {
288
301
  "id": "dat-002",
@@ -292,6 +305,7 @@
292
305
  "enforcement": "constitutional",
293
306
  "gate_type": "pre-action",
294
307
  "severity": "block",
308
+ "detection_pattern": "Detects: names + email combinations, SSNs, passport numbers, date of birth fields, health identifiers, financial account numbers, geolocation data",
295
309
  "example_blocked": "Agent scrapes contact page and stores 500 visitor email addresses in a public Google Sheet",
296
310
  "example_allowed": "Agent collects only name and email for lead form, stores encrypted in approved database, confirms storage policy before proceeding",
297
311
  "tags": [
@@ -304,7 +318,7 @@
304
318
  "essential",
305
319
  "full-suite"
306
320
  ],
307
- "detection_pattern": "[server-side]"
321
+ "backend_required": false
308
322
  },
309
323
  {
310
324
  "id": "dat-003",
@@ -326,7 +340,8 @@
326
340
  "developer-safety",
327
341
  "full-suite"
328
342
  ],
329
- "detection_pattern": "[server-side]"
343
+ "detection_pattern": "[server-side]",
344
+ "backend_required": true
330
345
  },
331
346
  {
332
347
  "id": "dat-004",
@@ -336,6 +351,7 @@
336
351
  "enforcement": "constitutional",
337
352
  "gate_type": "pre-action",
338
353
  "severity": "block",
354
+ "detection_pattern": "Detects: API key patterns in git diffs, hardcoded secrets in source files, keys pasted into chat logs, secrets in PR descriptions, env vars echoed to stdout",
339
355
  "example_blocked": "Agent commits hardcoded Stripe secret key directly into index.js before pushing to GitHub",
340
356
  "example_allowed": "Agent uses environment variable references and secret manager calls, never hardcodes values",
341
357
  "tags": [
@@ -349,7 +365,7 @@
349
365
  "developer-safety",
350
366
  "full-suite"
351
367
  ],
352
- "detection_pattern": "[server-side]"
368
+ "backend_required": false
353
369
  },
354
370
  {
355
371
  "id": "dat-005",
@@ -372,7 +388,8 @@
372
388
  "developer-safety",
373
389
  "full-suite"
374
390
  ],
375
- "detection_pattern": "[server-side]"
391
+ "detection_pattern": "[server-side]",
392
+ "backend_required": true
376
393
  },
377
394
  {
378
395
  "id": "dat-006",
@@ -392,7 +409,8 @@
392
409
  "preset_groups": [
393
410
  "full-suite"
394
411
  ],
395
- "detection_pattern": "[server-side]"
412
+ "detection_pattern": "[server-side]",
413
+ "backend_required": true
396
414
  },
397
415
  {
398
416
  "id": "dat-007",
@@ -414,7 +432,8 @@
414
432
  "developer-safety",
415
433
  "full-suite"
416
434
  ],
417
- "detection_pattern": "[server-side]"
435
+ "detection_pattern": "[server-side]",
436
+ "backend_required": true
418
437
  },
419
438
  {
420
439
  "id": "dat-008",
@@ -434,7 +453,8 @@
434
453
  "preset_groups": [
435
454
  "full-suite"
436
455
  ],
437
- "detection_pattern": "[server-side]"
456
+ "detection_pattern": "[server-side]",
457
+ "backend_required": true
438
458
  },
439
459
  {
440
460
  "id": "dat-009",
@@ -454,7 +474,8 @@
454
474
  "preset_groups": [
455
475
  "full-suite"
456
476
  ],
457
- "detection_pattern": "[server-side]"
477
+ "detection_pattern": "[server-side]",
478
+ "backend_required": true
458
479
  },
459
480
  {
460
481
  "id": "dat-010",
@@ -464,6 +485,7 @@
464
485
  "enforcement": "constitutional",
465
486
  "gate_type": "pre-action",
466
487
  "severity": "block",
488
+ "detection_pattern": "Detects: log file deletion, audit table truncation, log rotation bypasses, timestamp modification in records, access log purging commands",
467
489
  "example_blocked": "Agent deletes application error logs to clean up a server before an audit, removing evidence of prior failures",
468
490
  "example_allowed": "Agent archives old logs to cold storage, preserving integrity, with human approval before any archival",
469
491
  "tags": [
@@ -475,7 +497,7 @@
475
497
  "developer-safety",
476
498
  "full-suite"
477
499
  ],
478
- "detection_pattern": "[server-side]"
500
+ "backend_required": false
479
501
  },
480
502
  {
481
503
  "id": "dat-011",
@@ -495,7 +517,8 @@
495
517
  "preset_groups": [
496
518
  "full-suite"
497
519
  ],
498
- "detection_pattern": "[server-side]"
520
+ "detection_pattern": "[server-side]",
521
+ "backend_required": true
499
522
  },
500
523
  {
501
524
  "id": "dat-012",
@@ -515,7 +538,8 @@
515
538
  "preset_groups": [
516
539
  "full-suite"
517
540
  ],
518
- "detection_pattern": "[server-side]"
541
+ "detection_pattern": "[server-side]",
542
+ "backend_required": true
519
543
  },
520
544
  {
521
545
  "id": "gov-001",
@@ -525,6 +549,7 @@
525
549
  "enforcement": "constitutional",
526
550
  "gate_type": "pre-action",
527
551
  "severity": "block",
552
+ "detection_pattern": "Detects: git push to main/master, Netlify production deploys, Docker production image pushes, Kubernetes production namespace changes, AWS production stack updates",
528
553
  "example_blocked": "Agent auto-deploys a breaking change to production at 2am after a failed test suite",
529
554
  "example_allowed": "Agent builds, tests, and stages the release, then presents for human approval before any production promotion",
530
555
  "tags": [
@@ -538,7 +563,7 @@
538
563
  "full-suite",
539
564
  "minimal"
540
565
  ],
541
- "detection_pattern": "[server-side]"
566
+ "backend_required": false
542
567
  },
543
568
  {
544
569
  "id": "gov-002",
@@ -548,6 +573,7 @@
548
573
  "enforcement": "constitutional",
549
574
  "gate_type": "pre-action",
550
575
  "severity": "block",
576
+ "detection_pattern": "Detects: rm -rf commands, DROP TABLE statements, git reset --hard, git clean -fd, file overwrite without backup, S3 bucket deletion, database truncation",
551
577
  "example_blocked": "Agent runs git clean -fd to tidy the repo and deletes 3 years of research reports stored in untracked files",
552
578
  "example_allowed": "Agent lists files to be deleted in a dry-run, presents list for approval, only executes after explicit confirmation",
553
579
  "tags": [
@@ -562,7 +588,7 @@
562
588
  "full-suite",
563
589
  "minimal"
564
590
  ],
565
- "detection_pattern": "[server-side]"
591
+ "backend_required": false
566
592
  },
567
593
  {
568
594
  "id": "gov-003",
@@ -583,7 +609,8 @@
583
609
  "developer-safety",
584
610
  "full-suite"
585
611
  ],
586
- "detection_pattern": "[server-side]"
612
+ "detection_pattern": "[server-side]",
613
+ "backend_required": true
587
614
  },
588
615
  {
589
616
  "id": "gov-004",
@@ -593,6 +620,7 @@
593
620
  "enforcement": "constitutional",
594
621
  "gate_type": "pre-action",
595
622
  "severity": "block",
623
+ "detection_pattern": "Detects: Cloudflare DNS API writes, Route 53 record changes, GoDaddy DNS modifications, CNAME/A/MX record updates via any registrar API",
596
624
  "example_blocked": "Agent deletes an MX record while reconfiguring email routing, taking down all inbound email for the domain",
597
625
  "example_allowed": "Agent proposes DNS changes with impact analysis, waits for explicit approval, stages changes in preview first",
598
626
  "tags": [
@@ -604,7 +632,7 @@
604
632
  "developer-safety",
605
633
  "full-suite"
606
634
  ],
607
- "detection_pattern": "[server-side]"
635
+ "backend_required": false
608
636
  },
609
637
  {
610
638
  "id": "gov-005",
@@ -614,6 +642,7 @@
614
642
  "enforcement": "constitutional",
615
643
  "gate_type": "pre-action",
616
644
  "severity": "block",
645
+ "detection_pattern": "Detects: IAM role assignment, OAuth scope escalation, admin privilege grants, GHL team member permission changes, database user privilege modifications",
617
646
  "example_blocked": "Agent grants a new team member admin privileges on the production AWS account to simplify onboarding",
618
647
  "example_allowed": "Agent proposes minimum-required role for new member, presents for approval, applies principle of least privilege",
619
648
  "tags": [
@@ -625,7 +654,7 @@
625
654
  "developer-safety",
626
655
  "full-suite"
627
656
  ],
628
- "detection_pattern": "[server-side]"
657
+ "backend_required": false
629
658
  },
630
659
  {
631
660
  "id": "gov-006",
@@ -635,6 +664,7 @@
635
664
  "enforcement": "constitutional",
636
665
  "gate_type": "pre-action",
637
666
  "severity": "block",
667
+ "detection_pattern": "Detects: DELETE /users/{id} API calls, Stripe customer deletion, GHL contact purges, workspace deactivation, account closure form submissions",
638
668
  "example_blocked": "Agent deletes a churned customer's account and all associated data, making refund impossible and violating retention policy",
639
669
  "example_allowed": "Agent flags account for review, proposes data export and anonymisation, requires two-step human confirmation before any deletion",
640
670
  "tags": [
@@ -645,7 +675,7 @@
645
675
  "preset_groups": [
646
676
  "full-suite"
647
677
  ],
648
- "detection_pattern": "[server-side]"
678
+ "backend_required": false
649
679
  },
650
680
  {
651
681
  "id": "gov-007",
@@ -666,7 +696,8 @@
666
696
  "developer-safety",
667
697
  "full-suite"
668
698
  ],
669
- "detection_pattern": "[server-side]"
699
+ "detection_pattern": "[server-side]",
700
+ "backend_required": true
670
701
  },
671
702
  {
672
703
  "id": "gov-008",
@@ -676,6 +707,7 @@
676
707
  "enforcement": "constitutional",
677
708
  "gate_type": "pre-action",
678
709
  "severity": "block",
710
+ "detection_pattern": "Detects: Instantly campaign activation, Mailchimp bulk sends, Klaviyo broadcast triggers, Twilio SMS bulk sends, LinkedIn Sales Navigator connection requests at scale",
679
711
  "example_blocked": "Agent activates a cold email campaign to 15,000 contacts without Kinan's go-ahead after preparing the sequence",
680
712
  "example_allowed": "Agent prepares campaign, shows preview, estimated reach, and cost — waits for explicit 'ship it' before any send",
681
713
  "tags": [
@@ -688,7 +720,7 @@
688
720
  "essential",
689
721
  "full-suite"
690
722
  ],
691
- "detection_pattern": "[server-side]"
723
+ "backend_required": false
692
724
  },
693
725
  {
694
726
  "id": "gov-009",
@@ -709,7 +741,8 @@
709
741
  "developer-safety",
710
742
  "full-suite"
711
743
  ],
712
- "detection_pattern": "[server-side]"
744
+ "detection_pattern": "[server-side]",
745
+ "backend_required": true
713
746
  },
714
747
  {
715
748
  "id": "gov-010",
@@ -731,7 +764,8 @@
731
764
  "developer-safety",
732
765
  "full-suite"
733
766
  ],
734
- "detection_pattern": "[server-side]"
767
+ "detection_pattern": "[server-side]",
768
+ "backend_required": true
735
769
  },
736
770
  {
737
771
  "id": "gov-011",
@@ -752,7 +786,8 @@
752
786
  "developer-safety",
753
787
  "full-suite"
754
788
  ],
755
- "detection_pattern": "[server-side]"
789
+ "detection_pattern": "[server-side]",
790
+ "backend_required": true
756
791
  },
757
792
  {
758
793
  "id": "gov-012",
@@ -762,6 +797,7 @@
762
797
  "enforcement": "constitutional",
763
798
  "gate_type": "pre-action",
764
799
  "severity": "block",
800
+ "detection_pattern": "Detects: terraform destroy, AWS CloudFormation stack deletion, GCP project deletion, Kubernetes namespace purges, Elestio service termination",
765
801
  "example_blocked": "Agent runs terraform destroy on the production environment while attempting to recreate a staging environment",
766
802
  "example_allowed": "Agent confirms backup exists, lists resources to be destroyed, receives explicit confirmation before any teardown command",
767
803
  "tags": [
@@ -774,7 +810,7 @@
774
810
  "developer-safety",
775
811
  "full-suite"
776
812
  ],
777
- "detection_pattern": "[server-side]"
813
+ "backend_required": false
778
814
  },
779
815
  {
780
816
  "id": "qlt-001",
@@ -795,7 +831,8 @@
795
831
  "developer-safety",
796
832
  "full-suite"
797
833
  ],
798
- "detection_pattern": "[server-side]"
834
+ "detection_pattern": "[server-side]",
835
+ "backend_required": true
799
836
  },
800
837
  {
801
838
  "id": "qlt-002",
@@ -817,7 +854,8 @@
817
854
  "developer-safety",
818
855
  "full-suite"
819
856
  ],
820
- "detection_pattern": "[server-side]"
857
+ "detection_pattern": "[server-side]",
858
+ "backend_required": true
821
859
  },
822
860
  {
823
861
  "id": "qlt-003",
@@ -838,7 +876,8 @@
838
876
  "developer-safety",
839
877
  "full-suite"
840
878
  ],
841
- "detection_pattern": "[server-side]"
879
+ "detection_pattern": "[server-side]",
880
+ "backend_required": true
842
881
  },
843
882
  {
844
883
  "id": "qlt-004",
@@ -859,7 +898,8 @@
859
898
  "developer-safety",
860
899
  "full-suite"
861
900
  ],
862
- "detection_pattern": "[server-side]"
901
+ "detection_pattern": "[server-side]",
902
+ "backend_required": true
863
903
  },
864
904
  {
865
905
  "id": "qlt-005",
@@ -880,7 +920,8 @@
880
920
  "developer-safety",
881
921
  "full-suite"
882
922
  ],
883
- "detection_pattern": "[server-side]"
923
+ "detection_pattern": "[server-side]",
924
+ "backend_required": true
884
925
  },
885
926
  {
886
927
  "id": "qlt-006",
@@ -901,7 +942,8 @@
901
942
  "developer-safety",
902
943
  "full-suite"
903
944
  ],
904
- "detection_pattern": "[server-side]"
945
+ "detection_pattern": "[server-side]",
946
+ "backend_required": true
905
947
  },
906
948
  {
907
949
  "id": "qlt-007",
@@ -922,7 +964,8 @@
922
964
  "developer-safety",
923
965
  "full-suite"
924
966
  ],
925
- "detection_pattern": "[server-side]"
967
+ "detection_pattern": "[server-side]",
968
+ "backend_required": true
926
969
  },
927
970
  {
928
971
  "id": "qlt-008",
@@ -943,7 +986,8 @@
943
986
  "developer-safety",
944
987
  "full-suite"
945
988
  ],
946
- "detection_pattern": "[server-side]"
989
+ "detection_pattern": "[server-side]",
990
+ "backend_required": true
947
991
  },
948
992
  {
949
993
  "id": "qlt-009",
@@ -964,7 +1008,8 @@
964
1008
  "developer-safety",
965
1009
  "full-suite"
966
1010
  ],
967
- "detection_pattern": "[server-side]"
1011
+ "detection_pattern": "[server-side]",
1012
+ "backend_required": true
968
1013
  },
969
1014
  {
970
1015
  "id": "qlt-010",
@@ -985,7 +1030,8 @@
985
1030
  "developer-safety",
986
1031
  "full-suite"
987
1032
  ],
988
- "detection_pattern": "[server-side]"
1033
+ "detection_pattern": "[server-side]",
1034
+ "backend_required": true
989
1035
  },
990
1036
  {
991
1037
  "id": "qlt-011",
@@ -1006,7 +1052,8 @@
1006
1052
  "developer-safety",
1007
1053
  "full-suite"
1008
1054
  ],
1009
- "detection_pattern": "[server-side]"
1055
+ "detection_pattern": "[server-side]",
1056
+ "backend_required": true
1010
1057
  },
1011
1058
  {
1012
1059
  "id": "qlt-012",
@@ -1027,7 +1074,8 @@
1027
1074
  "developer-safety",
1028
1075
  "full-suite"
1029
1076
  ],
1030
- "detection_pattern": "[server-side]"
1077
+ "detection_pattern": "[server-side]",
1078
+ "backend_required": true
1031
1079
  },
1032
1080
  {
1033
1081
  "id": "com-001",
@@ -1037,6 +1085,7 @@
1037
1085
  "enforcement": "constitutional",
1038
1086
  "gate_type": "pre-action",
1039
1087
  "severity": "block",
1088
+ "detection_pattern": "Detects: SMTP send commands, Gmail API message sends, Postmark/SendGrid single sends, nodemailer send calls with external recipients",
1040
1089
  "example_blocked": "Agent sends a follow-up email to 40 prospects with incorrect pricing information attached",
1041
1090
  "example_allowed": "Agent drafts email, presents for review with recipient list and subject, sends only after explicit approval",
1042
1091
  "tags": [
@@ -1048,7 +1097,7 @@
1048
1097
  "essential",
1049
1098
  "full-suite"
1050
1099
  ],
1051
- "detection_pattern": "[server-side]"
1100
+ "backend_required": false
1052
1101
  },
1053
1102
  {
1054
1103
  "id": "com-002",
@@ -1058,6 +1107,7 @@
1058
1107
  "enforcement": "constitutional",
1059
1108
  "gate_type": "pre-action",
1060
1109
  "severity": "block",
1110
+ "detection_pattern": "Detects: Twitter/X API post calls, LinkedIn share submissions, Facebook page post API, Instagram media publishes, TikTok upload completions",
1061
1111
  "example_blocked": "Agent posts a draft meme to the company LinkedIn page without review, causing brand damage",
1062
1112
  "example_allowed": "Agent prepares post with caption, image, and scheduled time — presents for approval before any publication",
1063
1113
  "tags": [
@@ -1069,7 +1119,7 @@
1069
1119
  "essential",
1070
1120
  "full-suite"
1071
1121
  ],
1072
- "detection_pattern": "[server-side]"
1122
+ "backend_required": false
1073
1123
  },
1074
1124
  {
1075
1125
  "id": "com-003",
@@ -1089,7 +1139,8 @@
1089
1139
  "preset_groups": [
1090
1140
  "full-suite"
1091
1141
  ],
1092
- "detection_pattern": "[server-side]"
1142
+ "detection_pattern": "[server-side]",
1143
+ "backend_required": true
1093
1144
  },
1094
1145
  {
1095
1146
  "id": "com-004",
@@ -1109,7 +1160,8 @@
1109
1160
  "preset_groups": [
1110
1161
  "full-suite"
1111
1162
  ],
1112
- "detection_pattern": "[server-side]"
1163
+ "detection_pattern": "[server-side]",
1164
+ "backend_required": true
1113
1165
  },
1114
1166
  {
1115
1167
  "id": "com-005",
@@ -1119,6 +1171,7 @@
1119
1171
  "enforcement": "constitutional",
1120
1172
  "gate_type": "pre-action",
1121
1173
  "severity": "block",
1174
+ "detection_pattern": "Detects: CRM-triggered customer emails, in-app messages sent to user segments, support ticket replies, automated refund communications, contract or invoice emails",
1122
1175
  "example_blocked": "Agent sends a billing dispute response email to a customer with incorrect account details",
1123
1176
  "example_allowed": "Agent drafts response, tags for human review in CRM, sends only after team member approves",
1124
1177
  "tags": [
@@ -1130,7 +1183,7 @@
1130
1183
  "essential",
1131
1184
  "full-suite"
1132
1185
  ],
1133
- "detection_pattern": "[server-side]"
1186
+ "backend_required": false
1134
1187
  },
1135
1188
  {
1136
1189
  "id": "com-006",
@@ -1140,6 +1193,7 @@
1140
1193
  "enforcement": "constitutional",
1141
1194
  "gate_type": "pre-action",
1142
1195
  "severity": "block",
1196
+ "detection_pattern": "Detects: PR Newswire distribution API, Business Wire submissions, media contact outreach with embargo dates, investor relations email sends",
1143
1197
  "example_blocked": "Agent distributes a press release with incorrect acquisition details to 500 journalists",
1144
1198
  "example_allowed": "Agent drafts release, routes to legal and executive review, distributes only after sign-off",
1145
1199
  "tags": [
@@ -1150,7 +1204,7 @@
1150
1204
  "preset_groups": [
1151
1205
  "full-suite"
1152
1206
  ],
1153
- "detection_pattern": "[server-side]"
1207
+ "backend_required": false
1154
1208
  },
1155
1209
  {
1156
1210
  "id": "com-007",
@@ -1160,6 +1214,7 @@
1160
1214
  "enforcement": "constitutional",
1161
1215
  "gate_type": "pre-action",
1162
1216
  "severity": "block",
1217
+ "detection_pattern": "Detects: DocuSign envelope sends, HelloSign request submissions, contract PDF emails, NDA generation and distribution, terms acceptance flows",
1163
1218
  "example_blocked": "Agent sends an NDA with incorrect jurisdiction and missing indemnity clauses to a potential partner",
1164
1219
  "example_allowed": "Agent generates contract draft from approved template, routes for legal review, sends via DocuSign only after approval",
1165
1220
  "tags": [
@@ -1170,7 +1225,7 @@
1170
1225
  "preset_groups": [
1171
1226
  "full-suite"
1172
1227
  ],
1173
- "detection_pattern": "[server-side]"
1228
+ "backend_required": false
1174
1229
  },
1175
1230
  {
1176
1231
  "id": "com-008",
@@ -1190,7 +1245,8 @@
1190
1245
  "preset_groups": [
1191
1246
  "full-suite"
1192
1247
  ],
1193
- "detection_pattern": "[server-side]"
1248
+ "detection_pattern": "[server-side]",
1249
+ "backend_required": true
1194
1250
  },
1195
1251
  {
1196
1252
  "id": "com-009",
@@ -1200,6 +1256,7 @@
1200
1256
  "enforcement": "constitutional",
1201
1257
  "gate_type": "pre-action",
1202
1258
  "severity": "block",
1259
+ "detection_pattern": "Detects: Instantly.ai campaign activation, Lemlist sequence launch, Apollo.io sequence start, Outreach.io sequence enable, HubSpot sequence activation",
1203
1260
  "example_blocked": "Agent activates a 7-step cold email sequence to 2,000 contacts after completing sequence setup",
1204
1261
  "example_allowed": "Agent presents sequence, sample email, prospect count, and projected metrics, waits for explicit 'launch it' before activation",
1205
1262
  "tags": [
@@ -1211,7 +1268,7 @@
1211
1268
  "essential",
1212
1269
  "full-suite"
1213
1270
  ],
1214
- "detection_pattern": "[server-side]"
1271
+ "backend_required": false
1215
1272
  },
1216
1273
  {
1217
1274
  "id": "com-010",
@@ -1231,7 +1288,8 @@
1231
1288
  "preset_groups": [
1232
1289
  "full-suite"
1233
1290
  ],
1234
- "detection_pattern": "[server-side]"
1291
+ "detection_pattern": "[server-side]",
1292
+ "backend_required": true
1235
1293
  },
1236
1294
  {
1237
1295
  "id": "com-011",
@@ -1241,6 +1299,7 @@
1241
1299
  "enforcement": "constitutional",
1242
1300
  "gate_type": "pre-action",
1243
1301
  "severity": "block",
1302
+ "detection_pattern": "Detects: emails sent with From: header matching a named human's address by an automated system, chat messages attributed to human staff members, voice calls pretending to be human",
1244
1303
  "example_blocked": "Agent sends cold emails as 'John Smith, CEO' without John's knowledge or a disclosure that the message was AI-assisted",
1245
1304
  "example_allowed": "Agent sends as a named AI assistant, or human reviews and sends from their own account with AI-assisted drafting clearly noted",
1246
1305
  "tags": [
@@ -1251,7 +1310,7 @@
1251
1310
  "preset_groups": [
1252
1311
  "full-suite"
1253
1312
  ],
1254
- "detection_pattern": "[server-side]"
1313
+ "backend_required": false
1255
1314
  },
1256
1315
  {
1257
1316
  "id": "com-012",
@@ -1271,7 +1330,8 @@
1271
1330
  "preset_groups": [
1272
1331
  "full-suite"
1273
1332
  ],
1274
- "detection_pattern": "[server-side]"
1333
+ "detection_pattern": "[server-side]",
1334
+ "backend_required": true
1275
1335
  },
1276
1336
  {
1277
1337
  "id": "know-001",
@@ -1292,7 +1352,8 @@
1292
1352
  "developer-safety",
1293
1353
  "full-suite"
1294
1354
  ],
1295
- "detection_pattern": "[server-side]"
1355
+ "detection_pattern": "[server-side]",
1356
+ "backend_required": true
1296
1357
  },
1297
1358
  {
1298
1359
  "id": "know-002",
@@ -1312,7 +1373,8 @@
1312
1373
  "preset_groups": [
1313
1374
  "full-suite"
1314
1375
  ],
1315
- "detection_pattern": "[server-side]"
1376
+ "detection_pattern": "[server-side]",
1377
+ "backend_required": true
1316
1378
  },
1317
1379
  {
1318
1380
  "id": "know-003",
@@ -1332,7 +1394,8 @@
1332
1394
  "preset_groups": [
1333
1395
  "full-suite"
1334
1396
  ],
1335
- "detection_pattern": "[server-side]"
1397
+ "detection_pattern": "[server-side]",
1398
+ "backend_required": true
1336
1399
  },
1337
1400
  {
1338
1401
  "id": "know-004",
@@ -1353,7 +1416,8 @@
1353
1416
  "developer-safety",
1354
1417
  "full-suite"
1355
1418
  ],
1356
- "detection_pattern": "[server-side]"
1419
+ "detection_pattern": "[server-side]",
1420
+ "backend_required": true
1357
1421
  },
1358
1422
  {
1359
1423
  "id": "know-005",
@@ -1374,7 +1438,8 @@
1374
1438
  "developer-safety",
1375
1439
  "full-suite"
1376
1440
  ],
1377
- "detection_pattern": "[server-side]"
1441
+ "detection_pattern": "[server-side]",
1442
+ "backend_required": true
1378
1443
  },
1379
1444
  {
1380
1445
  "id": "know-006",
@@ -1395,7 +1460,8 @@
1395
1460
  "essential",
1396
1461
  "full-suite"
1397
1462
  ],
1398
- "detection_pattern": "[server-side]"
1463
+ "detection_pattern": "[server-side]",
1464
+ "backend_required": true
1399
1465
  },
1400
1466
  {
1401
1467
  "id": "know-007",
@@ -1416,7 +1482,8 @@
1416
1482
  "developer-safety",
1417
1483
  "full-suite"
1418
1484
  ],
1419
- "detection_pattern": "[server-side]"
1485
+ "detection_pattern": "[server-side]",
1486
+ "backend_required": true
1420
1487
  },
1421
1488
  {
1422
1489
  "id": "know-008",
@@ -1437,7 +1504,8 @@
1437
1504
  "developer-safety",
1438
1505
  "full-suite"
1439
1506
  ],
1440
- "detection_pattern": "[server-side]"
1507
+ "detection_pattern": "[server-side]",
1508
+ "backend_required": true
1441
1509
  },
1442
1510
  {
1443
1511
  "id": "know-009",
@@ -1447,6 +1515,7 @@
1447
1515
  "enforcement": "constitutional",
1448
1516
  "gate_type": "post-action",
1449
1517
  "severity": "block",
1518
+ "detection_pattern": "Detects: market size claims without cited research, performance benchmarks not sourced to a test run, conversion rates stated as fact without underlying data",
1450
1519
  "example_blocked": "Agent writes '73% of users prefer AI receptionists' in a sales document without any survey or research backing",
1451
1520
  "example_allowed": "Agent presents actual research data with source citation, or clearly labels projections as 'estimated' or 'modelled'",
1452
1521
  "tags": [
@@ -1457,7 +1526,7 @@
1457
1526
  "preset_groups": [
1458
1527
  "full-suite"
1459
1528
  ],
1460
- "detection_pattern": "[server-side]"
1529
+ "backend_required": false
1461
1530
  },
1462
1531
  {
1463
1532
  "id": "know-010",
@@ -1477,7 +1546,8 @@
1477
1546
  "preset_groups": [
1478
1547
  "full-suite"
1479
1548
  ],
1480
- "detection_pattern": "[server-side]"
1549
+ "detection_pattern": "[server-side]",
1550
+ "backend_required": true
1481
1551
  },
1482
1552
  {
1483
1553
  "id": "know-011",
@@ -1497,7 +1567,8 @@
1497
1567
  "preset_groups": [
1498
1568
  "full-suite"
1499
1569
  ],
1500
- "detection_pattern": "[server-side]"
1570
+ "detection_pattern": "[server-side]",
1571
+ "backend_required": true
1501
1572
  },
1502
1573
  {
1503
1574
  "id": "know-012",
@@ -1518,7 +1589,8 @@
1518
1589
  "developer-safety",
1519
1590
  "full-suite"
1520
1591
  ],
1521
- "detection_pattern": "[server-side]"
1592
+ "detection_pattern": "[server-side]",
1593
+ "backend_required": true
1522
1594
  },
1523
1595
  {
1524
1596
  "id": "res-001",
@@ -1540,7 +1612,8 @@
1540
1612
  "resource-protection",
1541
1613
  "full-suite"
1542
1614
  ],
1543
- "detection_pattern": "[server-side]"
1615
+ "detection_pattern": "[server-side]",
1616
+ "backend_required": true
1544
1617
  },
1545
1618
  {
1546
1619
  "id": "res-002",
@@ -1563,7 +1636,8 @@
1563
1636
  "resource-protection",
1564
1637
  "full-suite"
1565
1638
  ],
1566
- "detection_pattern": "[server-side]"
1639
+ "detection_pattern": "[server-side]",
1640
+ "backend_required": true
1567
1641
  },
1568
1642
  {
1569
1643
  "id": "res-003",
@@ -1585,7 +1659,8 @@
1585
1659
  "resource-protection",
1586
1660
  "full-suite"
1587
1661
  ],
1588
- "detection_pattern": "[server-side]"
1662
+ "detection_pattern": "[server-side]",
1663
+ "backend_required": true
1589
1664
  },
1590
1665
  {
1591
1666
  "id": "res-004",
@@ -1607,7 +1682,8 @@
1607
1682
  "resource-protection",
1608
1683
  "full-suite"
1609
1684
  ],
1610
- "detection_pattern": "[server-side]"
1685
+ "detection_pattern": "[server-side]",
1686
+ "backend_required": true
1611
1687
  },
1612
1688
  {
1613
1689
  "id": "res-005",
@@ -1628,7 +1704,8 @@
1628
1704
  "resource-protection",
1629
1705
  "full-suite"
1630
1706
  ],
1631
- "detection_pattern": "[server-side]"
1707
+ "detection_pattern": "[server-side]",
1708
+ "backend_required": true
1632
1709
  },
1633
1710
  {
1634
1711
  "id": "res-006",
@@ -1649,7 +1726,8 @@
1649
1726
  "resource-protection",
1650
1727
  "full-suite"
1651
1728
  ],
1652
- "detection_pattern": "[server-side]"
1729
+ "detection_pattern": "[server-side]",
1730
+ "backend_required": true
1653
1731
  },
1654
1732
  {
1655
1733
  "id": "res-007",
@@ -1671,7 +1749,8 @@
1671
1749
  "resource-protection",
1672
1750
  "full-suite"
1673
1751
  ],
1674
- "detection_pattern": "[server-side]"
1752
+ "detection_pattern": "[server-side]",
1753
+ "backend_required": true
1675
1754
  },
1676
1755
  {
1677
1756
  "id": "res-008",
@@ -1693,7 +1772,8 @@
1693
1772
  "resource-protection",
1694
1773
  "full-suite"
1695
1774
  ],
1696
- "detection_pattern": "[server-side]"
1775
+ "detection_pattern": "[server-side]",
1776
+ "backend_required": true
1697
1777
  },
1698
1778
  {
1699
1779
  "id": "res-009",
@@ -1715,7 +1795,8 @@
1715
1795
  "resource-protection",
1716
1796
  "full-suite"
1717
1797
  ],
1718
- "detection_pattern": "[server-side]"
1798
+ "detection_pattern": "[server-side]",
1799
+ "backend_required": true
1719
1800
  },
1720
1801
  {
1721
1802
  "id": "res-010",
@@ -1736,7 +1817,8 @@
1736
1817
  "resource-protection",
1737
1818
  "full-suite"
1738
1819
  ],
1739
- "detection_pattern": "[server-side]"
1820
+ "detection_pattern": "[server-side]",
1821
+ "backend_required": true
1740
1822
  },
1741
1823
  {
1742
1824
  "id": "res-011",
@@ -1758,7 +1840,8 @@
1758
1840
  "resource-protection",
1759
1841
  "full-suite"
1760
1842
  ],
1761
- "detection_pattern": "[server-side]"
1843
+ "detection_pattern": "[server-side]",
1844
+ "backend_required": true
1762
1845
  },
1763
1846
  {
1764
1847
  "id": "res-012",
@@ -1780,7 +1863,8 @@
1780
1863
  "resource-protection",
1781
1864
  "full-suite"
1782
1865
  ],
1783
- "detection_pattern": "[server-side]"
1866
+ "detection_pattern": "[server-side]",
1867
+ "backend_required": true
1784
1868
  },
1785
1869
  {
1786
1870
  "id": "sec-001",
@@ -1790,6 +1874,7 @@
1790
1874
  "enforcement": "constitutional",
1791
1875
  "gate_type": "pre-action",
1792
1876
  "severity": "block",
1877
+ "detection_pattern": "Detects: print(api_key), logger.info(password), console.log(token), secret values in exception stack traces, env vars echoed to shell output",
1793
1878
  "example_blocked": "Agent logs the full contents of os.environ to debug a configuration issue, exposing all API keys in plaintext logs",
1794
1879
  "example_allowed": "Agent logs environment variable names but masks values: 'STRIPE_KEY=sk-***[masked]'",
1795
1880
  "tags": [
@@ -1802,7 +1887,7 @@
1802
1887
  "developer-safety",
1803
1888
  "full-suite"
1804
1889
  ],
1805
- "detection_pattern": "[server-side]"
1890
+ "backend_required": false
1806
1891
  },
1807
1892
  {
1808
1893
  "id": "sec-002",
@@ -1812,6 +1897,7 @@
1812
1897
  "enforcement": "constitutional",
1813
1898
  "gate_type": "pre-action",
1814
1899
  "severity": "block",
1900
+ "detection_pattern": "Detects: eval() on external input, exec() with user-provided strings, subprocess.run with unvalidated arguments, dynamic import of unverified modules",
1815
1901
  "example_blocked": "Agent executes code from a web-scraped code block directly in the production environment without sandboxing",
1816
1902
  "example_allowed": "Agent runs external code in a containerised environment with no network access and resource limits, presents output for review",
1817
1903
  "tags": [
@@ -1823,7 +1909,7 @@
1823
1909
  "developer-safety",
1824
1910
  "full-suite"
1825
1911
  ],
1826
- "detection_pattern": "[server-side]"
1912
+ "backend_required": false
1827
1913
  },
1828
1914
  {
1829
1915
  "id": "sec-003",
@@ -1844,7 +1930,8 @@
1844
1930
  "developer-safety",
1845
1931
  "full-suite"
1846
1932
  ],
1847
- "detection_pattern": "[server-side]"
1933
+ "detection_pattern": "[server-side]",
1934
+ "backend_required": true
1848
1935
  },
1849
1936
  {
1850
1937
  "id": "sec-004",
@@ -1854,6 +1941,7 @@
1854
1941
  "enforcement": "constitutional",
1855
1942
  "gate_type": "pre-action",
1856
1943
  "severity": "block",
1944
+ "detection_pattern": "Detects: sudo commands not in approved list, IAM role assumption beyond declared need, OAuth scope requests exceeding task requirements, root shell acquisition",
1857
1945
  "example_blocked": "Agent requests full S3 admin permissions to upload a single file to one bucket",
1858
1946
  "example_allowed": "Agent requests PutObject permission scoped to the specific bucket and prefix required, nothing more",
1859
1947
  "tags": [
@@ -1865,7 +1953,7 @@
1865
1953
  "developer-safety",
1866
1954
  "full-suite"
1867
1955
  ],
1868
- "detection_pattern": "[server-side]"
1956
+ "backend_required": false
1869
1957
  },
1870
1958
  {
1871
1959
  "id": "sec-005",
@@ -1886,7 +1974,8 @@
1886
1974
  "developer-safety",
1887
1975
  "full-suite"
1888
1976
  ],
1889
- "detection_pattern": "[server-side]"
1977
+ "detection_pattern": "[server-side]",
1978
+ "backend_required": true
1890
1979
  },
1891
1980
  {
1892
1981
  "id": "sec-006",
@@ -1896,6 +1985,7 @@
1896
1985
  "enforcement": "constitutional",
1897
1986
  "gate_type": "pre-action",
1898
1987
  "severity": "block",
1988
+ "detection_pattern": "Detects: JWT secret changes, OAuth provider config modifications, session store migrations, MFA bypass code additions, password hashing algorithm changes",
1899
1989
  "example_blocked": "Agent modifies JWT signing algorithm from RS256 to HS256 to simplify local development, breaking production auth",
1900
1990
  "example_allowed": "Agent proposes auth change, documents security implications, routes for security review before any implementation",
1901
1991
  "tags": [
@@ -1907,7 +1997,7 @@
1907
1997
  "developer-safety",
1908
1998
  "full-suite"
1909
1999
  ],
1910
- "detection_pattern": "[server-side]"
2000
+ "backend_required": false
1911
2001
  },
1912
2002
  {
1913
2003
  "id": "sec-007",
@@ -1928,7 +2018,8 @@
1928
2018
  "developer-safety",
1929
2019
  "full-suite"
1930
2020
  ],
1931
- "detection_pattern": "[server-side]"
2021
+ "detection_pattern": "[server-side]",
2022
+ "backend_required": true
1932
2023
  },
1933
2024
  {
1934
2025
  "id": "sec-008",
@@ -1949,7 +2040,8 @@
1949
2040
  "developer-safety",
1950
2041
  "full-suite"
1951
2042
  ],
1952
- "detection_pattern": "[server-side]"
2043
+ "detection_pattern": "[server-side]",
2044
+ "backend_required": true
1953
2045
  },
1954
2046
  {
1955
2047
  "id": "sec-009",
@@ -1971,7 +2063,8 @@
1971
2063
  "developer-safety",
1972
2064
  "full-suite"
1973
2065
  ],
1974
- "detection_pattern": "[server-side]"
2066
+ "detection_pattern": "[server-side]",
2067
+ "backend_required": true
1975
2068
  },
1976
2069
  {
1977
2070
  "id": "sec-010",
@@ -1981,6 +2074,7 @@
1981
2074
  "enforcement": "constitutional",
1982
2075
  "gate_type": "pre-action",
1983
2076
  "severity": "block",
2077
+ "detection_pattern": "Detects: API calls to Kimi, MiniMax, DeepSeek, or other banned provider endpoints; model IDs matching banned provider prefixes in routing configs",
1984
2078
  "example_blocked": "Agent routes a prompt containing proprietary code to a DeepSeek API endpoint to save costs",
1985
2079
  "example_allowed": "Agent routes all requests through approved providers (Anthropic, Google, OpenRouter with approved models only)",
1986
2080
  "tags": [
@@ -1992,7 +2086,7 @@
1992
2086
  "developer-safety",
1993
2087
  "full-suite"
1994
2088
  ],
1995
- "detection_pattern": "[server-side]"
2089
+ "backend_required": false
1996
2090
  },
1997
2091
  {
1998
2092
  "id": "sec-011",
@@ -2002,6 +2096,7 @@
2002
2096
  "enforcement": "constitutional",
2003
2097
  "gate_type": "pre-action",
2004
2098
  "severity": "block",
2099
+ "detection_pattern": "Detects: MFA disable API calls, 2FA removal from admin accounts, TOTP secret deletion, backup code exposure, auth app removal from account",
2005
2100
  "example_blocked": "Agent disables 2FA on the production GCP account to simplify a deployment script's authentication flow",
2006
2101
  "example_allowed": "Agent uses service account keys or workload identity for automation, never touches human account MFA settings",
2007
2102
  "tags": [
@@ -2013,7 +2108,7 @@
2013
2108
  "developer-safety",
2014
2109
  "full-suite"
2015
2110
  ],
2016
- "detection_pattern": "[server-side]"
2111
+ "backend_required": false
2017
2112
  },
2018
2113
  {
2019
2114
  "id": "sec-012",
@@ -2034,7 +2129,8 @@
2034
2129
  "developer-safety",
2035
2130
  "full-suite"
2036
2131
  ],
2037
- "detection_pattern": "[server-side]"
2132
+ "detection_pattern": "[server-side]",
2133
+ "backend_required": true
2038
2134
  },
2039
2135
  {
2040
2136
  "id": "cmp-001",
@@ -2054,7 +2150,8 @@
2054
2150
  "preset_groups": [
2055
2151
  "full-suite"
2056
2152
  ],
2057
- "detection_pattern": "[server-side]"
2153
+ "detection_pattern": "[server-side]",
2154
+ "backend_required": true
2058
2155
  },
2059
2156
  {
2060
2157
  "id": "cmp-002",
@@ -2064,6 +2161,7 @@
2064
2161
  "enforcement": "constitutional",
2065
2162
  "gate_type": "pre-action",
2066
2163
  "severity": "block",
2164
+ "detection_pattern": "Detects: EU resident data stored without consent record, PII processed without documented lawful basis, data transferred outside EU/EEA without Standard Contractual Clauses",
2067
2165
  "example_blocked": "Agent stores email addresses of EU website visitors for marketing without a consent record or privacy policy reference",
2068
2166
  "example_allowed": "Agent confirms consent record exists, stores only consented data, includes lawful basis in storage metadata",
2069
2167
  "tags": [
@@ -2074,7 +2172,7 @@
2074
2172
  "preset_groups": [
2075
2173
  "full-suite"
2076
2174
  ],
2077
- "detection_pattern": "[server-side]"
2175
+ "backend_required": false
2078
2176
  },
2079
2177
  {
2080
2178
  "id": "cmp-003",
@@ -2094,7 +2192,8 @@
2094
2192
  "preset_groups": [
2095
2193
  "full-suite"
2096
2194
  ],
2097
- "detection_pattern": "[server-side]"
2195
+ "detection_pattern": "[server-side]",
2196
+ "backend_required": true
2098
2197
  },
2099
2198
  {
2100
2199
  "id": "cmp-004",
@@ -2114,6 +2213,7 @@
2114
2213
  "preset_groups": [
2115
2214
  "full-suite"
2116
2215
  ],
2117
- "detection_pattern": "[server-side]"
2216
+ "detection_pattern": "[server-side]",
2217
+ "backend_required": true
2118
2218
  }
2119
2219
  ]