@wildwinter/toolkit 0.1.0 → 0.2.1

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,1129 @@
1
+ {
2
+ "about": "Manifest validation. Each case gives a manifest and every problem manifestProblems reports for it, by path and code, in the order reported. A case with no problems is a manifest that must pass.",
3
+ "cases": [
4
+ {
5
+ "name": "a minimal manifest passes",
6
+ "manifest": {
7
+ "schema": "wildwinter/extension@0",
8
+ "id": "probe",
9
+ "name": "Probe",
10
+ "version": "1.0.0",
11
+ "targets": {
12
+ "storylets": {
13
+ "card": {
14
+ "fields": [
15
+ {
16
+ "name": "mood",
17
+ "type": "text"
18
+ }
19
+ ]
20
+ }
21
+ }
22
+ }
23
+ },
24
+ "problems": []
25
+ },
26
+ {
27
+ "name": "every type, a claim and a setting pass together",
28
+ "manifest": {
29
+ "schema": "wildwinter/extension@0",
30
+ "id": "probe",
31
+ "name": "Probe",
32
+ "version": "2.1.0",
33
+ "docs": "https://example.com/probe",
34
+ "settings": [
35
+ {
36
+ "name": "moodField",
37
+ "label": "Mood field",
38
+ "default": "mood"
39
+ }
40
+ ],
41
+ "targets": {
42
+ "storylets": {
43
+ "card": {
44
+ "fields": [
45
+ {
46
+ "name": "note",
47
+ "type": "text",
48
+ "label": "Note",
49
+ "help": "A line for the crew."
50
+ },
51
+ {
52
+ "name": "body",
53
+ "type": "multiline",
54
+ "editorOnly": true
55
+ },
56
+ {
57
+ "name": "weight",
58
+ "type": "number",
59
+ "min": 0,
60
+ "max": 10,
61
+ "default": 1
62
+ },
63
+ {
64
+ "name": "loud",
65
+ "type": "boolean",
66
+ "required": true
67
+ },
68
+ {
69
+ "name": "tone",
70
+ "type": "enum",
71
+ "values": [
72
+ "calm",
73
+ "tense"
74
+ ],
75
+ "valueHelp": {
76
+ "calm": "Unhurried."
77
+ }
78
+ },
79
+ {
80
+ "name": "marks",
81
+ "type": "flags",
82
+ "values": [
83
+ "night",
84
+ "rain"
85
+ ],
86
+ "default": [
87
+ "rain"
88
+ ]
89
+ },
90
+ {
91
+ "name": "act",
92
+ "type": "quality",
93
+ "stages": [
94
+ "setup",
95
+ "turn",
96
+ "close"
97
+ ],
98
+ "renamedStages": {
99
+ "opening": "setup"
100
+ }
101
+ },
102
+ {
103
+ "name": "next",
104
+ "type": "reference",
105
+ "to": "card"
106
+ },
107
+ {
108
+ "name": "cue",
109
+ "type": "record",
110
+ "fields": [
111
+ {
112
+ "name": "sound",
113
+ "type": "text"
114
+ },
115
+ {
116
+ "name": "gain",
117
+ "type": "number"
118
+ }
119
+ ]
120
+ },
121
+ {
122
+ "name": "byTag",
123
+ "type": "map",
124
+ "key": {
125
+ "type": "reference",
126
+ "to": "tag"
127
+ },
128
+ "of": {
129
+ "type": "number"
130
+ }
131
+ },
132
+ {
133
+ "name": "byName",
134
+ "type": "map",
135
+ "key": {
136
+ "type": "text"
137
+ },
138
+ "of": {
139
+ "type": "record",
140
+ "fields": [
141
+ {
142
+ "name": "look",
143
+ "type": "text"
144
+ }
145
+ ]
146
+ }
147
+ },
148
+ {
149
+ "name": "beats",
150
+ "type": "list",
151
+ "id": "id",
152
+ "of": {
153
+ "type": "record",
154
+ "fields": [
155
+ {
156
+ "name": "id",
157
+ "type": "text"
158
+ },
159
+ {
160
+ "name": "at",
161
+ "type": "number"
162
+ }
163
+ ]
164
+ }
165
+ },
166
+ {
167
+ "name": "words",
168
+ "type": "list",
169
+ "of": {
170
+ "type": "text"
171
+ }
172
+ }
173
+ ],
174
+ "claims": [
175
+ {
176
+ "setting": "moodField",
177
+ "type": "enum",
178
+ "values": [
179
+ "calm",
180
+ "tense"
181
+ ],
182
+ "help": "The card's mood."
183
+ }
184
+ ]
185
+ },
186
+ "project": {
187
+ "fields": [
188
+ {
189
+ "name": "studio",
190
+ "type": "text"
191
+ }
192
+ ]
193
+ }
194
+ },
195
+ "patter": {
196
+ "line": {
197
+ "fields": [
198
+ {
199
+ "name": "to",
200
+ "type": "reference",
201
+ "to": "cast"
202
+ }
203
+ ]
204
+ }
205
+ }
206
+ }
207
+ },
208
+ "problems": []
209
+ },
210
+ {
211
+ "name": "identity is checked",
212
+ "manifest": {
213
+ "schema": "wildwinter/extension@1",
214
+ "id": "Probe Two",
215
+ "name": " ",
216
+ "version": "1.0",
217
+ "docs": 3,
218
+ "targets": {
219
+ "storylets": {
220
+ "card": {
221
+ "fields": []
222
+ }
223
+ }
224
+ }
225
+ },
226
+ "problems": [
227
+ {
228
+ "path": "schema",
229
+ "code": "schema"
230
+ },
231
+ {
232
+ "path": "id",
233
+ "code": "id"
234
+ },
235
+ {
236
+ "path": "name",
237
+ "code": "name"
238
+ },
239
+ {
240
+ "path": "version",
241
+ "code": "version"
242
+ },
243
+ {
244
+ "path": "docs",
245
+ "code": "docs"
246
+ }
247
+ ]
248
+ },
249
+ {
250
+ "name": "a manifest must target something it knows",
251
+ "manifest": {
252
+ "schema": "wildwinter/extension@0",
253
+ "id": "probe",
254
+ "name": "Probe",
255
+ "version": "1.0.0",
256
+ "targets": {
257
+ "ink": {
258
+ "knot": {}
259
+ },
260
+ "storylets": {
261
+ "scene": {}
262
+ }
263
+ }
264
+ },
265
+ "problems": [
266
+ {
267
+ "path": "targets.ink",
268
+ "code": "unknown-host"
269
+ },
270
+ {
271
+ "path": "targets.storylets.scene",
272
+ "code": "unknown-kind"
273
+ }
274
+ ]
275
+ },
276
+ {
277
+ "name": "no targets at all",
278
+ "manifest": {
279
+ "schema": "wildwinter/extension@0",
280
+ "id": "probe",
281
+ "name": "Probe",
282
+ "version": "1.0.0",
283
+ "targets": {}
284
+ },
285
+ "problems": [
286
+ {
287
+ "path": "targets",
288
+ "code": "no-targets"
289
+ }
290
+ ]
291
+ },
292
+ {
293
+ "name": "field names are identifiers, once each",
294
+ "manifest": {
295
+ "schema": "wildwinter/extension@0",
296
+ "id": "probe",
297
+ "name": "Probe",
298
+ "version": "1.0.0",
299
+ "targets": {
300
+ "storylets": {
301
+ "card": {
302
+ "fields": [
303
+ {
304
+ "name": "mood",
305
+ "type": "text"
306
+ },
307
+ {
308
+ "name": "mood",
309
+ "type": "number"
310
+ },
311
+ {
312
+ "name": "9lives",
313
+ "type": "text"
314
+ }
315
+ ]
316
+ }
317
+ }
318
+ }
319
+ },
320
+ "problems": [
321
+ {
322
+ "path": "targets.storylets.card.fields[1].name",
323
+ "code": "duplicate-field"
324
+ },
325
+ {
326
+ "path": "targets.storylets.card.fields[2].name",
327
+ "code": "field-name"
328
+ }
329
+ ]
330
+ },
331
+ {
332
+ "name": "the text type is spelled text, and an unknown type is refused",
333
+ "manifest": {
334
+ "schema": "wildwinter/extension@0",
335
+ "id": "probe",
336
+ "name": "Probe",
337
+ "version": "1.0.0",
338
+ "targets": {
339
+ "storylets": {
340
+ "card": {
341
+ "fields": [
342
+ {
343
+ "name": "a",
344
+ "type": "string"
345
+ },
346
+ {
347
+ "name": "b",
348
+ "type": "colour"
349
+ }
350
+ ]
351
+ }
352
+ }
353
+ }
354
+ },
355
+ "problems": [
356
+ {
357
+ "path": "targets.storylets.card.fields[0].type",
358
+ "code": "string-type"
359
+ },
360
+ {
361
+ "path": "targets.storylets.card.fields[1].type",
362
+ "code": "unknown-type"
363
+ }
364
+ ]
365
+ },
366
+ {
367
+ "name": "enum and flags values: some, none empty, none twice",
368
+ "manifest": {
369
+ "schema": "wildwinter/extension@0",
370
+ "id": "probe",
371
+ "name": "Probe",
372
+ "version": "1.0.0",
373
+ "targets": {
374
+ "storylets": {
375
+ "card": {
376
+ "fields": [
377
+ {
378
+ "name": "a",
379
+ "type": "enum",
380
+ "values": []
381
+ },
382
+ {
383
+ "name": "b",
384
+ "type": "flags",
385
+ "values": [
386
+ "x",
387
+ "",
388
+ "x"
389
+ ]
390
+ },
391
+ {
392
+ "name": "c",
393
+ "type": "enum"
394
+ }
395
+ ]
396
+ }
397
+ }
398
+ }
399
+ },
400
+ "problems": [
401
+ {
402
+ "path": "targets.storylets.card.fields[0].values",
403
+ "code": "values-empty"
404
+ },
405
+ {
406
+ "path": "targets.storylets.card.fields[1].values[1]",
407
+ "code": "value-empty"
408
+ },
409
+ {
410
+ "path": "targets.storylets.card.fields[1].values[2]",
411
+ "code": "value-duplicate"
412
+ },
413
+ {
414
+ "path": "targets.storylets.card.fields[2].values",
415
+ "code": "values-empty"
416
+ }
417
+ ]
418
+ },
419
+ {
420
+ "name": "a quality's ladder follows the kernel's rule",
421
+ "manifest": {
422
+ "schema": "wildwinter/extension@0",
423
+ "id": "probe",
424
+ "name": "Probe",
425
+ "version": "1.0.0",
426
+ "targets": {
427
+ "storylets": {
428
+ "card": {
429
+ "fields": [
430
+ {
431
+ "name": "a",
432
+ "type": "quality",
433
+ "stages": [
434
+ "only"
435
+ ]
436
+ },
437
+ {
438
+ "name": "b",
439
+ "type": "quality",
440
+ "stages": [
441
+ "x",
442
+ "x"
443
+ ]
444
+ },
445
+ {
446
+ "name": "c",
447
+ "type": "quality",
448
+ "stages": [
449
+ "x",
450
+ "y"
451
+ ],
452
+ "default": "z"
453
+ }
454
+ ]
455
+ }
456
+ }
457
+ }
458
+ },
459
+ "problems": [
460
+ {
461
+ "path": "targets.storylets.card.fields[0].stages",
462
+ "code": "quality-too-few-stages"
463
+ },
464
+ {
465
+ "path": "targets.storylets.card.fields[1].stages",
466
+ "code": "quality-duplicate-stage"
467
+ },
468
+ {
469
+ "path": "targets.storylets.card.fields[2].default",
470
+ "code": "default-misfit"
471
+ }
472
+ ]
473
+ },
474
+ {
475
+ "name": "renamed stages map old names to current stages",
476
+ "manifest": {
477
+ "schema": "wildwinter/extension@0",
478
+ "id": "probe",
479
+ "name": "Probe",
480
+ "version": "1.0.0",
481
+ "targets": {
482
+ "storylets": {
483
+ "card": {
484
+ "fields": [
485
+ {
486
+ "name": "act",
487
+ "type": "quality",
488
+ "stages": [
489
+ "setup",
490
+ "turn"
491
+ ],
492
+ "renamedStages": {
493
+ "turn": "setup",
494
+ "old": "gone"
495
+ }
496
+ },
497
+ {
498
+ "name": "tone",
499
+ "type": "enum",
500
+ "values": [
501
+ "a",
502
+ "b"
503
+ ],
504
+ "renamedStages": {
505
+ "x": "a"
506
+ }
507
+ }
508
+ ]
509
+ }
510
+ }
511
+ }
512
+ },
513
+ "problems": [
514
+ {
515
+ "path": "targets.storylets.card.fields[0].renamedStages.turn",
516
+ "code": "renamed-stages"
517
+ },
518
+ {
519
+ "path": "targets.storylets.card.fields[0].renamedStages.old",
520
+ "code": "renamed-stages"
521
+ },
522
+ {
523
+ "path": "targets.storylets.card.fields[1].renamedStages",
524
+ "code": "renamed-stages"
525
+ }
526
+ ]
527
+ },
528
+ {
529
+ "name": "value help names only values the field has",
530
+ "manifest": {
531
+ "schema": "wildwinter/extension@0",
532
+ "id": "probe",
533
+ "name": "Probe",
534
+ "version": "1.0.0",
535
+ "targets": {
536
+ "storylets": {
537
+ "card": {
538
+ "fields": [
539
+ {
540
+ "name": "tone",
541
+ "type": "enum",
542
+ "values": [
543
+ "a",
544
+ "b"
545
+ ],
546
+ "valueHelp": {
547
+ "a": "Fine.",
548
+ "c": "No such value."
549
+ }
550
+ },
551
+ {
552
+ "name": "n",
553
+ "type": "number",
554
+ "valueHelp": {
555
+ "1": "One."
556
+ }
557
+ }
558
+ ]
559
+ }
560
+ }
561
+ }
562
+ },
563
+ "problems": [
564
+ {
565
+ "path": "targets.storylets.card.fields[0].valueHelp.c",
566
+ "code": "value-help"
567
+ },
568
+ {
569
+ "path": "targets.storylets.card.fields[1].valueHelp",
570
+ "code": "value-help"
571
+ }
572
+ ]
573
+ },
574
+ {
575
+ "name": "a reference names a kind its host can point at",
576
+ "manifest": {
577
+ "schema": "wildwinter/extension@0",
578
+ "id": "probe",
579
+ "name": "Probe",
580
+ "version": "1.0.0",
581
+ "targets": {
582
+ "storylets": {
583
+ "card": {
584
+ "fields": [
585
+ {
586
+ "name": "who",
587
+ "type": "reference",
588
+ "to": "cast"
589
+ },
590
+ {
591
+ "name": "where",
592
+ "type": "reference"
593
+ }
594
+ ]
595
+ }
596
+ },
597
+ "patter": {
598
+ "line": {
599
+ "fields": [
600
+ {
601
+ "name": "card",
602
+ "type": "reference",
603
+ "to": "card"
604
+ }
605
+ ]
606
+ }
607
+ }
608
+ }
609
+ },
610
+ "problems": [
611
+ {
612
+ "path": "targets.storylets.card.fields[0].to",
613
+ "code": "reference-to"
614
+ },
615
+ {
616
+ "path": "targets.storylets.card.fields[1].to",
617
+ "code": "reference-to"
618
+ },
619
+ {
620
+ "path": "targets.patter.line.fields[0].to",
621
+ "code": "reference-to"
622
+ }
623
+ ]
624
+ },
625
+ {
626
+ "name": "structured types need their parts",
627
+ "manifest": {
628
+ "schema": "wildwinter/extension@0",
629
+ "id": "probe",
630
+ "name": "Probe",
631
+ "version": "1.0.0",
632
+ "targets": {
633
+ "storylets": {
634
+ "card": {
635
+ "fields": [
636
+ {
637
+ "name": "r",
638
+ "type": "record",
639
+ "fields": []
640
+ },
641
+ {
642
+ "name": "m",
643
+ "type": "map",
644
+ "key": {
645
+ "type": "number"
646
+ },
647
+ "of": {
648
+ "type": "text"
649
+ }
650
+ },
651
+ {
652
+ "name": "m2",
653
+ "type": "map",
654
+ "key": {
655
+ "type": "text"
656
+ }
657
+ },
658
+ {
659
+ "name": "l",
660
+ "type": "list",
661
+ "id": "id",
662
+ "of": {
663
+ "type": "record",
664
+ "fields": [
665
+ {
666
+ "name": "at",
667
+ "type": "number"
668
+ }
669
+ ]
670
+ }
671
+ },
672
+ {
673
+ "name": "l2",
674
+ "type": "list",
675
+ "id": "id",
676
+ "of": {
677
+ "type": "text"
678
+ }
679
+ },
680
+ {
681
+ "name": "l3",
682
+ "type": "list"
683
+ }
684
+ ]
685
+ }
686
+ }
687
+ }
688
+ },
689
+ "problems": [
690
+ {
691
+ "path": "targets.storylets.card.fields[0].fields",
692
+ "code": "record-empty"
693
+ },
694
+ {
695
+ "path": "targets.storylets.card.fields[1].key",
696
+ "code": "map-key"
697
+ },
698
+ {
699
+ "path": "targets.storylets.card.fields[2].of",
700
+ "code": "missing-of"
701
+ },
702
+ {
703
+ "path": "targets.storylets.card.fields[3].id",
704
+ "code": "list-id"
705
+ },
706
+ {
707
+ "path": "targets.storylets.card.fields[4].id",
708
+ "code": "list-id"
709
+ },
710
+ {
711
+ "path": "targets.storylets.card.fields[5].of",
712
+ "code": "missing-of"
713
+ }
714
+ ]
715
+ },
716
+ {
717
+ "name": "problems inside a structured type are found where they are",
718
+ "manifest": {
719
+ "schema": "wildwinter/extension@0",
720
+ "id": "probe",
721
+ "name": "Probe",
722
+ "version": "1.0.0",
723
+ "targets": {
724
+ "storylets": {
725
+ "card": {
726
+ "fields": [
727
+ {
728
+ "name": "m",
729
+ "type": "map",
730
+ "key": {
731
+ "type": "text"
732
+ },
733
+ "of": {
734
+ "type": "record",
735
+ "fields": [
736
+ {
737
+ "name": "a",
738
+ "type": "enum",
739
+ "values": []
740
+ },
741
+ {
742
+ "name": "a",
743
+ "type": "text",
744
+ "editorOnly": true
745
+ }
746
+ ]
747
+ }
748
+ }
749
+ ]
750
+ }
751
+ }
752
+ }
753
+ },
754
+ "problems": [
755
+ {
756
+ "path": "targets.storylets.card.fields[0].of.fields[0].values",
757
+ "code": "values-empty"
758
+ },
759
+ {
760
+ "path": "targets.storylets.card.fields[0].of.fields[1].name",
761
+ "code": "duplicate-field"
762
+ },
763
+ {
764
+ "path": "targets.storylets.card.fields[0].of.fields[1].editorOnly",
765
+ "code": "editor-only-nested"
766
+ }
767
+ ]
768
+ },
769
+ {
770
+ "name": "a given default must fit, in every type",
771
+ "manifest": {
772
+ "schema": "wildwinter/extension@0",
773
+ "id": "probe",
774
+ "name": "Probe",
775
+ "version": "1.0.0",
776
+ "targets": {
777
+ "storylets": {
778
+ "card": {
779
+ "fields": [
780
+ {
781
+ "name": "a",
782
+ "type": "number",
783
+ "default": "1"
784
+ },
785
+ {
786
+ "name": "b",
787
+ "type": "enum",
788
+ "values": [
789
+ "x"
790
+ ],
791
+ "default": "y"
792
+ },
793
+ {
794
+ "name": "c",
795
+ "type": "enum",
796
+ "values": [
797
+ "x"
798
+ ],
799
+ "default": ""
800
+ },
801
+ {
802
+ "name": "d",
803
+ "type": "flags",
804
+ "values": [
805
+ "x"
806
+ ],
807
+ "default": [
808
+ "x",
809
+ "z"
810
+ ]
811
+ },
812
+ {
813
+ "name": "e",
814
+ "type": "number",
815
+ "min": 1,
816
+ "default": 0
817
+ },
818
+ {
819
+ "name": "f",
820
+ "type": "record",
821
+ "fields": [
822
+ {
823
+ "name": "g",
824
+ "type": "boolean"
825
+ }
826
+ ],
827
+ "default": {
828
+ "g": 1
829
+ }
830
+ },
831
+ {
832
+ "name": "h",
833
+ "type": "list",
834
+ "of": {
835
+ "type": "number"
836
+ },
837
+ "default": [
838
+ 1,
839
+ "2"
840
+ ]
841
+ }
842
+ ]
843
+ }
844
+ }
845
+ }
846
+ },
847
+ "problems": [
848
+ {
849
+ "path": "targets.storylets.card.fields[0].default",
850
+ "code": "default-misfit"
851
+ },
852
+ {
853
+ "path": "targets.storylets.card.fields[1].default",
854
+ "code": "default-misfit"
855
+ },
856
+ {
857
+ "path": "targets.storylets.card.fields[3].default",
858
+ "code": "default-misfit"
859
+ },
860
+ {
861
+ "path": "targets.storylets.card.fields[4].default",
862
+ "code": "default-misfit"
863
+ },
864
+ {
865
+ "path": "targets.storylets.card.fields[5].default",
866
+ "code": "default-misfit"
867
+ },
868
+ {
869
+ "path": "targets.storylets.card.fields[6].default",
870
+ "code": "default-misfit"
871
+ }
872
+ ]
873
+ },
874
+ {
875
+ "name": "ranges apply to numbers and run upwards",
876
+ "manifest": {
877
+ "schema": "wildwinter/extension@0",
878
+ "id": "probe",
879
+ "name": "Probe",
880
+ "version": "1.0.0",
881
+ "targets": {
882
+ "storylets": {
883
+ "card": {
884
+ "fields": [
885
+ {
886
+ "name": "a",
887
+ "type": "number",
888
+ "min": 5,
889
+ "max": 1
890
+ },
891
+ {
892
+ "name": "b",
893
+ "type": "text",
894
+ "max": 3
895
+ }
896
+ ]
897
+ }
898
+ }
899
+ }
900
+ },
901
+ "problems": [
902
+ {
903
+ "path": "targets.storylets.card.fields[0].max",
904
+ "code": "range"
905
+ },
906
+ {
907
+ "path": "targets.storylets.card.fields[1].max",
908
+ "code": "range"
909
+ }
910
+ ]
911
+ },
912
+ {
913
+ "name": "a misspelt attribute is a warning, not silence",
914
+ "manifest": {
915
+ "schema": "wildwinter/extension@0",
916
+ "id": "probe",
917
+ "name": "Probe",
918
+ "version": "1.0.0",
919
+ "targets": {
920
+ "storylets": {
921
+ "card": {
922
+ "fields": [
923
+ {
924
+ "name": "a",
925
+ "type": "text",
926
+ "requird": true
927
+ }
928
+ ]
929
+ }
930
+ }
931
+ }
932
+ },
933
+ "problems": [
934
+ {
935
+ "path": "targets.storylets.card.fields[0].requird",
936
+ "code": "unknown-key",
937
+ "severity": "warning"
938
+ }
939
+ ]
940
+ },
941
+ {
942
+ "name": "claims: a claimable kind, a declared setting, a scalar, once per setting",
943
+ "manifest": {
944
+ "schema": "wildwinter/extension@0",
945
+ "id": "probe",
946
+ "name": "Probe",
947
+ "version": "1.0.0",
948
+ "settings": [
949
+ {
950
+ "name": "moodField",
951
+ "default": "mood"
952
+ }
953
+ ],
954
+ "targets": {
955
+ "storylets": {
956
+ "deck": {
957
+ "claims": [
958
+ {
959
+ "setting": "moodField",
960
+ "type": "text"
961
+ }
962
+ ]
963
+ },
964
+ "card": {
965
+ "claims": [
966
+ {
967
+ "setting": "moodField",
968
+ "type": "text"
969
+ },
970
+ {
971
+ "setting": "moodField",
972
+ "type": "text"
973
+ },
974
+ {
975
+ "setting": "nope",
976
+ "type": "text"
977
+ },
978
+ {
979
+ "setting": "moodField",
980
+ "type": "record",
981
+ "fields": [
982
+ {
983
+ "name": "a",
984
+ "type": "text"
985
+ }
986
+ ]
987
+ }
988
+ ]
989
+ }
990
+ }
991
+ }
992
+ },
993
+ "problems": [
994
+ {
995
+ "path": "targets.storylets.deck.claims[0]",
996
+ "code": "claim-kind"
997
+ },
998
+ {
999
+ "path": "targets.storylets.card.claims[1].setting",
1000
+ "code": "claim-duplicate"
1001
+ },
1002
+ {
1003
+ "path": "targets.storylets.card.claims[2].setting",
1004
+ "code": "claim-setting"
1005
+ },
1006
+ {
1007
+ "path": "targets.storylets.card.claims[3].type",
1008
+ "code": "claim-type"
1009
+ },
1010
+ {
1011
+ "path": "targets.storylets.card.claims[3].setting",
1012
+ "code": "claim-duplicate"
1013
+ }
1014
+ ]
1015
+ },
1016
+ {
1017
+ "name": "settings: named once each, defaulting to a field name",
1018
+ "manifest": {
1019
+ "schema": "wildwinter/extension@0",
1020
+ "id": "probe",
1021
+ "name": "Probe",
1022
+ "version": "1.0.0",
1023
+ "settings": [
1024
+ {
1025
+ "name": "a",
1026
+ "default": "x"
1027
+ },
1028
+ {
1029
+ "name": "a",
1030
+ "default": "y"
1031
+ },
1032
+ {
1033
+ "name": "b"
1034
+ },
1035
+ {
1036
+ "name": "c",
1037
+ "default": "not a name"
1038
+ }
1039
+ ],
1040
+ "targets": {
1041
+ "storylets": {
1042
+ "card": {}
1043
+ }
1044
+ }
1045
+ },
1046
+ "problems": [
1047
+ {
1048
+ "path": "settings[1].name",
1049
+ "code": "setting-duplicate"
1050
+ },
1051
+ {
1052
+ "path": "settings[2].default",
1053
+ "code": "setting-default"
1054
+ },
1055
+ {
1056
+ "path": "settings[3].default",
1057
+ "code": "setting-default"
1058
+ }
1059
+ ]
1060
+ },
1061
+ {
1062
+ "name": "an enum claim may leave out its values, and its value help may describe values the host does not declare",
1063
+ "manifest": {
1064
+ "schema": "wildwinter/extension@0",
1065
+ "id": "probe",
1066
+ "name": "Probe",
1067
+ "version": "1.0.0",
1068
+ "settings": [
1069
+ {
1070
+ "name": "moodField",
1071
+ "default": "mood"
1072
+ }
1073
+ ],
1074
+ "targets": {
1075
+ "storylets": {
1076
+ "card": {
1077
+ "claims": [
1078
+ {
1079
+ "setting": "moodField",
1080
+ "type": "enum",
1081
+ "label": "Mood",
1082
+ "valueHelp": {
1083
+ "calm": "Unhurried.",
1084
+ "wild": "Not one the host has."
1085
+ }
1086
+ }
1087
+ ]
1088
+ }
1089
+ }
1090
+ }
1091
+ },
1092
+ "problems": []
1093
+ },
1094
+ {
1095
+ "name": "an enum field of the extension's own still lists its values",
1096
+ "manifest": {
1097
+ "schema": "wildwinter/extension@0",
1098
+ "id": "probe",
1099
+ "name": "Probe",
1100
+ "version": "1.0.0",
1101
+ "targets": {
1102
+ "storylets": {
1103
+ "card": {
1104
+ "fields": [
1105
+ {
1106
+ "name": "tone",
1107
+ "type": "enum",
1108
+ "valueHelp": {
1109
+ "calm": "x"
1110
+ }
1111
+ }
1112
+ ]
1113
+ }
1114
+ }
1115
+ }
1116
+ },
1117
+ "problems": [
1118
+ {
1119
+ "path": "targets.storylets.card.fields[0].values",
1120
+ "code": "values-empty"
1121
+ },
1122
+ {
1123
+ "path": "targets.storylets.card.fields[0].valueHelp",
1124
+ "code": "value-help"
1125
+ }
1126
+ ]
1127
+ }
1128
+ ]
1129
+ }