@mhome/app-facade-protocol 1.7.0 → 1.8.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.
@@ -0,0 +1,3353 @@
1
+ {
2
+ "base": {
3
+ "contract": "mhome.device.topology.v1",
4
+ "scopeId": "space-1",
5
+ "generation": "generation-1",
6
+ "revision": 7,
7
+ "observedAtMs": 1777777777000,
8
+ "completeness": "complete",
9
+ "issues": [],
10
+ "entities": [
11
+ {
12
+ "kind": "deviceIntegration",
13
+ "id": "integration:basic.device",
14
+ "integrationId": "basic.device",
15
+ "displayName": "Devices"
16
+ },
17
+ {
18
+ "kind": "provider",
19
+ "id": "provider:mlinkMatter.device",
20
+ "integrationId": "mlinkMatter.device",
21
+ "displayName": "Matter",
22
+ "mode": "local",
23
+ "multiConnect": false
24
+ },
25
+ {
26
+ "kind": "connection",
27
+ "id": "connection:mlinkMatter.device:matter-1",
28
+ "integrationId": "mlinkMatter.device",
29
+ "connectionId": "matter-1",
30
+ "displayName": "Living Room Mac",
31
+ "runtime": {
32
+ "state": "healthy",
33
+ "updatedAtMs": 1777777777000
34
+ }
35
+ },
36
+ {
37
+ "kind": "pluginInstance",
38
+ "id": "plugin:matter-1",
39
+ "nodeId": "matter-1",
40
+ "nodeType": "matter",
41
+ "hostId": "host-1",
42
+ "serviceInstanceId": "service-1",
43
+ "displayName": "Matter Service",
44
+ "hostDisplayName": "Living Room Mac",
45
+ "runtime": {
46
+ "state": "healthy",
47
+ "updatedAtMs": 1777777777000
48
+ }
49
+ },
50
+ {
51
+ "kind": "sourceDevice",
52
+ "id": "source:matter:node-123",
53
+ "sourceType": "matter",
54
+ "sourceId": "node-123",
55
+ "displayName": "Aqara Matter Bridge",
56
+ "role": "bridge",
57
+ "runtime": {
58
+ "state": "healthy",
59
+ "updatedAtMs": 1777777777000
60
+ }
61
+ },
62
+ {
63
+ "kind": "device",
64
+ "id": "device:desk-light",
65
+ "entityId": "desk-light",
66
+ "integrationId": "mlinkMatter.device",
67
+ "displayName": "Desk Light",
68
+ "enabled": true,
69
+ "runtime": {
70
+ "state": "healthy",
71
+ "updatedAtMs": 1777777777000
72
+ }
73
+ }
74
+ ],
75
+ "edges": [
76
+ {
77
+ "id": "edge:integration-provider",
78
+ "source": "integration:basic.device",
79
+ "target": "provider:mlinkMatter.device",
80
+ "relation": "integration-provider",
81
+ "basis": "integrationInstall",
82
+ "durability": "durable",
83
+ "observation": {
84
+ "state": "connected",
85
+ "observedAtMs": 1777777777000
86
+ }
87
+ },
88
+ {
89
+ "id": "edge:plugin-provider",
90
+ "source": "plugin:matter-1",
91
+ "target": "provider:mlinkMatter.device",
92
+ "relation": "plugin-provider",
93
+ "basis": "pluginBinding",
94
+ "durability": "durable",
95
+ "observation": {
96
+ "state": "connected",
97
+ "observedAtMs": 1777777777000
98
+ }
99
+ },
100
+ {
101
+ "id": "edge:plugin-connection",
102
+ "source": "plugin:matter-1",
103
+ "target": "connection:mlinkMatter.device:matter-1",
104
+ "relation": "plugin-connection",
105
+ "basis": "pluginBinding",
106
+ "durability": "durable",
107
+ "observation": {
108
+ "state": "connected",
109
+ "observedAtMs": 1777777777000
110
+ }
111
+ },
112
+ {
113
+ "id": "edge:provider-connection",
114
+ "source": "provider:mlinkMatter.device",
115
+ "target": "connection:mlinkMatter.device:matter-1",
116
+ "relation": "provider-connection",
117
+ "basis": "connectionOwnership",
118
+ "durability": "durable",
119
+ "observation": {
120
+ "state": "connected",
121
+ "observedAtMs": 1777777777000
122
+ }
123
+ },
124
+ {
125
+ "id": "edge:connection-source",
126
+ "source": "connection:mlinkMatter.device:matter-1",
127
+ "target": "source:matter:node-123",
128
+ "relation": "connection-source",
129
+ "basis": "sourceProjection",
130
+ "durability": "durable",
131
+ "observation": {
132
+ "state": "connected",
133
+ "observedAtMs": 1777777777000
134
+ }
135
+ },
136
+ {
137
+ "id": "edge:source-device",
138
+ "source": "source:matter:node-123",
139
+ "target": "device:desk-light",
140
+ "relation": "source-device",
141
+ "basis": "sourceProjection",
142
+ "durability": "durable",
143
+ "observation": {
144
+ "state": "connected",
145
+ "observedAtMs": 1777777777000
146
+ }
147
+ },
148
+ {
149
+ "id": "edge:provider-device",
150
+ "source": "provider:mlinkMatter.device",
151
+ "target": "device:desk-light",
152
+ "relation": "provider-device",
153
+ "basis": "twinSource",
154
+ "durability": "durable",
155
+ "observation": {
156
+ "state": "connected",
157
+ "observedAtMs": 1777777777000
158
+ }
159
+ },
160
+ {
161
+ "id": "edge:connection-device",
162
+ "source": "connection:mlinkMatter.device:matter-1",
163
+ "target": "device:desk-light",
164
+ "relation": "connection-device",
165
+ "basis": "twinSource",
166
+ "durability": "durable",
167
+ "observation": {
168
+ "state": "connected",
169
+ "observedAtMs": 1777777777000
170
+ }
171
+ }
172
+ ]
173
+ },
174
+ "cases": [
175
+ {
176
+ "name": "valid graph with multiple incoming edges",
177
+ "valid": true,
178
+ "mutations": []
179
+ },
180
+ {
181
+ "name": "missing /contract",
182
+ "valid": false,
183
+ "mutations": [
184
+ {
185
+ "op": "remove",
186
+ "path": "/contract"
187
+ }
188
+ ]
189
+ },
190
+ {
191
+ "name": "missing /scopeId",
192
+ "valid": false,
193
+ "mutations": [
194
+ {
195
+ "op": "remove",
196
+ "path": "/scopeId"
197
+ }
198
+ ]
199
+ },
200
+ {
201
+ "name": "missing /generation",
202
+ "valid": false,
203
+ "mutations": [
204
+ {
205
+ "op": "remove",
206
+ "path": "/generation"
207
+ }
208
+ ]
209
+ },
210
+ {
211
+ "name": "missing /revision",
212
+ "valid": false,
213
+ "mutations": [
214
+ {
215
+ "op": "remove",
216
+ "path": "/revision"
217
+ }
218
+ ]
219
+ },
220
+ {
221
+ "name": "missing /observedAtMs",
222
+ "valid": false,
223
+ "mutations": [
224
+ {
225
+ "op": "remove",
226
+ "path": "/observedAtMs"
227
+ }
228
+ ]
229
+ },
230
+ {
231
+ "name": "missing /completeness",
232
+ "valid": false,
233
+ "mutations": [
234
+ {
235
+ "op": "remove",
236
+ "path": "/completeness"
237
+ }
238
+ ]
239
+ },
240
+ {
241
+ "name": "missing /issues",
242
+ "valid": false,
243
+ "mutations": [
244
+ {
245
+ "op": "remove",
246
+ "path": "/issues"
247
+ }
248
+ ]
249
+ },
250
+ {
251
+ "name": "missing /entities",
252
+ "valid": false,
253
+ "mutations": [
254
+ {
255
+ "op": "remove",
256
+ "path": "/entities"
257
+ }
258
+ ]
259
+ },
260
+ {
261
+ "name": "missing /edges",
262
+ "valid": false,
263
+ "mutations": [
264
+ {
265
+ "op": "remove",
266
+ "path": "/edges"
267
+ }
268
+ ]
269
+ },
270
+ {
271
+ "name": "empty /scopeId",
272
+ "valid": false,
273
+ "mutations": [
274
+ {
275
+ "op": "set",
276
+ "path": "/scopeId",
277
+ "value": ""
278
+ }
279
+ ]
280
+ },
281
+ {
282
+ "name": "empty /generation",
283
+ "valid": false,
284
+ "mutations": [
285
+ {
286
+ "op": "set",
287
+ "path": "/generation",
288
+ "value": ""
289
+ }
290
+ ]
291
+ },
292
+ {
293
+ "name": "negative /revision",
294
+ "valid": false,
295
+ "mutations": [
296
+ {
297
+ "op": "set",
298
+ "path": "/revision",
299
+ "value": -1
300
+ }
301
+ ]
302
+ },
303
+ {
304
+ "name": "negative /observedAtMs",
305
+ "valid": false,
306
+ "mutations": [
307
+ {
308
+ "op": "set",
309
+ "path": "/observedAtMs",
310
+ "value": -1
311
+ }
312
+ ]
313
+ },
314
+ {
315
+ "name": "unknown /completeness",
316
+ "valid": false,
317
+ "mutations": [
318
+ {
319
+ "op": "set",
320
+ "path": "/completeness",
321
+ "value": "invalid"
322
+ }
323
+ ]
324
+ },
325
+ {
326
+ "name": "unknown field ",
327
+ "valid": false,
328
+ "mutations": [
329
+ {
330
+ "op": "set",
331
+ "path": "/unexpected",
332
+ "value": true
333
+ }
334
+ ]
335
+ },
336
+ {
337
+ "name": "missing /entities/0/id",
338
+ "valid": false,
339
+ "mutations": [
340
+ {
341
+ "op": "remove",
342
+ "path": "/entities/0/id"
343
+ }
344
+ ]
345
+ },
346
+ {
347
+ "name": "missing /entities/0/kind",
348
+ "valid": false,
349
+ "mutations": [
350
+ {
351
+ "op": "remove",
352
+ "path": "/entities/0/kind"
353
+ }
354
+ ]
355
+ },
356
+ {
357
+ "name": "missing /entities/0/integrationId",
358
+ "valid": false,
359
+ "mutations": [
360
+ {
361
+ "op": "remove",
362
+ "path": "/entities/0/integrationId"
363
+ }
364
+ ]
365
+ },
366
+ {
367
+ "name": "missing /entities/0/displayName",
368
+ "valid": false,
369
+ "mutations": [
370
+ {
371
+ "op": "remove",
372
+ "path": "/entities/0/displayName"
373
+ }
374
+ ]
375
+ },
376
+ {
377
+ "name": "empty /entities/0/id",
378
+ "valid": false,
379
+ "mutations": [
380
+ {
381
+ "op": "set",
382
+ "path": "/entities/0/id",
383
+ "value": ""
384
+ }
385
+ ]
386
+ },
387
+ {
388
+ "name": "empty /entities/0/integrationId",
389
+ "valid": false,
390
+ "mutations": [
391
+ {
392
+ "op": "set",
393
+ "path": "/entities/0/integrationId",
394
+ "value": ""
395
+ }
396
+ ]
397
+ },
398
+ {
399
+ "name": "empty /entities/0/displayName",
400
+ "valid": false,
401
+ "mutations": [
402
+ {
403
+ "op": "set",
404
+ "path": "/entities/0/displayName",
405
+ "value": ""
406
+ }
407
+ ]
408
+ },
409
+ {
410
+ "name": "unknown field /entities/0",
411
+ "valid": false,
412
+ "mutations": [
413
+ {
414
+ "op": "set",
415
+ "path": "/entities/0/unexpected",
416
+ "value": true
417
+ }
418
+ ]
419
+ },
420
+ {
421
+ "name": "missing /entities/1/id",
422
+ "valid": false,
423
+ "mutations": [
424
+ {
425
+ "op": "remove",
426
+ "path": "/entities/1/id"
427
+ }
428
+ ]
429
+ },
430
+ {
431
+ "name": "missing /entities/1/kind",
432
+ "valid": false,
433
+ "mutations": [
434
+ {
435
+ "op": "remove",
436
+ "path": "/entities/1/kind"
437
+ }
438
+ ]
439
+ },
440
+ {
441
+ "name": "missing /entities/1/integrationId",
442
+ "valid": false,
443
+ "mutations": [
444
+ {
445
+ "op": "remove",
446
+ "path": "/entities/1/integrationId"
447
+ }
448
+ ]
449
+ },
450
+ {
451
+ "name": "missing /entities/1/displayName",
452
+ "valid": false,
453
+ "mutations": [
454
+ {
455
+ "op": "remove",
456
+ "path": "/entities/1/displayName"
457
+ }
458
+ ]
459
+ },
460
+ {
461
+ "name": "missing /entities/1/mode",
462
+ "valid": false,
463
+ "mutations": [
464
+ {
465
+ "op": "remove",
466
+ "path": "/entities/1/mode"
467
+ }
468
+ ]
469
+ },
470
+ {
471
+ "name": "missing /entities/1/multiConnect",
472
+ "valid": false,
473
+ "mutations": [
474
+ {
475
+ "op": "remove",
476
+ "path": "/entities/1/multiConnect"
477
+ }
478
+ ]
479
+ },
480
+ {
481
+ "name": "empty /entities/1/id",
482
+ "valid": false,
483
+ "mutations": [
484
+ {
485
+ "op": "set",
486
+ "path": "/entities/1/id",
487
+ "value": ""
488
+ }
489
+ ]
490
+ },
491
+ {
492
+ "name": "empty /entities/1/integrationId",
493
+ "valid": false,
494
+ "mutations": [
495
+ {
496
+ "op": "set",
497
+ "path": "/entities/1/integrationId",
498
+ "value": ""
499
+ }
500
+ ]
501
+ },
502
+ {
503
+ "name": "empty /entities/1/displayName",
504
+ "valid": false,
505
+ "mutations": [
506
+ {
507
+ "op": "set",
508
+ "path": "/entities/1/displayName",
509
+ "value": ""
510
+ }
511
+ ]
512
+ },
513
+ {
514
+ "name": "empty /entities/1/mode",
515
+ "valid": false,
516
+ "mutations": [
517
+ {
518
+ "op": "set",
519
+ "path": "/entities/1/mode",
520
+ "value": ""
521
+ }
522
+ ]
523
+ },
524
+ {
525
+ "name": "unknown field /entities/1",
526
+ "valid": false,
527
+ "mutations": [
528
+ {
529
+ "op": "set",
530
+ "path": "/entities/1/unexpected",
531
+ "value": true
532
+ }
533
+ ]
534
+ },
535
+ {
536
+ "name": "missing /entities/2/id",
537
+ "valid": false,
538
+ "mutations": [
539
+ {
540
+ "op": "remove",
541
+ "path": "/entities/2/id"
542
+ }
543
+ ]
544
+ },
545
+ {
546
+ "name": "missing /entities/2/kind",
547
+ "valid": false,
548
+ "mutations": [
549
+ {
550
+ "op": "remove",
551
+ "path": "/entities/2/kind"
552
+ }
553
+ ]
554
+ },
555
+ {
556
+ "name": "missing /entities/2/integrationId",
557
+ "valid": false,
558
+ "mutations": [
559
+ {
560
+ "op": "remove",
561
+ "path": "/entities/2/integrationId"
562
+ }
563
+ ]
564
+ },
565
+ {
566
+ "name": "missing /entities/2/connectionId",
567
+ "valid": false,
568
+ "mutations": [
569
+ {
570
+ "op": "remove",
571
+ "path": "/entities/2/connectionId"
572
+ }
573
+ ]
574
+ },
575
+ {
576
+ "name": "missing /entities/2/displayName",
577
+ "valid": false,
578
+ "mutations": [
579
+ {
580
+ "op": "remove",
581
+ "path": "/entities/2/displayName"
582
+ }
583
+ ]
584
+ },
585
+ {
586
+ "name": "missing /entities/2/runtime",
587
+ "valid": false,
588
+ "mutations": [
589
+ {
590
+ "op": "remove",
591
+ "path": "/entities/2/runtime"
592
+ }
593
+ ]
594
+ },
595
+ {
596
+ "name": "empty /entities/2/id",
597
+ "valid": false,
598
+ "mutations": [
599
+ {
600
+ "op": "set",
601
+ "path": "/entities/2/id",
602
+ "value": ""
603
+ }
604
+ ]
605
+ },
606
+ {
607
+ "name": "empty /entities/2/integrationId",
608
+ "valid": false,
609
+ "mutations": [
610
+ {
611
+ "op": "set",
612
+ "path": "/entities/2/integrationId",
613
+ "value": ""
614
+ }
615
+ ]
616
+ },
617
+ {
618
+ "name": "empty /entities/2/connectionId",
619
+ "valid": false,
620
+ "mutations": [
621
+ {
622
+ "op": "set",
623
+ "path": "/entities/2/connectionId",
624
+ "value": ""
625
+ }
626
+ ]
627
+ },
628
+ {
629
+ "name": "empty /entities/2/displayName",
630
+ "valid": false,
631
+ "mutations": [
632
+ {
633
+ "op": "set",
634
+ "path": "/entities/2/displayName",
635
+ "value": ""
636
+ }
637
+ ]
638
+ },
639
+ {
640
+ "name": "unknown field /entities/2",
641
+ "valid": false,
642
+ "mutations": [
643
+ {
644
+ "op": "set",
645
+ "path": "/entities/2/unexpected",
646
+ "value": true
647
+ }
648
+ ]
649
+ },
650
+ {
651
+ "name": "missing /entities/2/runtime/state",
652
+ "valid": false,
653
+ "mutations": [
654
+ {
655
+ "op": "remove",
656
+ "path": "/entities/2/runtime/state"
657
+ }
658
+ ]
659
+ },
660
+ {
661
+ "name": "unknown /entities/2/runtime/state",
662
+ "valid": false,
663
+ "mutations": [
664
+ {
665
+ "op": "set",
666
+ "path": "/entities/2/runtime/state",
667
+ "value": "invalid"
668
+ }
669
+ ]
670
+ },
671
+ {
672
+ "name": "negative /entities/2/runtime/updatedAtMs",
673
+ "valid": false,
674
+ "mutations": [
675
+ {
676
+ "op": "set",
677
+ "path": "/entities/2/runtime/updatedAtMs",
678
+ "value": -1
679
+ }
680
+ ]
681
+ },
682
+ {
683
+ "name": "unknown field /entities/2/runtime",
684
+ "valid": false,
685
+ "mutations": [
686
+ {
687
+ "op": "set",
688
+ "path": "/entities/2/runtime/unexpected",
689
+ "value": true
690
+ }
691
+ ]
692
+ },
693
+ {
694
+ "name": "missing /entities/3/id",
695
+ "valid": false,
696
+ "mutations": [
697
+ {
698
+ "op": "remove",
699
+ "path": "/entities/3/id"
700
+ }
701
+ ]
702
+ },
703
+ {
704
+ "name": "missing /entities/3/kind",
705
+ "valid": false,
706
+ "mutations": [
707
+ {
708
+ "op": "remove",
709
+ "path": "/entities/3/kind"
710
+ }
711
+ ]
712
+ },
713
+ {
714
+ "name": "missing /entities/3/nodeId",
715
+ "valid": false,
716
+ "mutations": [
717
+ {
718
+ "op": "remove",
719
+ "path": "/entities/3/nodeId"
720
+ }
721
+ ]
722
+ },
723
+ {
724
+ "name": "missing /entities/3/nodeType",
725
+ "valid": false,
726
+ "mutations": [
727
+ {
728
+ "op": "remove",
729
+ "path": "/entities/3/nodeType"
730
+ }
731
+ ]
732
+ },
733
+ {
734
+ "name": "missing /entities/3/hostId",
735
+ "valid": false,
736
+ "mutations": [
737
+ {
738
+ "op": "remove",
739
+ "path": "/entities/3/hostId"
740
+ }
741
+ ]
742
+ },
743
+ {
744
+ "name": "missing /entities/3/serviceInstanceId",
745
+ "valid": false,
746
+ "mutations": [
747
+ {
748
+ "op": "remove",
749
+ "path": "/entities/3/serviceInstanceId"
750
+ }
751
+ ]
752
+ },
753
+ {
754
+ "name": "missing /entities/3/displayName",
755
+ "valid": false,
756
+ "mutations": [
757
+ {
758
+ "op": "remove",
759
+ "path": "/entities/3/displayName"
760
+ }
761
+ ]
762
+ },
763
+ {
764
+ "name": "missing /entities/3/runtime",
765
+ "valid": false,
766
+ "mutations": [
767
+ {
768
+ "op": "remove",
769
+ "path": "/entities/3/runtime"
770
+ }
771
+ ]
772
+ },
773
+ {
774
+ "name": "empty /entities/3/id",
775
+ "valid": false,
776
+ "mutations": [
777
+ {
778
+ "op": "set",
779
+ "path": "/entities/3/id",
780
+ "value": ""
781
+ }
782
+ ]
783
+ },
784
+ {
785
+ "name": "empty /entities/3/nodeId",
786
+ "valid": false,
787
+ "mutations": [
788
+ {
789
+ "op": "set",
790
+ "path": "/entities/3/nodeId",
791
+ "value": ""
792
+ }
793
+ ]
794
+ },
795
+ {
796
+ "name": "empty /entities/3/nodeType",
797
+ "valid": false,
798
+ "mutations": [
799
+ {
800
+ "op": "set",
801
+ "path": "/entities/3/nodeType",
802
+ "value": ""
803
+ }
804
+ ]
805
+ },
806
+ {
807
+ "name": "empty /entities/3/hostId",
808
+ "valid": false,
809
+ "mutations": [
810
+ {
811
+ "op": "set",
812
+ "path": "/entities/3/hostId",
813
+ "value": ""
814
+ }
815
+ ]
816
+ },
817
+ {
818
+ "name": "empty /entities/3/serviceInstanceId",
819
+ "valid": false,
820
+ "mutations": [
821
+ {
822
+ "op": "set",
823
+ "path": "/entities/3/serviceInstanceId",
824
+ "value": ""
825
+ }
826
+ ]
827
+ },
828
+ {
829
+ "name": "empty /entities/3/displayName",
830
+ "valid": false,
831
+ "mutations": [
832
+ {
833
+ "op": "set",
834
+ "path": "/entities/3/displayName",
835
+ "value": ""
836
+ }
837
+ ]
838
+ },
839
+ {
840
+ "name": "empty /entities/3/hostDisplayName",
841
+ "valid": false,
842
+ "mutations": [
843
+ {
844
+ "op": "set",
845
+ "path": "/entities/3/hostDisplayName",
846
+ "value": ""
847
+ }
848
+ ]
849
+ },
850
+ {
851
+ "name": "unknown field /entities/3",
852
+ "valid": false,
853
+ "mutations": [
854
+ {
855
+ "op": "set",
856
+ "path": "/entities/3/unexpected",
857
+ "value": true
858
+ }
859
+ ]
860
+ },
861
+ {
862
+ "name": "missing /entities/3/runtime/state",
863
+ "valid": false,
864
+ "mutations": [
865
+ {
866
+ "op": "remove",
867
+ "path": "/entities/3/runtime/state"
868
+ }
869
+ ]
870
+ },
871
+ {
872
+ "name": "unknown /entities/3/runtime/state",
873
+ "valid": false,
874
+ "mutations": [
875
+ {
876
+ "op": "set",
877
+ "path": "/entities/3/runtime/state",
878
+ "value": "invalid"
879
+ }
880
+ ]
881
+ },
882
+ {
883
+ "name": "negative /entities/3/runtime/updatedAtMs",
884
+ "valid": false,
885
+ "mutations": [
886
+ {
887
+ "op": "set",
888
+ "path": "/entities/3/runtime/updatedAtMs",
889
+ "value": -1
890
+ }
891
+ ]
892
+ },
893
+ {
894
+ "name": "unknown field /entities/3/runtime",
895
+ "valid": false,
896
+ "mutations": [
897
+ {
898
+ "op": "set",
899
+ "path": "/entities/3/runtime/unexpected",
900
+ "value": true
901
+ }
902
+ ]
903
+ },
904
+ {
905
+ "name": "missing /entities/4/id",
906
+ "valid": false,
907
+ "mutations": [
908
+ {
909
+ "op": "remove",
910
+ "path": "/entities/4/id"
911
+ }
912
+ ]
913
+ },
914
+ {
915
+ "name": "missing /entities/4/kind",
916
+ "valid": false,
917
+ "mutations": [
918
+ {
919
+ "op": "remove",
920
+ "path": "/entities/4/kind"
921
+ }
922
+ ]
923
+ },
924
+ {
925
+ "name": "missing /entities/4/sourceType",
926
+ "valid": false,
927
+ "mutations": [
928
+ {
929
+ "op": "remove",
930
+ "path": "/entities/4/sourceType"
931
+ }
932
+ ]
933
+ },
934
+ {
935
+ "name": "missing /entities/4/sourceId",
936
+ "valid": false,
937
+ "mutations": [
938
+ {
939
+ "op": "remove",
940
+ "path": "/entities/4/sourceId"
941
+ }
942
+ ]
943
+ },
944
+ {
945
+ "name": "missing /entities/4/displayName",
946
+ "valid": false,
947
+ "mutations": [
948
+ {
949
+ "op": "remove",
950
+ "path": "/entities/4/displayName"
951
+ }
952
+ ]
953
+ },
954
+ {
955
+ "name": "missing /entities/4/role",
956
+ "valid": false,
957
+ "mutations": [
958
+ {
959
+ "op": "remove",
960
+ "path": "/entities/4/role"
961
+ }
962
+ ]
963
+ },
964
+ {
965
+ "name": "missing /entities/4/runtime",
966
+ "valid": false,
967
+ "mutations": [
968
+ {
969
+ "op": "remove",
970
+ "path": "/entities/4/runtime"
971
+ }
972
+ ]
973
+ },
974
+ {
975
+ "name": "empty /entities/4/id",
976
+ "valid": false,
977
+ "mutations": [
978
+ {
979
+ "op": "set",
980
+ "path": "/entities/4/id",
981
+ "value": ""
982
+ }
983
+ ]
984
+ },
985
+ {
986
+ "name": "empty /entities/4/sourceType",
987
+ "valid": false,
988
+ "mutations": [
989
+ {
990
+ "op": "set",
991
+ "path": "/entities/4/sourceType",
992
+ "value": ""
993
+ }
994
+ ]
995
+ },
996
+ {
997
+ "name": "empty /entities/4/sourceId",
998
+ "valid": false,
999
+ "mutations": [
1000
+ {
1001
+ "op": "set",
1002
+ "path": "/entities/4/sourceId",
1003
+ "value": ""
1004
+ }
1005
+ ]
1006
+ },
1007
+ {
1008
+ "name": "empty /entities/4/displayName",
1009
+ "valid": false,
1010
+ "mutations": [
1011
+ {
1012
+ "op": "set",
1013
+ "path": "/entities/4/displayName",
1014
+ "value": ""
1015
+ }
1016
+ ]
1017
+ },
1018
+ {
1019
+ "name": "unknown /entities/4/role",
1020
+ "valid": false,
1021
+ "mutations": [
1022
+ {
1023
+ "op": "set",
1024
+ "path": "/entities/4/role",
1025
+ "value": "invalid"
1026
+ }
1027
+ ]
1028
+ },
1029
+ {
1030
+ "name": "unknown field /entities/4",
1031
+ "valid": false,
1032
+ "mutations": [
1033
+ {
1034
+ "op": "set",
1035
+ "path": "/entities/4/unexpected",
1036
+ "value": true
1037
+ }
1038
+ ]
1039
+ },
1040
+ {
1041
+ "name": "missing /entities/4/runtime/state",
1042
+ "valid": false,
1043
+ "mutations": [
1044
+ {
1045
+ "op": "remove",
1046
+ "path": "/entities/4/runtime/state"
1047
+ }
1048
+ ]
1049
+ },
1050
+ {
1051
+ "name": "unknown /entities/4/runtime/state",
1052
+ "valid": false,
1053
+ "mutations": [
1054
+ {
1055
+ "op": "set",
1056
+ "path": "/entities/4/runtime/state",
1057
+ "value": "invalid"
1058
+ }
1059
+ ]
1060
+ },
1061
+ {
1062
+ "name": "negative /entities/4/runtime/updatedAtMs",
1063
+ "valid": false,
1064
+ "mutations": [
1065
+ {
1066
+ "op": "set",
1067
+ "path": "/entities/4/runtime/updatedAtMs",
1068
+ "value": -1
1069
+ }
1070
+ ]
1071
+ },
1072
+ {
1073
+ "name": "unknown field /entities/4/runtime",
1074
+ "valid": false,
1075
+ "mutations": [
1076
+ {
1077
+ "op": "set",
1078
+ "path": "/entities/4/runtime/unexpected",
1079
+ "value": true
1080
+ }
1081
+ ]
1082
+ },
1083
+ {
1084
+ "name": "missing /entities/5/id",
1085
+ "valid": false,
1086
+ "mutations": [
1087
+ {
1088
+ "op": "remove",
1089
+ "path": "/entities/5/id"
1090
+ }
1091
+ ]
1092
+ },
1093
+ {
1094
+ "name": "missing /entities/5/kind",
1095
+ "valid": false,
1096
+ "mutations": [
1097
+ {
1098
+ "op": "remove",
1099
+ "path": "/entities/5/kind"
1100
+ }
1101
+ ]
1102
+ },
1103
+ {
1104
+ "name": "missing /entities/5/entityId",
1105
+ "valid": false,
1106
+ "mutations": [
1107
+ {
1108
+ "op": "remove",
1109
+ "path": "/entities/5/entityId"
1110
+ }
1111
+ ]
1112
+ },
1113
+ {
1114
+ "name": "missing /entities/5/integrationId",
1115
+ "valid": false,
1116
+ "mutations": [
1117
+ {
1118
+ "op": "remove",
1119
+ "path": "/entities/5/integrationId"
1120
+ }
1121
+ ]
1122
+ },
1123
+ {
1124
+ "name": "missing /entities/5/displayName",
1125
+ "valid": false,
1126
+ "mutations": [
1127
+ {
1128
+ "op": "remove",
1129
+ "path": "/entities/5/displayName"
1130
+ }
1131
+ ]
1132
+ },
1133
+ {
1134
+ "name": "missing /entities/5/enabled",
1135
+ "valid": false,
1136
+ "mutations": [
1137
+ {
1138
+ "op": "remove",
1139
+ "path": "/entities/5/enabled"
1140
+ }
1141
+ ]
1142
+ },
1143
+ {
1144
+ "name": "missing /entities/5/runtime",
1145
+ "valid": false,
1146
+ "mutations": [
1147
+ {
1148
+ "op": "remove",
1149
+ "path": "/entities/5/runtime"
1150
+ }
1151
+ ]
1152
+ },
1153
+ {
1154
+ "name": "empty /entities/5/id",
1155
+ "valid": false,
1156
+ "mutations": [
1157
+ {
1158
+ "op": "set",
1159
+ "path": "/entities/5/id",
1160
+ "value": ""
1161
+ }
1162
+ ]
1163
+ },
1164
+ {
1165
+ "name": "empty /entities/5/entityId",
1166
+ "valid": false,
1167
+ "mutations": [
1168
+ {
1169
+ "op": "set",
1170
+ "path": "/entities/5/entityId",
1171
+ "value": ""
1172
+ }
1173
+ ]
1174
+ },
1175
+ {
1176
+ "name": "empty /entities/5/integrationId",
1177
+ "valid": false,
1178
+ "mutations": [
1179
+ {
1180
+ "op": "set",
1181
+ "path": "/entities/5/integrationId",
1182
+ "value": ""
1183
+ }
1184
+ ]
1185
+ },
1186
+ {
1187
+ "name": "empty /entities/5/displayName",
1188
+ "valid": false,
1189
+ "mutations": [
1190
+ {
1191
+ "op": "set",
1192
+ "path": "/entities/5/displayName",
1193
+ "value": ""
1194
+ }
1195
+ ]
1196
+ },
1197
+ {
1198
+ "name": "unknown field /entities/5",
1199
+ "valid": false,
1200
+ "mutations": [
1201
+ {
1202
+ "op": "set",
1203
+ "path": "/entities/5/unexpected",
1204
+ "value": true
1205
+ }
1206
+ ]
1207
+ },
1208
+ {
1209
+ "name": "missing /entities/5/runtime/state",
1210
+ "valid": false,
1211
+ "mutations": [
1212
+ {
1213
+ "op": "remove",
1214
+ "path": "/entities/5/runtime/state"
1215
+ }
1216
+ ]
1217
+ },
1218
+ {
1219
+ "name": "unknown /entities/5/runtime/state",
1220
+ "valid": false,
1221
+ "mutations": [
1222
+ {
1223
+ "op": "set",
1224
+ "path": "/entities/5/runtime/state",
1225
+ "value": "invalid"
1226
+ }
1227
+ ]
1228
+ },
1229
+ {
1230
+ "name": "negative /entities/5/runtime/updatedAtMs",
1231
+ "valid": false,
1232
+ "mutations": [
1233
+ {
1234
+ "op": "set",
1235
+ "path": "/entities/5/runtime/updatedAtMs",
1236
+ "value": -1
1237
+ }
1238
+ ]
1239
+ },
1240
+ {
1241
+ "name": "unknown field /entities/5/runtime",
1242
+ "valid": false,
1243
+ "mutations": [
1244
+ {
1245
+ "op": "set",
1246
+ "path": "/entities/5/runtime/unexpected",
1247
+ "value": true
1248
+ }
1249
+ ]
1250
+ },
1251
+ {
1252
+ "name": "missing /edges/0/id",
1253
+ "valid": false,
1254
+ "mutations": [
1255
+ {
1256
+ "op": "remove",
1257
+ "path": "/edges/0/id"
1258
+ }
1259
+ ]
1260
+ },
1261
+ {
1262
+ "name": "missing /edges/0/source",
1263
+ "valid": false,
1264
+ "mutations": [
1265
+ {
1266
+ "op": "remove",
1267
+ "path": "/edges/0/source"
1268
+ }
1269
+ ]
1270
+ },
1271
+ {
1272
+ "name": "missing /edges/0/target",
1273
+ "valid": false,
1274
+ "mutations": [
1275
+ {
1276
+ "op": "remove",
1277
+ "path": "/edges/0/target"
1278
+ }
1279
+ ]
1280
+ },
1281
+ {
1282
+ "name": "missing /edges/0/relation",
1283
+ "valid": false,
1284
+ "mutations": [
1285
+ {
1286
+ "op": "remove",
1287
+ "path": "/edges/0/relation"
1288
+ }
1289
+ ]
1290
+ },
1291
+ {
1292
+ "name": "missing /edges/0/basis",
1293
+ "valid": false,
1294
+ "mutations": [
1295
+ {
1296
+ "op": "remove",
1297
+ "path": "/edges/0/basis"
1298
+ }
1299
+ ]
1300
+ },
1301
+ {
1302
+ "name": "missing /edges/0/durability",
1303
+ "valid": false,
1304
+ "mutations": [
1305
+ {
1306
+ "op": "remove",
1307
+ "path": "/edges/0/durability"
1308
+ }
1309
+ ]
1310
+ },
1311
+ {
1312
+ "name": "missing /edges/0/observation",
1313
+ "valid": false,
1314
+ "mutations": [
1315
+ {
1316
+ "op": "remove",
1317
+ "path": "/edges/0/observation"
1318
+ }
1319
+ ]
1320
+ },
1321
+ {
1322
+ "name": "empty /edges/0/id",
1323
+ "valid": false,
1324
+ "mutations": [
1325
+ {
1326
+ "op": "set",
1327
+ "path": "/edges/0/id",
1328
+ "value": ""
1329
+ }
1330
+ ]
1331
+ },
1332
+ {
1333
+ "name": "empty /edges/0/source",
1334
+ "valid": false,
1335
+ "mutations": [
1336
+ {
1337
+ "op": "set",
1338
+ "path": "/edges/0/source",
1339
+ "value": ""
1340
+ }
1341
+ ]
1342
+ },
1343
+ {
1344
+ "name": "empty /edges/0/target",
1345
+ "valid": false,
1346
+ "mutations": [
1347
+ {
1348
+ "op": "set",
1349
+ "path": "/edges/0/target",
1350
+ "value": ""
1351
+ }
1352
+ ]
1353
+ },
1354
+ {
1355
+ "name": "unknown /edges/0/relation",
1356
+ "valid": false,
1357
+ "mutations": [
1358
+ {
1359
+ "op": "set",
1360
+ "path": "/edges/0/relation",
1361
+ "value": "invalid"
1362
+ }
1363
+ ]
1364
+ },
1365
+ {
1366
+ "name": "unknown /edges/0/basis",
1367
+ "valid": false,
1368
+ "mutations": [
1369
+ {
1370
+ "op": "set",
1371
+ "path": "/edges/0/basis",
1372
+ "value": "invalid"
1373
+ }
1374
+ ]
1375
+ },
1376
+ {
1377
+ "name": "unknown /edges/0/durability",
1378
+ "valid": false,
1379
+ "mutations": [
1380
+ {
1381
+ "op": "set",
1382
+ "path": "/edges/0/durability",
1383
+ "value": "invalid"
1384
+ }
1385
+ ]
1386
+ },
1387
+ {
1388
+ "name": "unknown field /edges/0",
1389
+ "valid": false,
1390
+ "mutations": [
1391
+ {
1392
+ "op": "set",
1393
+ "path": "/edges/0/unexpected",
1394
+ "value": true
1395
+ }
1396
+ ]
1397
+ },
1398
+ {
1399
+ "name": "missing /edges/0/observation/state",
1400
+ "valid": false,
1401
+ "mutations": [
1402
+ {
1403
+ "op": "remove",
1404
+ "path": "/edges/0/observation/state"
1405
+ }
1406
+ ]
1407
+ },
1408
+ {
1409
+ "name": "missing /edges/0/observation/observedAtMs",
1410
+ "valid": false,
1411
+ "mutations": [
1412
+ {
1413
+ "op": "remove",
1414
+ "path": "/edges/0/observation/observedAtMs"
1415
+ }
1416
+ ]
1417
+ },
1418
+ {
1419
+ "name": "unknown /edges/0/observation/state",
1420
+ "valid": false,
1421
+ "mutations": [
1422
+ {
1423
+ "op": "set",
1424
+ "path": "/edges/0/observation/state",
1425
+ "value": "invalid"
1426
+ }
1427
+ ]
1428
+ },
1429
+ {
1430
+ "name": "negative /edges/0/observation/observedAtMs",
1431
+ "valid": false,
1432
+ "mutations": [
1433
+ {
1434
+ "op": "set",
1435
+ "path": "/edges/0/observation/observedAtMs",
1436
+ "value": -1
1437
+ }
1438
+ ]
1439
+ },
1440
+ {
1441
+ "name": "unknown field /edges/0/observation",
1442
+ "valid": false,
1443
+ "mutations": [
1444
+ {
1445
+ "op": "set",
1446
+ "path": "/edges/0/observation/unexpected",
1447
+ "value": true
1448
+ }
1449
+ ]
1450
+ },
1451
+ {
1452
+ "name": "self edge 0",
1453
+ "valid": false,
1454
+ "mutations": [
1455
+ {
1456
+ "op": "set",
1457
+ "path": "/edges/0/target",
1458
+ "value": "integration:basic.device"
1459
+ }
1460
+ ]
1461
+ },
1462
+ {
1463
+ "name": "dangling edge 0",
1464
+ "valid": false,
1465
+ "mutations": [
1466
+ {
1467
+ "op": "set",
1468
+ "path": "/edges/0/target",
1469
+ "value": "missing"
1470
+ }
1471
+ ]
1472
+ },
1473
+ {
1474
+ "name": "wrong endpoint kind 0",
1475
+ "valid": false,
1476
+ "mutations": [
1477
+ {
1478
+ "op": "set",
1479
+ "path": "/edges/0/target",
1480
+ "value": "integration:basic.device"
1481
+ }
1482
+ ]
1483
+ },
1484
+ {
1485
+ "name": "wrong basis 0",
1486
+ "valid": false,
1487
+ "mutations": [
1488
+ {
1489
+ "op": "set",
1490
+ "path": "/edges/0/basis",
1491
+ "value": "pluginBinding"
1492
+ }
1493
+ ]
1494
+ },
1495
+ {
1496
+ "name": "missing /edges/1/id",
1497
+ "valid": false,
1498
+ "mutations": [
1499
+ {
1500
+ "op": "remove",
1501
+ "path": "/edges/1/id"
1502
+ }
1503
+ ]
1504
+ },
1505
+ {
1506
+ "name": "missing /edges/1/source",
1507
+ "valid": false,
1508
+ "mutations": [
1509
+ {
1510
+ "op": "remove",
1511
+ "path": "/edges/1/source"
1512
+ }
1513
+ ]
1514
+ },
1515
+ {
1516
+ "name": "missing /edges/1/target",
1517
+ "valid": false,
1518
+ "mutations": [
1519
+ {
1520
+ "op": "remove",
1521
+ "path": "/edges/1/target"
1522
+ }
1523
+ ]
1524
+ },
1525
+ {
1526
+ "name": "missing /edges/1/relation",
1527
+ "valid": false,
1528
+ "mutations": [
1529
+ {
1530
+ "op": "remove",
1531
+ "path": "/edges/1/relation"
1532
+ }
1533
+ ]
1534
+ },
1535
+ {
1536
+ "name": "missing /edges/1/basis",
1537
+ "valid": false,
1538
+ "mutations": [
1539
+ {
1540
+ "op": "remove",
1541
+ "path": "/edges/1/basis"
1542
+ }
1543
+ ]
1544
+ },
1545
+ {
1546
+ "name": "missing /edges/1/durability",
1547
+ "valid": false,
1548
+ "mutations": [
1549
+ {
1550
+ "op": "remove",
1551
+ "path": "/edges/1/durability"
1552
+ }
1553
+ ]
1554
+ },
1555
+ {
1556
+ "name": "missing /edges/1/observation",
1557
+ "valid": false,
1558
+ "mutations": [
1559
+ {
1560
+ "op": "remove",
1561
+ "path": "/edges/1/observation"
1562
+ }
1563
+ ]
1564
+ },
1565
+ {
1566
+ "name": "empty /edges/1/id",
1567
+ "valid": false,
1568
+ "mutations": [
1569
+ {
1570
+ "op": "set",
1571
+ "path": "/edges/1/id",
1572
+ "value": ""
1573
+ }
1574
+ ]
1575
+ },
1576
+ {
1577
+ "name": "empty /edges/1/source",
1578
+ "valid": false,
1579
+ "mutations": [
1580
+ {
1581
+ "op": "set",
1582
+ "path": "/edges/1/source",
1583
+ "value": ""
1584
+ }
1585
+ ]
1586
+ },
1587
+ {
1588
+ "name": "empty /edges/1/target",
1589
+ "valid": false,
1590
+ "mutations": [
1591
+ {
1592
+ "op": "set",
1593
+ "path": "/edges/1/target",
1594
+ "value": ""
1595
+ }
1596
+ ]
1597
+ },
1598
+ {
1599
+ "name": "unknown /edges/1/relation",
1600
+ "valid": false,
1601
+ "mutations": [
1602
+ {
1603
+ "op": "set",
1604
+ "path": "/edges/1/relation",
1605
+ "value": "invalid"
1606
+ }
1607
+ ]
1608
+ },
1609
+ {
1610
+ "name": "unknown /edges/1/basis",
1611
+ "valid": false,
1612
+ "mutations": [
1613
+ {
1614
+ "op": "set",
1615
+ "path": "/edges/1/basis",
1616
+ "value": "invalid"
1617
+ }
1618
+ ]
1619
+ },
1620
+ {
1621
+ "name": "unknown /edges/1/durability",
1622
+ "valid": false,
1623
+ "mutations": [
1624
+ {
1625
+ "op": "set",
1626
+ "path": "/edges/1/durability",
1627
+ "value": "invalid"
1628
+ }
1629
+ ]
1630
+ },
1631
+ {
1632
+ "name": "unknown field /edges/1",
1633
+ "valid": false,
1634
+ "mutations": [
1635
+ {
1636
+ "op": "set",
1637
+ "path": "/edges/1/unexpected",
1638
+ "value": true
1639
+ }
1640
+ ]
1641
+ },
1642
+ {
1643
+ "name": "missing /edges/1/observation/state",
1644
+ "valid": false,
1645
+ "mutations": [
1646
+ {
1647
+ "op": "remove",
1648
+ "path": "/edges/1/observation/state"
1649
+ }
1650
+ ]
1651
+ },
1652
+ {
1653
+ "name": "missing /edges/1/observation/observedAtMs",
1654
+ "valid": false,
1655
+ "mutations": [
1656
+ {
1657
+ "op": "remove",
1658
+ "path": "/edges/1/observation/observedAtMs"
1659
+ }
1660
+ ]
1661
+ },
1662
+ {
1663
+ "name": "unknown /edges/1/observation/state",
1664
+ "valid": false,
1665
+ "mutations": [
1666
+ {
1667
+ "op": "set",
1668
+ "path": "/edges/1/observation/state",
1669
+ "value": "invalid"
1670
+ }
1671
+ ]
1672
+ },
1673
+ {
1674
+ "name": "negative /edges/1/observation/observedAtMs",
1675
+ "valid": false,
1676
+ "mutations": [
1677
+ {
1678
+ "op": "set",
1679
+ "path": "/edges/1/observation/observedAtMs",
1680
+ "value": -1
1681
+ }
1682
+ ]
1683
+ },
1684
+ {
1685
+ "name": "unknown field /edges/1/observation",
1686
+ "valid": false,
1687
+ "mutations": [
1688
+ {
1689
+ "op": "set",
1690
+ "path": "/edges/1/observation/unexpected",
1691
+ "value": true
1692
+ }
1693
+ ]
1694
+ },
1695
+ {
1696
+ "name": "self edge 1",
1697
+ "valid": false,
1698
+ "mutations": [
1699
+ {
1700
+ "op": "set",
1701
+ "path": "/edges/1/target",
1702
+ "value": "plugin:matter-1"
1703
+ }
1704
+ ]
1705
+ },
1706
+ {
1707
+ "name": "dangling edge 1",
1708
+ "valid": false,
1709
+ "mutations": [
1710
+ {
1711
+ "op": "set",
1712
+ "path": "/edges/1/target",
1713
+ "value": "missing"
1714
+ }
1715
+ ]
1716
+ },
1717
+ {
1718
+ "name": "wrong endpoint kind 1",
1719
+ "valid": false,
1720
+ "mutations": [
1721
+ {
1722
+ "op": "set",
1723
+ "path": "/edges/1/target",
1724
+ "value": "integration:basic.device"
1725
+ }
1726
+ ]
1727
+ },
1728
+ {
1729
+ "name": "wrong basis 1",
1730
+ "valid": false,
1731
+ "mutations": [
1732
+ {
1733
+ "op": "set",
1734
+ "path": "/edges/1/basis",
1735
+ "value": "integrationInstall"
1736
+ }
1737
+ ]
1738
+ },
1739
+ {
1740
+ "name": "missing /edges/2/id",
1741
+ "valid": false,
1742
+ "mutations": [
1743
+ {
1744
+ "op": "remove",
1745
+ "path": "/edges/2/id"
1746
+ }
1747
+ ]
1748
+ },
1749
+ {
1750
+ "name": "missing /edges/2/source",
1751
+ "valid": false,
1752
+ "mutations": [
1753
+ {
1754
+ "op": "remove",
1755
+ "path": "/edges/2/source"
1756
+ }
1757
+ ]
1758
+ },
1759
+ {
1760
+ "name": "missing /edges/2/target",
1761
+ "valid": false,
1762
+ "mutations": [
1763
+ {
1764
+ "op": "remove",
1765
+ "path": "/edges/2/target"
1766
+ }
1767
+ ]
1768
+ },
1769
+ {
1770
+ "name": "missing /edges/2/relation",
1771
+ "valid": false,
1772
+ "mutations": [
1773
+ {
1774
+ "op": "remove",
1775
+ "path": "/edges/2/relation"
1776
+ }
1777
+ ]
1778
+ },
1779
+ {
1780
+ "name": "missing /edges/2/basis",
1781
+ "valid": false,
1782
+ "mutations": [
1783
+ {
1784
+ "op": "remove",
1785
+ "path": "/edges/2/basis"
1786
+ }
1787
+ ]
1788
+ },
1789
+ {
1790
+ "name": "missing /edges/2/durability",
1791
+ "valid": false,
1792
+ "mutations": [
1793
+ {
1794
+ "op": "remove",
1795
+ "path": "/edges/2/durability"
1796
+ }
1797
+ ]
1798
+ },
1799
+ {
1800
+ "name": "missing /edges/2/observation",
1801
+ "valid": false,
1802
+ "mutations": [
1803
+ {
1804
+ "op": "remove",
1805
+ "path": "/edges/2/observation"
1806
+ }
1807
+ ]
1808
+ },
1809
+ {
1810
+ "name": "empty /edges/2/id",
1811
+ "valid": false,
1812
+ "mutations": [
1813
+ {
1814
+ "op": "set",
1815
+ "path": "/edges/2/id",
1816
+ "value": ""
1817
+ }
1818
+ ]
1819
+ },
1820
+ {
1821
+ "name": "empty /edges/2/source",
1822
+ "valid": false,
1823
+ "mutations": [
1824
+ {
1825
+ "op": "set",
1826
+ "path": "/edges/2/source",
1827
+ "value": ""
1828
+ }
1829
+ ]
1830
+ },
1831
+ {
1832
+ "name": "empty /edges/2/target",
1833
+ "valid": false,
1834
+ "mutations": [
1835
+ {
1836
+ "op": "set",
1837
+ "path": "/edges/2/target",
1838
+ "value": ""
1839
+ }
1840
+ ]
1841
+ },
1842
+ {
1843
+ "name": "unknown /edges/2/relation",
1844
+ "valid": false,
1845
+ "mutations": [
1846
+ {
1847
+ "op": "set",
1848
+ "path": "/edges/2/relation",
1849
+ "value": "invalid"
1850
+ }
1851
+ ]
1852
+ },
1853
+ {
1854
+ "name": "unknown /edges/2/basis",
1855
+ "valid": false,
1856
+ "mutations": [
1857
+ {
1858
+ "op": "set",
1859
+ "path": "/edges/2/basis",
1860
+ "value": "invalid"
1861
+ }
1862
+ ]
1863
+ },
1864
+ {
1865
+ "name": "unknown /edges/2/durability",
1866
+ "valid": false,
1867
+ "mutations": [
1868
+ {
1869
+ "op": "set",
1870
+ "path": "/edges/2/durability",
1871
+ "value": "invalid"
1872
+ }
1873
+ ]
1874
+ },
1875
+ {
1876
+ "name": "unknown field /edges/2",
1877
+ "valid": false,
1878
+ "mutations": [
1879
+ {
1880
+ "op": "set",
1881
+ "path": "/edges/2/unexpected",
1882
+ "value": true
1883
+ }
1884
+ ]
1885
+ },
1886
+ {
1887
+ "name": "missing /edges/2/observation/state",
1888
+ "valid": false,
1889
+ "mutations": [
1890
+ {
1891
+ "op": "remove",
1892
+ "path": "/edges/2/observation/state"
1893
+ }
1894
+ ]
1895
+ },
1896
+ {
1897
+ "name": "missing /edges/2/observation/observedAtMs",
1898
+ "valid": false,
1899
+ "mutations": [
1900
+ {
1901
+ "op": "remove",
1902
+ "path": "/edges/2/observation/observedAtMs"
1903
+ }
1904
+ ]
1905
+ },
1906
+ {
1907
+ "name": "unknown /edges/2/observation/state",
1908
+ "valid": false,
1909
+ "mutations": [
1910
+ {
1911
+ "op": "set",
1912
+ "path": "/edges/2/observation/state",
1913
+ "value": "invalid"
1914
+ }
1915
+ ]
1916
+ },
1917
+ {
1918
+ "name": "negative /edges/2/observation/observedAtMs",
1919
+ "valid": false,
1920
+ "mutations": [
1921
+ {
1922
+ "op": "set",
1923
+ "path": "/edges/2/observation/observedAtMs",
1924
+ "value": -1
1925
+ }
1926
+ ]
1927
+ },
1928
+ {
1929
+ "name": "unknown field /edges/2/observation",
1930
+ "valid": false,
1931
+ "mutations": [
1932
+ {
1933
+ "op": "set",
1934
+ "path": "/edges/2/observation/unexpected",
1935
+ "value": true
1936
+ }
1937
+ ]
1938
+ },
1939
+ {
1940
+ "name": "self edge 2",
1941
+ "valid": false,
1942
+ "mutations": [
1943
+ {
1944
+ "op": "set",
1945
+ "path": "/edges/2/target",
1946
+ "value": "plugin:matter-1"
1947
+ }
1948
+ ]
1949
+ },
1950
+ {
1951
+ "name": "dangling edge 2",
1952
+ "valid": false,
1953
+ "mutations": [
1954
+ {
1955
+ "op": "set",
1956
+ "path": "/edges/2/target",
1957
+ "value": "missing"
1958
+ }
1959
+ ]
1960
+ },
1961
+ {
1962
+ "name": "wrong endpoint kind 2",
1963
+ "valid": false,
1964
+ "mutations": [
1965
+ {
1966
+ "op": "set",
1967
+ "path": "/edges/2/target",
1968
+ "value": "integration:basic.device"
1969
+ }
1970
+ ]
1971
+ },
1972
+ {
1973
+ "name": "wrong basis 2",
1974
+ "valid": false,
1975
+ "mutations": [
1976
+ {
1977
+ "op": "set",
1978
+ "path": "/edges/2/basis",
1979
+ "value": "integrationInstall"
1980
+ }
1981
+ ]
1982
+ },
1983
+ {
1984
+ "name": "missing /edges/3/id",
1985
+ "valid": false,
1986
+ "mutations": [
1987
+ {
1988
+ "op": "remove",
1989
+ "path": "/edges/3/id"
1990
+ }
1991
+ ]
1992
+ },
1993
+ {
1994
+ "name": "missing /edges/3/source",
1995
+ "valid": false,
1996
+ "mutations": [
1997
+ {
1998
+ "op": "remove",
1999
+ "path": "/edges/3/source"
2000
+ }
2001
+ ]
2002
+ },
2003
+ {
2004
+ "name": "missing /edges/3/target",
2005
+ "valid": false,
2006
+ "mutations": [
2007
+ {
2008
+ "op": "remove",
2009
+ "path": "/edges/3/target"
2010
+ }
2011
+ ]
2012
+ },
2013
+ {
2014
+ "name": "missing /edges/3/relation",
2015
+ "valid": false,
2016
+ "mutations": [
2017
+ {
2018
+ "op": "remove",
2019
+ "path": "/edges/3/relation"
2020
+ }
2021
+ ]
2022
+ },
2023
+ {
2024
+ "name": "missing /edges/3/basis",
2025
+ "valid": false,
2026
+ "mutations": [
2027
+ {
2028
+ "op": "remove",
2029
+ "path": "/edges/3/basis"
2030
+ }
2031
+ ]
2032
+ },
2033
+ {
2034
+ "name": "missing /edges/3/durability",
2035
+ "valid": false,
2036
+ "mutations": [
2037
+ {
2038
+ "op": "remove",
2039
+ "path": "/edges/3/durability"
2040
+ }
2041
+ ]
2042
+ },
2043
+ {
2044
+ "name": "missing /edges/3/observation",
2045
+ "valid": false,
2046
+ "mutations": [
2047
+ {
2048
+ "op": "remove",
2049
+ "path": "/edges/3/observation"
2050
+ }
2051
+ ]
2052
+ },
2053
+ {
2054
+ "name": "empty /edges/3/id",
2055
+ "valid": false,
2056
+ "mutations": [
2057
+ {
2058
+ "op": "set",
2059
+ "path": "/edges/3/id",
2060
+ "value": ""
2061
+ }
2062
+ ]
2063
+ },
2064
+ {
2065
+ "name": "empty /edges/3/source",
2066
+ "valid": false,
2067
+ "mutations": [
2068
+ {
2069
+ "op": "set",
2070
+ "path": "/edges/3/source",
2071
+ "value": ""
2072
+ }
2073
+ ]
2074
+ },
2075
+ {
2076
+ "name": "empty /edges/3/target",
2077
+ "valid": false,
2078
+ "mutations": [
2079
+ {
2080
+ "op": "set",
2081
+ "path": "/edges/3/target",
2082
+ "value": ""
2083
+ }
2084
+ ]
2085
+ },
2086
+ {
2087
+ "name": "unknown /edges/3/relation",
2088
+ "valid": false,
2089
+ "mutations": [
2090
+ {
2091
+ "op": "set",
2092
+ "path": "/edges/3/relation",
2093
+ "value": "invalid"
2094
+ }
2095
+ ]
2096
+ },
2097
+ {
2098
+ "name": "unknown /edges/3/basis",
2099
+ "valid": false,
2100
+ "mutations": [
2101
+ {
2102
+ "op": "set",
2103
+ "path": "/edges/3/basis",
2104
+ "value": "invalid"
2105
+ }
2106
+ ]
2107
+ },
2108
+ {
2109
+ "name": "unknown /edges/3/durability",
2110
+ "valid": false,
2111
+ "mutations": [
2112
+ {
2113
+ "op": "set",
2114
+ "path": "/edges/3/durability",
2115
+ "value": "invalid"
2116
+ }
2117
+ ]
2118
+ },
2119
+ {
2120
+ "name": "unknown field /edges/3",
2121
+ "valid": false,
2122
+ "mutations": [
2123
+ {
2124
+ "op": "set",
2125
+ "path": "/edges/3/unexpected",
2126
+ "value": true
2127
+ }
2128
+ ]
2129
+ },
2130
+ {
2131
+ "name": "missing /edges/3/observation/state",
2132
+ "valid": false,
2133
+ "mutations": [
2134
+ {
2135
+ "op": "remove",
2136
+ "path": "/edges/3/observation/state"
2137
+ }
2138
+ ]
2139
+ },
2140
+ {
2141
+ "name": "missing /edges/3/observation/observedAtMs",
2142
+ "valid": false,
2143
+ "mutations": [
2144
+ {
2145
+ "op": "remove",
2146
+ "path": "/edges/3/observation/observedAtMs"
2147
+ }
2148
+ ]
2149
+ },
2150
+ {
2151
+ "name": "unknown /edges/3/observation/state",
2152
+ "valid": false,
2153
+ "mutations": [
2154
+ {
2155
+ "op": "set",
2156
+ "path": "/edges/3/observation/state",
2157
+ "value": "invalid"
2158
+ }
2159
+ ]
2160
+ },
2161
+ {
2162
+ "name": "negative /edges/3/observation/observedAtMs",
2163
+ "valid": false,
2164
+ "mutations": [
2165
+ {
2166
+ "op": "set",
2167
+ "path": "/edges/3/observation/observedAtMs",
2168
+ "value": -1
2169
+ }
2170
+ ]
2171
+ },
2172
+ {
2173
+ "name": "unknown field /edges/3/observation",
2174
+ "valid": false,
2175
+ "mutations": [
2176
+ {
2177
+ "op": "set",
2178
+ "path": "/edges/3/observation/unexpected",
2179
+ "value": true
2180
+ }
2181
+ ]
2182
+ },
2183
+ {
2184
+ "name": "self edge 3",
2185
+ "valid": false,
2186
+ "mutations": [
2187
+ {
2188
+ "op": "set",
2189
+ "path": "/edges/3/target",
2190
+ "value": "provider:mlinkMatter.device"
2191
+ }
2192
+ ]
2193
+ },
2194
+ {
2195
+ "name": "dangling edge 3",
2196
+ "valid": false,
2197
+ "mutations": [
2198
+ {
2199
+ "op": "set",
2200
+ "path": "/edges/3/target",
2201
+ "value": "missing"
2202
+ }
2203
+ ]
2204
+ },
2205
+ {
2206
+ "name": "wrong endpoint kind 3",
2207
+ "valid": false,
2208
+ "mutations": [
2209
+ {
2210
+ "op": "set",
2211
+ "path": "/edges/3/target",
2212
+ "value": "integration:basic.device"
2213
+ }
2214
+ ]
2215
+ },
2216
+ {
2217
+ "name": "wrong basis 3",
2218
+ "valid": false,
2219
+ "mutations": [
2220
+ {
2221
+ "op": "set",
2222
+ "path": "/edges/3/basis",
2223
+ "value": "integrationInstall"
2224
+ }
2225
+ ]
2226
+ },
2227
+ {
2228
+ "name": "missing /edges/4/id",
2229
+ "valid": false,
2230
+ "mutations": [
2231
+ {
2232
+ "op": "remove",
2233
+ "path": "/edges/4/id"
2234
+ }
2235
+ ]
2236
+ },
2237
+ {
2238
+ "name": "missing /edges/4/source",
2239
+ "valid": false,
2240
+ "mutations": [
2241
+ {
2242
+ "op": "remove",
2243
+ "path": "/edges/4/source"
2244
+ }
2245
+ ]
2246
+ },
2247
+ {
2248
+ "name": "missing /edges/4/target",
2249
+ "valid": false,
2250
+ "mutations": [
2251
+ {
2252
+ "op": "remove",
2253
+ "path": "/edges/4/target"
2254
+ }
2255
+ ]
2256
+ },
2257
+ {
2258
+ "name": "missing /edges/4/relation",
2259
+ "valid": false,
2260
+ "mutations": [
2261
+ {
2262
+ "op": "remove",
2263
+ "path": "/edges/4/relation"
2264
+ }
2265
+ ]
2266
+ },
2267
+ {
2268
+ "name": "missing /edges/4/basis",
2269
+ "valid": false,
2270
+ "mutations": [
2271
+ {
2272
+ "op": "remove",
2273
+ "path": "/edges/4/basis"
2274
+ }
2275
+ ]
2276
+ },
2277
+ {
2278
+ "name": "missing /edges/4/durability",
2279
+ "valid": false,
2280
+ "mutations": [
2281
+ {
2282
+ "op": "remove",
2283
+ "path": "/edges/4/durability"
2284
+ }
2285
+ ]
2286
+ },
2287
+ {
2288
+ "name": "missing /edges/4/observation",
2289
+ "valid": false,
2290
+ "mutations": [
2291
+ {
2292
+ "op": "remove",
2293
+ "path": "/edges/4/observation"
2294
+ }
2295
+ ]
2296
+ },
2297
+ {
2298
+ "name": "empty /edges/4/id",
2299
+ "valid": false,
2300
+ "mutations": [
2301
+ {
2302
+ "op": "set",
2303
+ "path": "/edges/4/id",
2304
+ "value": ""
2305
+ }
2306
+ ]
2307
+ },
2308
+ {
2309
+ "name": "empty /edges/4/source",
2310
+ "valid": false,
2311
+ "mutations": [
2312
+ {
2313
+ "op": "set",
2314
+ "path": "/edges/4/source",
2315
+ "value": ""
2316
+ }
2317
+ ]
2318
+ },
2319
+ {
2320
+ "name": "empty /edges/4/target",
2321
+ "valid": false,
2322
+ "mutations": [
2323
+ {
2324
+ "op": "set",
2325
+ "path": "/edges/4/target",
2326
+ "value": ""
2327
+ }
2328
+ ]
2329
+ },
2330
+ {
2331
+ "name": "unknown /edges/4/relation",
2332
+ "valid": false,
2333
+ "mutations": [
2334
+ {
2335
+ "op": "set",
2336
+ "path": "/edges/4/relation",
2337
+ "value": "invalid"
2338
+ }
2339
+ ]
2340
+ },
2341
+ {
2342
+ "name": "unknown /edges/4/basis",
2343
+ "valid": false,
2344
+ "mutations": [
2345
+ {
2346
+ "op": "set",
2347
+ "path": "/edges/4/basis",
2348
+ "value": "invalid"
2349
+ }
2350
+ ]
2351
+ },
2352
+ {
2353
+ "name": "unknown /edges/4/durability",
2354
+ "valid": false,
2355
+ "mutations": [
2356
+ {
2357
+ "op": "set",
2358
+ "path": "/edges/4/durability",
2359
+ "value": "invalid"
2360
+ }
2361
+ ]
2362
+ },
2363
+ {
2364
+ "name": "unknown field /edges/4",
2365
+ "valid": false,
2366
+ "mutations": [
2367
+ {
2368
+ "op": "set",
2369
+ "path": "/edges/4/unexpected",
2370
+ "value": true
2371
+ }
2372
+ ]
2373
+ },
2374
+ {
2375
+ "name": "missing /edges/4/observation/state",
2376
+ "valid": false,
2377
+ "mutations": [
2378
+ {
2379
+ "op": "remove",
2380
+ "path": "/edges/4/observation/state"
2381
+ }
2382
+ ]
2383
+ },
2384
+ {
2385
+ "name": "missing /edges/4/observation/observedAtMs",
2386
+ "valid": false,
2387
+ "mutations": [
2388
+ {
2389
+ "op": "remove",
2390
+ "path": "/edges/4/observation/observedAtMs"
2391
+ }
2392
+ ]
2393
+ },
2394
+ {
2395
+ "name": "unknown /edges/4/observation/state",
2396
+ "valid": false,
2397
+ "mutations": [
2398
+ {
2399
+ "op": "set",
2400
+ "path": "/edges/4/observation/state",
2401
+ "value": "invalid"
2402
+ }
2403
+ ]
2404
+ },
2405
+ {
2406
+ "name": "negative /edges/4/observation/observedAtMs",
2407
+ "valid": false,
2408
+ "mutations": [
2409
+ {
2410
+ "op": "set",
2411
+ "path": "/edges/4/observation/observedAtMs",
2412
+ "value": -1
2413
+ }
2414
+ ]
2415
+ },
2416
+ {
2417
+ "name": "unknown field /edges/4/observation",
2418
+ "valid": false,
2419
+ "mutations": [
2420
+ {
2421
+ "op": "set",
2422
+ "path": "/edges/4/observation/unexpected",
2423
+ "value": true
2424
+ }
2425
+ ]
2426
+ },
2427
+ {
2428
+ "name": "self edge 4",
2429
+ "valid": false,
2430
+ "mutations": [
2431
+ {
2432
+ "op": "set",
2433
+ "path": "/edges/4/target",
2434
+ "value": "connection:mlinkMatter.device:matter-1"
2435
+ }
2436
+ ]
2437
+ },
2438
+ {
2439
+ "name": "dangling edge 4",
2440
+ "valid": false,
2441
+ "mutations": [
2442
+ {
2443
+ "op": "set",
2444
+ "path": "/edges/4/target",
2445
+ "value": "missing"
2446
+ }
2447
+ ]
2448
+ },
2449
+ {
2450
+ "name": "wrong endpoint kind 4",
2451
+ "valid": false,
2452
+ "mutations": [
2453
+ {
2454
+ "op": "set",
2455
+ "path": "/edges/4/target",
2456
+ "value": "integration:basic.device"
2457
+ }
2458
+ ]
2459
+ },
2460
+ {
2461
+ "name": "wrong basis 4",
2462
+ "valid": false,
2463
+ "mutations": [
2464
+ {
2465
+ "op": "set",
2466
+ "path": "/edges/4/basis",
2467
+ "value": "integrationInstall"
2468
+ }
2469
+ ]
2470
+ },
2471
+ {
2472
+ "name": "missing /edges/5/id",
2473
+ "valid": false,
2474
+ "mutations": [
2475
+ {
2476
+ "op": "remove",
2477
+ "path": "/edges/5/id"
2478
+ }
2479
+ ]
2480
+ },
2481
+ {
2482
+ "name": "missing /edges/5/source",
2483
+ "valid": false,
2484
+ "mutations": [
2485
+ {
2486
+ "op": "remove",
2487
+ "path": "/edges/5/source"
2488
+ }
2489
+ ]
2490
+ },
2491
+ {
2492
+ "name": "missing /edges/5/target",
2493
+ "valid": false,
2494
+ "mutations": [
2495
+ {
2496
+ "op": "remove",
2497
+ "path": "/edges/5/target"
2498
+ }
2499
+ ]
2500
+ },
2501
+ {
2502
+ "name": "missing /edges/5/relation",
2503
+ "valid": false,
2504
+ "mutations": [
2505
+ {
2506
+ "op": "remove",
2507
+ "path": "/edges/5/relation"
2508
+ }
2509
+ ]
2510
+ },
2511
+ {
2512
+ "name": "missing /edges/5/basis",
2513
+ "valid": false,
2514
+ "mutations": [
2515
+ {
2516
+ "op": "remove",
2517
+ "path": "/edges/5/basis"
2518
+ }
2519
+ ]
2520
+ },
2521
+ {
2522
+ "name": "missing /edges/5/durability",
2523
+ "valid": false,
2524
+ "mutations": [
2525
+ {
2526
+ "op": "remove",
2527
+ "path": "/edges/5/durability"
2528
+ }
2529
+ ]
2530
+ },
2531
+ {
2532
+ "name": "missing /edges/5/observation",
2533
+ "valid": false,
2534
+ "mutations": [
2535
+ {
2536
+ "op": "remove",
2537
+ "path": "/edges/5/observation"
2538
+ }
2539
+ ]
2540
+ },
2541
+ {
2542
+ "name": "empty /edges/5/id",
2543
+ "valid": false,
2544
+ "mutations": [
2545
+ {
2546
+ "op": "set",
2547
+ "path": "/edges/5/id",
2548
+ "value": ""
2549
+ }
2550
+ ]
2551
+ },
2552
+ {
2553
+ "name": "empty /edges/5/source",
2554
+ "valid": false,
2555
+ "mutations": [
2556
+ {
2557
+ "op": "set",
2558
+ "path": "/edges/5/source",
2559
+ "value": ""
2560
+ }
2561
+ ]
2562
+ },
2563
+ {
2564
+ "name": "empty /edges/5/target",
2565
+ "valid": false,
2566
+ "mutations": [
2567
+ {
2568
+ "op": "set",
2569
+ "path": "/edges/5/target",
2570
+ "value": ""
2571
+ }
2572
+ ]
2573
+ },
2574
+ {
2575
+ "name": "unknown /edges/5/relation",
2576
+ "valid": false,
2577
+ "mutations": [
2578
+ {
2579
+ "op": "set",
2580
+ "path": "/edges/5/relation",
2581
+ "value": "invalid"
2582
+ }
2583
+ ]
2584
+ },
2585
+ {
2586
+ "name": "unknown /edges/5/basis",
2587
+ "valid": false,
2588
+ "mutations": [
2589
+ {
2590
+ "op": "set",
2591
+ "path": "/edges/5/basis",
2592
+ "value": "invalid"
2593
+ }
2594
+ ]
2595
+ },
2596
+ {
2597
+ "name": "unknown /edges/5/durability",
2598
+ "valid": false,
2599
+ "mutations": [
2600
+ {
2601
+ "op": "set",
2602
+ "path": "/edges/5/durability",
2603
+ "value": "invalid"
2604
+ }
2605
+ ]
2606
+ },
2607
+ {
2608
+ "name": "unknown field /edges/5",
2609
+ "valid": false,
2610
+ "mutations": [
2611
+ {
2612
+ "op": "set",
2613
+ "path": "/edges/5/unexpected",
2614
+ "value": true
2615
+ }
2616
+ ]
2617
+ },
2618
+ {
2619
+ "name": "missing /edges/5/observation/state",
2620
+ "valid": false,
2621
+ "mutations": [
2622
+ {
2623
+ "op": "remove",
2624
+ "path": "/edges/5/observation/state"
2625
+ }
2626
+ ]
2627
+ },
2628
+ {
2629
+ "name": "missing /edges/5/observation/observedAtMs",
2630
+ "valid": false,
2631
+ "mutations": [
2632
+ {
2633
+ "op": "remove",
2634
+ "path": "/edges/5/observation/observedAtMs"
2635
+ }
2636
+ ]
2637
+ },
2638
+ {
2639
+ "name": "unknown /edges/5/observation/state",
2640
+ "valid": false,
2641
+ "mutations": [
2642
+ {
2643
+ "op": "set",
2644
+ "path": "/edges/5/observation/state",
2645
+ "value": "invalid"
2646
+ }
2647
+ ]
2648
+ },
2649
+ {
2650
+ "name": "negative /edges/5/observation/observedAtMs",
2651
+ "valid": false,
2652
+ "mutations": [
2653
+ {
2654
+ "op": "set",
2655
+ "path": "/edges/5/observation/observedAtMs",
2656
+ "value": -1
2657
+ }
2658
+ ]
2659
+ },
2660
+ {
2661
+ "name": "unknown field /edges/5/observation",
2662
+ "valid": false,
2663
+ "mutations": [
2664
+ {
2665
+ "op": "set",
2666
+ "path": "/edges/5/observation/unexpected",
2667
+ "value": true
2668
+ }
2669
+ ]
2670
+ },
2671
+ {
2672
+ "name": "self edge 5",
2673
+ "valid": false,
2674
+ "mutations": [
2675
+ {
2676
+ "op": "set",
2677
+ "path": "/edges/5/target",
2678
+ "value": "source:matter:node-123"
2679
+ }
2680
+ ]
2681
+ },
2682
+ {
2683
+ "name": "dangling edge 5",
2684
+ "valid": false,
2685
+ "mutations": [
2686
+ {
2687
+ "op": "set",
2688
+ "path": "/edges/5/target",
2689
+ "value": "missing"
2690
+ }
2691
+ ]
2692
+ },
2693
+ {
2694
+ "name": "wrong endpoint kind 5",
2695
+ "valid": false,
2696
+ "mutations": [
2697
+ {
2698
+ "op": "set",
2699
+ "path": "/edges/5/target",
2700
+ "value": "integration:basic.device"
2701
+ }
2702
+ ]
2703
+ },
2704
+ {
2705
+ "name": "wrong basis 5",
2706
+ "valid": false,
2707
+ "mutations": [
2708
+ {
2709
+ "op": "set",
2710
+ "path": "/edges/5/basis",
2711
+ "value": "integrationInstall"
2712
+ }
2713
+ ]
2714
+ },
2715
+ {
2716
+ "name": "missing /edges/6/id",
2717
+ "valid": false,
2718
+ "mutations": [
2719
+ {
2720
+ "op": "remove",
2721
+ "path": "/edges/6/id"
2722
+ }
2723
+ ]
2724
+ },
2725
+ {
2726
+ "name": "missing /edges/6/source",
2727
+ "valid": false,
2728
+ "mutations": [
2729
+ {
2730
+ "op": "remove",
2731
+ "path": "/edges/6/source"
2732
+ }
2733
+ ]
2734
+ },
2735
+ {
2736
+ "name": "missing /edges/6/target",
2737
+ "valid": false,
2738
+ "mutations": [
2739
+ {
2740
+ "op": "remove",
2741
+ "path": "/edges/6/target"
2742
+ }
2743
+ ]
2744
+ },
2745
+ {
2746
+ "name": "missing /edges/6/relation",
2747
+ "valid": false,
2748
+ "mutations": [
2749
+ {
2750
+ "op": "remove",
2751
+ "path": "/edges/6/relation"
2752
+ }
2753
+ ]
2754
+ },
2755
+ {
2756
+ "name": "missing /edges/6/basis",
2757
+ "valid": false,
2758
+ "mutations": [
2759
+ {
2760
+ "op": "remove",
2761
+ "path": "/edges/6/basis"
2762
+ }
2763
+ ]
2764
+ },
2765
+ {
2766
+ "name": "missing /edges/6/durability",
2767
+ "valid": false,
2768
+ "mutations": [
2769
+ {
2770
+ "op": "remove",
2771
+ "path": "/edges/6/durability"
2772
+ }
2773
+ ]
2774
+ },
2775
+ {
2776
+ "name": "missing /edges/6/observation",
2777
+ "valid": false,
2778
+ "mutations": [
2779
+ {
2780
+ "op": "remove",
2781
+ "path": "/edges/6/observation"
2782
+ }
2783
+ ]
2784
+ },
2785
+ {
2786
+ "name": "empty /edges/6/id",
2787
+ "valid": false,
2788
+ "mutations": [
2789
+ {
2790
+ "op": "set",
2791
+ "path": "/edges/6/id",
2792
+ "value": ""
2793
+ }
2794
+ ]
2795
+ },
2796
+ {
2797
+ "name": "empty /edges/6/source",
2798
+ "valid": false,
2799
+ "mutations": [
2800
+ {
2801
+ "op": "set",
2802
+ "path": "/edges/6/source",
2803
+ "value": ""
2804
+ }
2805
+ ]
2806
+ },
2807
+ {
2808
+ "name": "empty /edges/6/target",
2809
+ "valid": false,
2810
+ "mutations": [
2811
+ {
2812
+ "op": "set",
2813
+ "path": "/edges/6/target",
2814
+ "value": ""
2815
+ }
2816
+ ]
2817
+ },
2818
+ {
2819
+ "name": "unknown /edges/6/relation",
2820
+ "valid": false,
2821
+ "mutations": [
2822
+ {
2823
+ "op": "set",
2824
+ "path": "/edges/6/relation",
2825
+ "value": "invalid"
2826
+ }
2827
+ ]
2828
+ },
2829
+ {
2830
+ "name": "unknown /edges/6/basis",
2831
+ "valid": false,
2832
+ "mutations": [
2833
+ {
2834
+ "op": "set",
2835
+ "path": "/edges/6/basis",
2836
+ "value": "invalid"
2837
+ }
2838
+ ]
2839
+ },
2840
+ {
2841
+ "name": "unknown /edges/6/durability",
2842
+ "valid": false,
2843
+ "mutations": [
2844
+ {
2845
+ "op": "set",
2846
+ "path": "/edges/6/durability",
2847
+ "value": "invalid"
2848
+ }
2849
+ ]
2850
+ },
2851
+ {
2852
+ "name": "unknown field /edges/6",
2853
+ "valid": false,
2854
+ "mutations": [
2855
+ {
2856
+ "op": "set",
2857
+ "path": "/edges/6/unexpected",
2858
+ "value": true
2859
+ }
2860
+ ]
2861
+ },
2862
+ {
2863
+ "name": "missing /edges/6/observation/state",
2864
+ "valid": false,
2865
+ "mutations": [
2866
+ {
2867
+ "op": "remove",
2868
+ "path": "/edges/6/observation/state"
2869
+ }
2870
+ ]
2871
+ },
2872
+ {
2873
+ "name": "missing /edges/6/observation/observedAtMs",
2874
+ "valid": false,
2875
+ "mutations": [
2876
+ {
2877
+ "op": "remove",
2878
+ "path": "/edges/6/observation/observedAtMs"
2879
+ }
2880
+ ]
2881
+ },
2882
+ {
2883
+ "name": "unknown /edges/6/observation/state",
2884
+ "valid": false,
2885
+ "mutations": [
2886
+ {
2887
+ "op": "set",
2888
+ "path": "/edges/6/observation/state",
2889
+ "value": "invalid"
2890
+ }
2891
+ ]
2892
+ },
2893
+ {
2894
+ "name": "negative /edges/6/observation/observedAtMs",
2895
+ "valid": false,
2896
+ "mutations": [
2897
+ {
2898
+ "op": "set",
2899
+ "path": "/edges/6/observation/observedAtMs",
2900
+ "value": -1
2901
+ }
2902
+ ]
2903
+ },
2904
+ {
2905
+ "name": "unknown field /edges/6/observation",
2906
+ "valid": false,
2907
+ "mutations": [
2908
+ {
2909
+ "op": "set",
2910
+ "path": "/edges/6/observation/unexpected",
2911
+ "value": true
2912
+ }
2913
+ ]
2914
+ },
2915
+ {
2916
+ "name": "self edge 6",
2917
+ "valid": false,
2918
+ "mutations": [
2919
+ {
2920
+ "op": "set",
2921
+ "path": "/edges/6/target",
2922
+ "value": "provider:mlinkMatter.device"
2923
+ }
2924
+ ]
2925
+ },
2926
+ {
2927
+ "name": "dangling edge 6",
2928
+ "valid": false,
2929
+ "mutations": [
2930
+ {
2931
+ "op": "set",
2932
+ "path": "/edges/6/target",
2933
+ "value": "missing"
2934
+ }
2935
+ ]
2936
+ },
2937
+ {
2938
+ "name": "wrong endpoint kind 6",
2939
+ "valid": false,
2940
+ "mutations": [
2941
+ {
2942
+ "op": "set",
2943
+ "path": "/edges/6/target",
2944
+ "value": "integration:basic.device"
2945
+ }
2946
+ ]
2947
+ },
2948
+ {
2949
+ "name": "wrong basis 6",
2950
+ "valid": false,
2951
+ "mutations": [
2952
+ {
2953
+ "op": "set",
2954
+ "path": "/edges/6/basis",
2955
+ "value": "integrationInstall"
2956
+ }
2957
+ ]
2958
+ },
2959
+ {
2960
+ "name": "missing /edges/7/id",
2961
+ "valid": false,
2962
+ "mutations": [
2963
+ {
2964
+ "op": "remove",
2965
+ "path": "/edges/7/id"
2966
+ }
2967
+ ]
2968
+ },
2969
+ {
2970
+ "name": "missing /edges/7/source",
2971
+ "valid": false,
2972
+ "mutations": [
2973
+ {
2974
+ "op": "remove",
2975
+ "path": "/edges/7/source"
2976
+ }
2977
+ ]
2978
+ },
2979
+ {
2980
+ "name": "missing /edges/7/target",
2981
+ "valid": false,
2982
+ "mutations": [
2983
+ {
2984
+ "op": "remove",
2985
+ "path": "/edges/7/target"
2986
+ }
2987
+ ]
2988
+ },
2989
+ {
2990
+ "name": "missing /edges/7/relation",
2991
+ "valid": false,
2992
+ "mutations": [
2993
+ {
2994
+ "op": "remove",
2995
+ "path": "/edges/7/relation"
2996
+ }
2997
+ ]
2998
+ },
2999
+ {
3000
+ "name": "missing /edges/7/basis",
3001
+ "valid": false,
3002
+ "mutations": [
3003
+ {
3004
+ "op": "remove",
3005
+ "path": "/edges/7/basis"
3006
+ }
3007
+ ]
3008
+ },
3009
+ {
3010
+ "name": "missing /edges/7/durability",
3011
+ "valid": false,
3012
+ "mutations": [
3013
+ {
3014
+ "op": "remove",
3015
+ "path": "/edges/7/durability"
3016
+ }
3017
+ ]
3018
+ },
3019
+ {
3020
+ "name": "missing /edges/7/observation",
3021
+ "valid": false,
3022
+ "mutations": [
3023
+ {
3024
+ "op": "remove",
3025
+ "path": "/edges/7/observation"
3026
+ }
3027
+ ]
3028
+ },
3029
+ {
3030
+ "name": "empty /edges/7/id",
3031
+ "valid": false,
3032
+ "mutations": [
3033
+ {
3034
+ "op": "set",
3035
+ "path": "/edges/7/id",
3036
+ "value": ""
3037
+ }
3038
+ ]
3039
+ },
3040
+ {
3041
+ "name": "empty /edges/7/source",
3042
+ "valid": false,
3043
+ "mutations": [
3044
+ {
3045
+ "op": "set",
3046
+ "path": "/edges/7/source",
3047
+ "value": ""
3048
+ }
3049
+ ]
3050
+ },
3051
+ {
3052
+ "name": "empty /edges/7/target",
3053
+ "valid": false,
3054
+ "mutations": [
3055
+ {
3056
+ "op": "set",
3057
+ "path": "/edges/7/target",
3058
+ "value": ""
3059
+ }
3060
+ ]
3061
+ },
3062
+ {
3063
+ "name": "unknown /edges/7/relation",
3064
+ "valid": false,
3065
+ "mutations": [
3066
+ {
3067
+ "op": "set",
3068
+ "path": "/edges/7/relation",
3069
+ "value": "invalid"
3070
+ }
3071
+ ]
3072
+ },
3073
+ {
3074
+ "name": "unknown /edges/7/basis",
3075
+ "valid": false,
3076
+ "mutations": [
3077
+ {
3078
+ "op": "set",
3079
+ "path": "/edges/7/basis",
3080
+ "value": "invalid"
3081
+ }
3082
+ ]
3083
+ },
3084
+ {
3085
+ "name": "unknown /edges/7/durability",
3086
+ "valid": false,
3087
+ "mutations": [
3088
+ {
3089
+ "op": "set",
3090
+ "path": "/edges/7/durability",
3091
+ "value": "invalid"
3092
+ }
3093
+ ]
3094
+ },
3095
+ {
3096
+ "name": "unknown field /edges/7",
3097
+ "valid": false,
3098
+ "mutations": [
3099
+ {
3100
+ "op": "set",
3101
+ "path": "/edges/7/unexpected",
3102
+ "value": true
3103
+ }
3104
+ ]
3105
+ },
3106
+ {
3107
+ "name": "missing /edges/7/observation/state",
3108
+ "valid": false,
3109
+ "mutations": [
3110
+ {
3111
+ "op": "remove",
3112
+ "path": "/edges/7/observation/state"
3113
+ }
3114
+ ]
3115
+ },
3116
+ {
3117
+ "name": "missing /edges/7/observation/observedAtMs",
3118
+ "valid": false,
3119
+ "mutations": [
3120
+ {
3121
+ "op": "remove",
3122
+ "path": "/edges/7/observation/observedAtMs"
3123
+ }
3124
+ ]
3125
+ },
3126
+ {
3127
+ "name": "unknown /edges/7/observation/state",
3128
+ "valid": false,
3129
+ "mutations": [
3130
+ {
3131
+ "op": "set",
3132
+ "path": "/edges/7/observation/state",
3133
+ "value": "invalid"
3134
+ }
3135
+ ]
3136
+ },
3137
+ {
3138
+ "name": "negative /edges/7/observation/observedAtMs",
3139
+ "valid": false,
3140
+ "mutations": [
3141
+ {
3142
+ "op": "set",
3143
+ "path": "/edges/7/observation/observedAtMs",
3144
+ "value": -1
3145
+ }
3146
+ ]
3147
+ },
3148
+ {
3149
+ "name": "unknown field /edges/7/observation",
3150
+ "valid": false,
3151
+ "mutations": [
3152
+ {
3153
+ "op": "set",
3154
+ "path": "/edges/7/observation/unexpected",
3155
+ "value": true
3156
+ }
3157
+ ]
3158
+ },
3159
+ {
3160
+ "name": "self edge 7",
3161
+ "valid": false,
3162
+ "mutations": [
3163
+ {
3164
+ "op": "set",
3165
+ "path": "/edges/7/target",
3166
+ "value": "connection:mlinkMatter.device:matter-1"
3167
+ }
3168
+ ]
3169
+ },
3170
+ {
3171
+ "name": "dangling edge 7",
3172
+ "valid": false,
3173
+ "mutations": [
3174
+ {
3175
+ "op": "set",
3176
+ "path": "/edges/7/target",
3177
+ "value": "missing"
3178
+ }
3179
+ ]
3180
+ },
3181
+ {
3182
+ "name": "wrong endpoint kind 7",
3183
+ "valid": false,
3184
+ "mutations": [
3185
+ {
3186
+ "op": "set",
3187
+ "path": "/edges/7/target",
3188
+ "value": "integration:basic.device"
3189
+ }
3190
+ ]
3191
+ },
3192
+ {
3193
+ "name": "wrong basis 7",
3194
+ "valid": false,
3195
+ "mutations": [
3196
+ {
3197
+ "op": "set",
3198
+ "path": "/edges/7/basis",
3199
+ "value": "integrationInstall"
3200
+ }
3201
+ ]
3202
+ },
3203
+ {
3204
+ "name": "duplicate entity",
3205
+ "valid": false,
3206
+ "mutations": [
3207
+ {
3208
+ "op": "append",
3209
+ "path": "/entities",
3210
+ "value": {
3211
+ "kind": "provider",
3212
+ "id": "provider:mlinkMatter.device",
3213
+ "integrationId": "mlinkMatter.device",
3214
+ "displayName": "Matter",
3215
+ "mode": "local",
3216
+ "multiConnect": false
3217
+ }
3218
+ }
3219
+ ]
3220
+ },
3221
+ {
3222
+ "name": "multiple roots",
3223
+ "valid": false,
3224
+ "mutations": [
3225
+ {
3226
+ "op": "append",
3227
+ "path": "/entities",
3228
+ "value": {
3229
+ "kind": "deviceIntegration",
3230
+ "id": "other-root",
3231
+ "integrationId": "basic.device",
3232
+ "displayName": "Devices"
3233
+ }
3234
+ }
3235
+ ]
3236
+ },
3237
+ {
3238
+ "name": "duplicate edge",
3239
+ "valid": false,
3240
+ "mutations": [
3241
+ {
3242
+ "op": "append",
3243
+ "path": "/edges",
3244
+ "value": {
3245
+ "id": "edge:integration-provider",
3246
+ "source": "integration:basic.device",
3247
+ "target": "provider:mlinkMatter.device",
3248
+ "relation": "integration-provider",
3249
+ "basis": "integrationInstall",
3250
+ "durability": "durable",
3251
+ "observation": {
3252
+ "state": "connected",
3253
+ "observedAtMs": 1777777777000
3254
+ }
3255
+ }
3256
+ }
3257
+ ]
3258
+ },
3259
+ {
3260
+ "name": "cross integration",
3261
+ "valid": false,
3262
+ "mutations": [
3263
+ {
3264
+ "op": "set",
3265
+ "path": "/entities/1/integrationId",
3266
+ "value": "other"
3267
+ }
3268
+ ]
3269
+ },
3270
+ {
3271
+ "name": "partial without issues",
3272
+ "valid": false,
3273
+ "mutations": [
3274
+ {
3275
+ "op": "set",
3276
+ "path": "/completeness",
3277
+ "value": "partial"
3278
+ }
3279
+ ]
3280
+ },
3281
+ {
3282
+ "name": "complete with issues",
3283
+ "valid": false,
3284
+ "mutations": [
3285
+ {
3286
+ "op": "set",
3287
+ "path": "/issues",
3288
+ "value": [
3289
+ {
3290
+ "code": "issue",
3291
+ "message": "Unavailable"
3292
+ }
3293
+ ]
3294
+ }
3295
+ ]
3296
+ },
3297
+ {
3298
+ "name": "dangling issue",
3299
+ "valid": false,
3300
+ "mutations": [
3301
+ {
3302
+ "op": "set",
3303
+ "path": "/completeness",
3304
+ "value": "partial"
3305
+ },
3306
+ {
3307
+ "op": "set",
3308
+ "path": "/issues",
3309
+ "value": [
3310
+ {
3311
+ "code": "issue",
3312
+ "message": "Unavailable",
3313
+ "entityId": "missing"
3314
+ }
3315
+ ]
3316
+ }
3317
+ ]
3318
+ },
3319
+ {
3320
+ "name": "valid partial view",
3321
+ "valid": true,
3322
+ "mutations": [
3323
+ {
3324
+ "op": "set",
3325
+ "path": "/completeness",
3326
+ "value": "partial"
3327
+ },
3328
+ {
3329
+ "op": "set",
3330
+ "path": "/issues",
3331
+ "value": [
3332
+ {
3333
+ "code": "issue",
3334
+ "message": "Unavailable",
3335
+ "entityId": "provider:mlinkMatter.device"
3336
+ }
3337
+ ]
3338
+ }
3339
+ ]
3340
+ },
3341
+ {
3342
+ "name": "unknown status is valid",
3343
+ "valid": true,
3344
+ "mutations": [
3345
+ {
3346
+ "op": "set",
3347
+ "path": "/entities/2/runtime/state",
3348
+ "value": "unknown"
3349
+ }
3350
+ ]
3351
+ }
3352
+ ]
3353
+ }