@titan-design/authority 0.0.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.
package/src/table.json ADDED
@@ -0,0 +1,867 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "rules": [
4
+ {
5
+ "id": "MRG-OT",
6
+ "action": "merge",
7
+ "actor": "owner-terminal",
8
+ "verdict": "allow",
9
+ "evidence": [
10
+ "E-gh"
11
+ ]
12
+ },
13
+ {
14
+ "id": "MRG-OR",
15
+ "action": "merge",
16
+ "actor": "owner-remote",
17
+ "verdict": "gate",
18
+ "resolvers": [
19
+ "owner-remote"
20
+ ],
21
+ "condition": "Read-back of repo, pull request number, head SHA and title. Resolves a coordinator or automation merge gate; no direct door.",
22
+ "evidence": [
23
+ "E-gate",
24
+ "E-prin"
25
+ ]
26
+ },
27
+ {
28
+ "id": "MRG-CO",
29
+ "action": "merge",
30
+ "actor": "coordinator",
31
+ "verdict": "gate",
32
+ "resolvers": [
33
+ "owner-terminal",
34
+ "owner-remote"
35
+ ],
36
+ "evidence": [
37
+ "E-gate",
38
+ "E-dec"
39
+ ]
40
+ },
41
+ {
42
+ "id": "MRG-WK",
43
+ "action": "merge",
44
+ "actor": "worker",
45
+ "verdict": "deny",
46
+ "evidence": [
47
+ "E-ref"
48
+ ]
49
+ },
50
+ {
51
+ "id": "MRG-HD",
52
+ "action": "merge",
53
+ "actor": "headless",
54
+ "verdict": "deny",
55
+ "evidence": [
56
+ "E-ref"
57
+ ]
58
+ },
59
+ {
60
+ "id": "MRG-AU",
61
+ "action": "merge",
62
+ "actor": "automation",
63
+ "verdict": "gate",
64
+ "resolvers": [
65
+ "owner-terminal",
66
+ "owner-remote"
67
+ ],
68
+ "condition": "Merge on green plus owner approval.",
69
+ "evidence": [
70
+ "E-gate",
71
+ "E-gh"
72
+ ]
73
+ },
74
+ {
75
+ "id": "REL-OT",
76
+ "action": "release",
77
+ "actor": "owner-terminal",
78
+ "verdict": "allow",
79
+ "condition": "Includes the first hand publish of a new package.",
80
+ "evidence": [
81
+ "E-npm"
82
+ ]
83
+ },
84
+ {
85
+ "id": "REL-OR",
86
+ "action": "release",
87
+ "actor": "owner-remote",
88
+ "verdict": "deny",
89
+ "evidence": [
90
+ "E-ref"
91
+ ]
92
+ },
93
+ {
94
+ "id": "REL-CO",
95
+ "action": "release",
96
+ "actor": "coordinator",
97
+ "verdict": "gate",
98
+ "resolvers": [
99
+ "owner-terminal"
100
+ ],
101
+ "condition": "A Version Packages pull request merge and a Worker deploy are releases.",
102
+ "evidence": [
103
+ "E-gate",
104
+ "E-dec"
105
+ ]
106
+ },
107
+ {
108
+ "id": "REL-WK",
109
+ "action": "release",
110
+ "actor": "worker",
111
+ "verdict": "deny",
112
+ "evidence": [
113
+ "E-ref"
114
+ ]
115
+ },
116
+ {
117
+ "id": "REL-HD",
118
+ "action": "release",
119
+ "actor": "headless",
120
+ "verdict": "deny",
121
+ "evidence": [
122
+ "E-ref"
123
+ ]
124
+ },
125
+ {
126
+ "id": "REL-AU",
127
+ "action": "release",
128
+ "actor": "automation",
129
+ "verdict": "allow",
130
+ "condition": "Only the release workflow on main after a merged Version Packages pull request.",
131
+ "evidence": [
132
+ "E-npm"
133
+ ]
134
+ },
135
+ {
136
+ "id": "SEC-OT",
137
+ "action": "secret-read",
138
+ "actor": "owner-terminal",
139
+ "verdict": "allow",
140
+ "condition": "Secret values are never logged.",
141
+ "evidence": []
142
+ },
143
+ {
144
+ "id": "SEC-OR",
145
+ "action": "secret-read",
146
+ "actor": "owner-remote",
147
+ "verdict": "deny",
148
+ "evidence": [
149
+ "E-ref"
150
+ ]
151
+ },
152
+ {
153
+ "id": "SEC-CO",
154
+ "action": "secret-read",
155
+ "actor": "coordinator",
156
+ "verdict": "deny",
157
+ "evidence": [
158
+ "E-ref"
159
+ ]
160
+ },
161
+ {
162
+ "id": "SEC-WK",
163
+ "action": "secret-read",
164
+ "actor": "worker",
165
+ "verdict": "deny",
166
+ "evidence": [
167
+ "E-ref"
168
+ ]
169
+ },
170
+ {
171
+ "id": "SEC-HD",
172
+ "action": "secret-read",
173
+ "actor": "headless",
174
+ "verdict": "deny",
175
+ "evidence": [
176
+ "E-ref"
177
+ ]
178
+ },
179
+ {
180
+ "id": "SEC-AU",
181
+ "action": "secret-read",
182
+ "actor": "automation",
183
+ "verdict": "allow",
184
+ "condition": "Its own scoped credential only.",
185
+ "evidence": [
186
+ "E-dec"
187
+ ]
188
+ },
189
+ {
190
+ "id": "UNT-OT",
191
+ "action": "untrusted-ingest",
192
+ "actor": "owner-terminal",
193
+ "verdict": "allow",
194
+ "condition": "The receiving session becomes tainted.",
195
+ "evidence": [
196
+ "E-dec"
197
+ ]
198
+ },
199
+ {
200
+ "id": "UNT-OR",
201
+ "action": "untrusted-ingest",
202
+ "actor": "owner-remote",
203
+ "verdict": "allow",
204
+ "condition": "The message arrives human-endorsed, never as from the human; forwarded third-party text taints.",
205
+ "evidence": [
206
+ "E-prin"
207
+ ]
208
+ },
209
+ {
210
+ "id": "UNT-CO",
211
+ "action": "untrusted-ingest",
212
+ "actor": "coordinator",
213
+ "verdict": "allow",
214
+ "condition": "The session becomes tainted.",
215
+ "evidence": [
216
+ "E-dec"
217
+ ]
218
+ },
219
+ {
220
+ "id": "UNT-WK",
221
+ "action": "untrusted-ingest",
222
+ "actor": "worker",
223
+ "verdict": "allow",
224
+ "condition": "The session becomes tainted.",
225
+ "evidence": [
226
+ "E-dec"
227
+ ]
228
+ },
229
+ {
230
+ "id": "UNT-HD",
231
+ "action": "untrusted-ingest",
232
+ "actor": "headless",
233
+ "verdict": "allow",
234
+ "condition": "Only fenced as data with no authority tools; the run is tainted from the start.",
235
+ "evidence": [
236
+ "E-dec"
237
+ ]
238
+ },
239
+ {
240
+ "id": "UNT-AU",
241
+ "action": "untrusted-ingest",
242
+ "actor": "automation",
243
+ "verdict": "allow",
244
+ "condition": "Only into a fenced field that a consumer treats as tainted.",
245
+ "evidence": [
246
+ "E-dec"
247
+ ]
248
+ },
249
+ {
250
+ "id": "PUB-OT",
251
+ "action": "private-to-public",
252
+ "actor": "owner-terminal",
253
+ "verdict": "allow",
254
+ "evidence": []
255
+ },
256
+ {
257
+ "id": "PUB-OR",
258
+ "action": "private-to-public",
259
+ "actor": "owner-remote",
260
+ "verdict": "deny",
261
+ "evidence": [
262
+ "E-ref"
263
+ ]
264
+ },
265
+ {
266
+ "id": "PUB-CO",
267
+ "action": "private-to-public",
268
+ "actor": "coordinator",
269
+ "verdict": "deny",
270
+ "evidence": [
271
+ "E-ref"
272
+ ]
273
+ },
274
+ {
275
+ "id": "PUB-WK",
276
+ "action": "private-to-public",
277
+ "actor": "worker",
278
+ "verdict": "deny",
279
+ "evidence": [
280
+ "E-ref"
281
+ ]
282
+ },
283
+ {
284
+ "id": "PUB-HD",
285
+ "action": "private-to-public",
286
+ "actor": "headless",
287
+ "verdict": "deny",
288
+ "evidence": [
289
+ "E-ref"
290
+ ]
291
+ },
292
+ {
293
+ "id": "PUB-AU",
294
+ "action": "private-to-public",
295
+ "actor": "automation",
296
+ "verdict": "deny",
297
+ "condition": "The CI check fails.",
298
+ "evidence": [
299
+ "E-ref"
300
+ ]
301
+ },
302
+ {
303
+ "id": "EXT-OT",
304
+ "action": "private-egress",
305
+ "actor": "owner-terminal",
306
+ "verdict": "allow",
307
+ "evidence": []
308
+ },
309
+ {
310
+ "id": "EXT-OR",
311
+ "action": "private-egress",
312
+ "actor": "owner-remote",
313
+ "verdict": "allow",
314
+ "condition": "Read-back of open queue items to the owner's own device.",
315
+ "evidence": [
316
+ "E-prin"
317
+ ]
318
+ },
319
+ {
320
+ "id": "EXT-CO",
321
+ "action": "private-egress",
322
+ "actor": "coordinator",
323
+ "verdict": "deny",
324
+ "taintEscalates": true,
325
+ "condition": "Outside registered pipes.",
326
+ "evidence": [
327
+ "E-ref"
328
+ ]
329
+ },
330
+ {
331
+ "id": "EXT-WK",
332
+ "action": "private-egress",
333
+ "actor": "worker",
334
+ "verdict": "deny",
335
+ "condition": "Outside registered pipes.",
336
+ "evidence": [
337
+ "E-ref"
338
+ ]
339
+ },
340
+ {
341
+ "id": "EXT-HD",
342
+ "action": "private-egress",
343
+ "actor": "headless",
344
+ "verdict": "deny",
345
+ "condition": "Outside registered pipes.",
346
+ "evidence": [
347
+ "E-ref"
348
+ ]
349
+ },
350
+ {
351
+ "id": "EXT-AU",
352
+ "action": "private-egress",
353
+ "actor": "automation",
354
+ "verdict": "allow",
355
+ "condition": "Through a registered pipe with redaction and minimization.",
356
+ "evidence": [
357
+ "E-dec"
358
+ ]
359
+ },
360
+ {
361
+ "id": "HW-OT",
362
+ "action": "hardware-actuate",
363
+ "actor": "owner-terminal",
364
+ "verdict": "allow",
365
+ "evidence": [
366
+ "E-dev"
367
+ ]
368
+ },
369
+ {
370
+ "id": "HW-OR",
371
+ "action": "hardware-actuate",
372
+ "actor": "owner-remote",
373
+ "verdict": "deny",
374
+ "condition": "Engaging or raising load; hardware-stop covers stop and unload.",
375
+ "evidence": [
376
+ "E-ref"
377
+ ]
378
+ },
379
+ {
380
+ "id": "HW-CO",
381
+ "action": "hardware-actuate",
382
+ "actor": "coordinator",
383
+ "verdict": "gate",
384
+ "resolvers": [
385
+ "owner-terminal"
386
+ ],
387
+ "condition": "The owner at the device confirms each engage step; a forced takeover of an engaged device is always gated.",
388
+ "evidence": [
389
+ "E-gate",
390
+ "E-dev"
391
+ ]
392
+ },
393
+ {
394
+ "id": "HW-WK",
395
+ "action": "hardware-actuate",
396
+ "actor": "worker",
397
+ "verdict": "deny",
398
+ "evidence": [
399
+ "E-ref"
400
+ ]
401
+ },
402
+ {
403
+ "id": "HW-HD",
404
+ "action": "hardware-actuate",
405
+ "actor": "headless",
406
+ "verdict": "deny",
407
+ "evidence": [
408
+ "E-ref"
409
+ ]
410
+ },
411
+ {
412
+ "id": "HW-AU",
413
+ "action": "hardware-actuate",
414
+ "actor": "automation",
415
+ "verdict": "deny",
416
+ "evidence": [
417
+ "E-ref"
418
+ ]
419
+ },
420
+ {
421
+ "id": "HWS-OT",
422
+ "action": "hardware-stop",
423
+ "actor": "owner-terminal",
424
+ "verdict": "allow",
425
+ "evidence": [
426
+ "E-dev"
427
+ ]
428
+ },
429
+ {
430
+ "id": "HWS-OR",
431
+ "action": "hardware-stop",
432
+ "actor": "owner-remote",
433
+ "verdict": "allow",
434
+ "evidence": [
435
+ "E-dev"
436
+ ]
437
+ },
438
+ {
439
+ "id": "HWS-CO",
440
+ "action": "hardware-stop",
441
+ "actor": "coordinator",
442
+ "verdict": "allow",
443
+ "evidence": [
444
+ "E-dev"
445
+ ]
446
+ },
447
+ {
448
+ "id": "HWS-WK",
449
+ "action": "hardware-stop",
450
+ "actor": "worker",
451
+ "verdict": "allow",
452
+ "evidence": [
453
+ "E-dev"
454
+ ]
455
+ },
456
+ {
457
+ "id": "HWS-HD",
458
+ "action": "hardware-stop",
459
+ "actor": "headless",
460
+ "verdict": "allow",
461
+ "evidence": [
462
+ "E-dev"
463
+ ]
464
+ },
465
+ {
466
+ "id": "HWS-AU",
467
+ "action": "hardware-stop",
468
+ "actor": "automation",
469
+ "verdict": "allow",
470
+ "evidence": [
471
+ "E-dev"
472
+ ]
473
+ },
474
+ {
475
+ "id": "DSR-OT",
476
+ "action": "destructive-remote",
477
+ "actor": "owner-terminal",
478
+ "verdict": "allow",
479
+ "condition": "Through the git-safety bypass or a command the owner typed.",
480
+ "evidence": [
481
+ "E-byp"
482
+ ]
483
+ },
484
+ {
485
+ "id": "DSR-OR",
486
+ "action": "destructive-remote",
487
+ "actor": "owner-remote",
488
+ "verdict": "deny",
489
+ "evidence": [
490
+ "E-ref"
491
+ ]
492
+ },
493
+ {
494
+ "id": "DSR-CO",
495
+ "action": "destructive-remote",
496
+ "actor": "coordinator",
497
+ "verdict": "deny",
498
+ "evidence": [
499
+ "E-ref"
500
+ ]
501
+ },
502
+ {
503
+ "id": "DSR-WK",
504
+ "action": "destructive-remote",
505
+ "actor": "worker",
506
+ "verdict": "deny",
507
+ "evidence": [
508
+ "E-ref"
509
+ ]
510
+ },
511
+ {
512
+ "id": "DSR-HD",
513
+ "action": "destructive-remote",
514
+ "actor": "headless",
515
+ "verdict": "deny",
516
+ "evidence": [
517
+ "E-ref"
518
+ ]
519
+ },
520
+ {
521
+ "id": "DSR-AU",
522
+ "action": "destructive-remote",
523
+ "actor": "automation",
524
+ "verdict": "deny",
525
+ "evidence": [
526
+ "E-gh"
527
+ ]
528
+ },
529
+ {
530
+ "id": "DSL-OT",
531
+ "action": "destructive-local",
532
+ "actor": "owner-terminal",
533
+ "verdict": "allow",
534
+ "evidence": []
535
+ },
536
+ {
537
+ "id": "DSL-OR",
538
+ "action": "destructive-local",
539
+ "actor": "owner-remote",
540
+ "verdict": "deny",
541
+ "evidence": [
542
+ "E-ref"
543
+ ]
544
+ },
545
+ {
546
+ "id": "DSL-CO",
547
+ "action": "destructive-local",
548
+ "actor": "coordinator",
549
+ "verdict": "allow",
550
+ "condition": "Inside its own checkout.",
551
+ "evidence": [
552
+ "E-dec"
553
+ ]
554
+ },
555
+ {
556
+ "id": "DSL-WK",
557
+ "action": "destructive-local",
558
+ "actor": "worker",
559
+ "verdict": "allow",
560
+ "condition": "Inside its own worktree.",
561
+ "evidence": []
562
+ },
563
+ {
564
+ "id": "DSL-HD",
565
+ "action": "destructive-local",
566
+ "actor": "headless",
567
+ "verdict": "allow",
568
+ "condition": "Inside its own worktree.",
569
+ "evidence": []
570
+ },
571
+ {
572
+ "id": "DSL-AU",
573
+ "action": "destructive-local",
574
+ "actor": "automation",
575
+ "verdict": "allow",
576
+ "condition": "Inside its own workspace.",
577
+ "evidence": []
578
+ },
579
+ {
580
+ "id": "DSX-OT",
581
+ "action": "destructive-foreign",
582
+ "actor": "owner-terminal",
583
+ "verdict": "allow",
584
+ "condition": "Includes retire --force and a broker restart, which are terminal-only.",
585
+ "evidence": [
586
+ "E-dec"
587
+ ]
588
+ },
589
+ {
590
+ "id": "DSX-OR",
591
+ "action": "destructive-foreign",
592
+ "actor": "owner-remote",
593
+ "verdict": "deny",
594
+ "evidence": [
595
+ "E-ref"
596
+ ]
597
+ },
598
+ {
599
+ "id": "DSX-CO",
600
+ "action": "destructive-foreign",
601
+ "actor": "coordinator",
602
+ "verdict": "deny",
603
+ "evidence": [
604
+ "E-ref"
605
+ ]
606
+ },
607
+ {
608
+ "id": "DSX-WK",
609
+ "action": "destructive-foreign",
610
+ "actor": "worker",
611
+ "verdict": "deny",
612
+ "evidence": [
613
+ "E-ref"
614
+ ]
615
+ },
616
+ {
617
+ "id": "DSX-HD",
618
+ "action": "destructive-foreign",
619
+ "actor": "headless",
620
+ "verdict": "deny",
621
+ "evidence": [
622
+ "E-ref"
623
+ ]
624
+ },
625
+ {
626
+ "id": "DSX-AU",
627
+ "action": "destructive-foreign",
628
+ "actor": "automation",
629
+ "verdict": "deny",
630
+ "evidence": [
631
+ "E-ref"
632
+ ]
633
+ },
634
+ {
635
+ "id": "SPN-OT",
636
+ "action": "spawn",
637
+ "actor": "owner-terminal",
638
+ "verdict": "allow",
639
+ "evidence": [
640
+ "E-spn"
641
+ ]
642
+ },
643
+ {
644
+ "id": "SPN-OR",
645
+ "action": "spawn",
646
+ "actor": "owner-remote",
647
+ "verdict": "allow",
648
+ "condition": "Within service limits, which are never lifted; the owner is recorded as the principal.",
649
+ "evidence": [
650
+ "E-spn",
651
+ "E-prin"
652
+ ]
653
+ },
654
+ {
655
+ "id": "SPN-CO",
656
+ "action": "spawn",
657
+ "actor": "coordinator",
658
+ "verdict": "allow",
659
+ "taintEscalates": true,
660
+ "condition": "Within the spawn escalation, depth, rate, cwd and slot limits.",
661
+ "evidence": [
662
+ "E-spn",
663
+ "E-ref"
664
+ ]
665
+ },
666
+ {
667
+ "id": "SPN-WK",
668
+ "action": "spawn",
669
+ "actor": "worker",
670
+ "verdict": "deny",
671
+ "evidence": [
672
+ "E-ref"
673
+ ]
674
+ },
675
+ {
676
+ "id": "SPN-HD",
677
+ "action": "spawn",
678
+ "actor": "headless",
679
+ "verdict": "deny",
680
+ "evidence": [
681
+ "E-ref"
682
+ ]
683
+ },
684
+ {
685
+ "id": "SPN-AU",
686
+ "action": "spawn",
687
+ "actor": "automation",
688
+ "verdict": "allow",
689
+ "condition": "Within service limits, with no principal recorded.",
690
+ "evidence": [
691
+ "E-spn"
692
+ ]
693
+ },
694
+ {
695
+ "id": "SPD-OT",
696
+ "action": "spend-over-cap",
697
+ "actor": "owner-terminal",
698
+ "verdict": "allow",
699
+ "evidence": [
700
+ "E-dec"
701
+ ]
702
+ },
703
+ {
704
+ "id": "SPD-OR",
705
+ "action": "spend-over-cap",
706
+ "actor": "owner-remote",
707
+ "verdict": "deny",
708
+ "condition": "There is no cap to raise remotely.",
709
+ "evidence": [
710
+ "E-ref"
711
+ ]
712
+ },
713
+ {
714
+ "id": "SPD-CO",
715
+ "action": "spend-over-cap",
716
+ "actor": "coordinator",
717
+ "verdict": "allow",
718
+ "condition": "Spend is recorded and crossing the notice threshold notifies the owner; the run continues.",
719
+ "evidence": [
720
+ "E-dec"
721
+ ]
722
+ },
723
+ {
724
+ "id": "SPD-WK",
725
+ "action": "spend-over-cap",
726
+ "actor": "worker",
727
+ "verdict": "allow",
728
+ "condition": "Spend is recorded and crossing the notice threshold notifies the owner; the run continues.",
729
+ "evidence": [
730
+ "E-dec"
731
+ ]
732
+ },
733
+ {
734
+ "id": "SPD-HD",
735
+ "action": "spend-over-cap",
736
+ "actor": "headless",
737
+ "verdict": "allow",
738
+ "condition": "Spend is recorded and crossing the notice threshold notifies the owner; the run continues.",
739
+ "evidence": [
740
+ "E-dec"
741
+ ]
742
+ },
743
+ {
744
+ "id": "SPD-AU",
745
+ "action": "spend-over-cap",
746
+ "actor": "automation",
747
+ "verdict": "allow",
748
+ "condition": "Spend is recorded and crossing the notice threshold notifies the owner; the run continues.",
749
+ "evidence": [
750
+ "E-dec"
751
+ ]
752
+ },
753
+ {
754
+ "id": "CFG-OT",
755
+ "action": "authority-config",
756
+ "actor": "owner-terminal",
757
+ "verdict": "allow",
758
+ "evidence": []
759
+ },
760
+ {
761
+ "id": "CFG-OR",
762
+ "action": "authority-config",
763
+ "actor": "owner-remote",
764
+ "verdict": "deny",
765
+ "evidence": [
766
+ "E-ref"
767
+ ]
768
+ },
769
+ {
770
+ "id": "CFG-CO",
771
+ "action": "authority-config",
772
+ "actor": "coordinator",
773
+ "verdict": "deny",
774
+ "condition": "A repository CLAUDE.md change goes through a pull request under merge, flagged as a sensitive path.",
775
+ "evidence": [
776
+ "E-ref"
777
+ ]
778
+ },
779
+ {
780
+ "id": "CFG-WK",
781
+ "action": "authority-config",
782
+ "actor": "worker",
783
+ "verdict": "deny",
784
+ "evidence": [
785
+ "E-ref"
786
+ ]
787
+ },
788
+ {
789
+ "id": "CFG-HD",
790
+ "action": "authority-config",
791
+ "actor": "headless",
792
+ "verdict": "deny",
793
+ "evidence": [
794
+ "E-ref"
795
+ ]
796
+ },
797
+ {
798
+ "id": "CFG-AU",
799
+ "action": "authority-config",
800
+ "actor": "automation",
801
+ "verdict": "deny",
802
+ "evidence": [
803
+ "E-ref"
804
+ ]
805
+ },
806
+ {
807
+ "id": "HV-OT",
808
+ "action": "human-verb",
809
+ "actor": "owner-terminal",
810
+ "verdict": "allow",
811
+ "evidence": [
812
+ "E-gate"
813
+ ]
814
+ },
815
+ {
816
+ "id": "HV-OR",
817
+ "action": "human-verb",
818
+ "actor": "owner-remote",
819
+ "verdict": "gate",
820
+ "resolvers": [
821
+ "owner-remote"
822
+ ],
823
+ "condition": "Read-back of what is answered; voice caps an endorsement at 600 characters and a permission preview at 300.",
824
+ "evidence": [
825
+ "E-prin",
826
+ "E-gate"
827
+ ]
828
+ },
829
+ {
830
+ "id": "HV-CO",
831
+ "action": "human-verb",
832
+ "actor": "coordinator",
833
+ "verdict": "deny",
834
+ "evidence": [
835
+ "E-ref"
836
+ ]
837
+ },
838
+ {
839
+ "id": "HV-WK",
840
+ "action": "human-verb",
841
+ "actor": "worker",
842
+ "verdict": "deny",
843
+ "evidence": [
844
+ "E-ref"
845
+ ]
846
+ },
847
+ {
848
+ "id": "HV-HD",
849
+ "action": "human-verb",
850
+ "actor": "headless",
851
+ "verdict": "deny",
852
+ "evidence": [
853
+ "E-ref"
854
+ ]
855
+ },
856
+ {
857
+ "id": "HV-AU",
858
+ "action": "human-verb",
859
+ "actor": "automation",
860
+ "verdict": "deny",
861
+ "condition": "A queue mirror applying a verdict the owner gave remotely acts as owner-remote, not as automation.",
862
+ "evidence": [
863
+ "E-gate"
864
+ ]
865
+ }
866
+ ]
867
+ }