wireforge 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. wireforge/__init__.py +3 -0
  2. wireforge/_data/cmake/WireForgeConfig.cmake +29 -0
  3. wireforge/_data/cmake/WireForgeConfigVersion.cmake +15 -0
  4. wireforge/_data/cmake/WireForgeGenerate.cmake +64 -0
  5. wireforge/_data/runtime/LICENSE +21 -0
  6. wireforge/_data/runtime/include/wireforge/array_access.hpp +35 -0
  7. wireforge/_data/runtime/include/wireforge/bit_utils.hpp +226 -0
  8. wireforge/_data/runtime/include/wireforge/byte_io.hpp +387 -0
  9. wireforge/_data/runtime/include/wireforge/checksum.hpp +201 -0
  10. wireforge/_data/runtime/include/wireforge/codec_support.hpp +412 -0
  11. wireforge/_data/runtime/include/wireforge/config.hpp +41 -0
  12. wireforge/_data/runtime/include/wireforge/delegate.hpp +101 -0
  13. wireforge/_data/runtime/include/wireforge/dispatcher.hpp +339 -0
  14. wireforge/_data/runtime/include/wireforge/expr_support.hpp +38 -0
  15. wireforge/_data/runtime/include/wireforge/frame_decoder.hpp +262 -0
  16. wireforge/_data/runtime/include/wireforge/frame_layout.hpp +20 -0
  17. wireforge/_data/runtime/include/wireforge/link.hpp +223 -0
  18. wireforge/_data/runtime/include/wireforge/lock.hpp +146 -0
  19. wireforge/_data/runtime/include/wireforge/ring_buffer.hpp +226 -0
  20. wireforge/_data/runtime/include/wireforge/span.hpp +116 -0
  21. wireforge/_data/runtime/include/wireforge/static_vector.hpp +264 -0
  22. wireforge/_data/runtime/include/wireforge/status.hpp +75 -0
  23. wireforge/_data/runtime/include/wireforge/transport.hpp +95 -0
  24. wireforge/_data/runtime/include/wireforge/validation.hpp +153 -0
  25. wireforge/_data/runtime/include/wireforge/version.hpp +22 -0
  26. wireforge/_data/runtime/requirements.yaml +438 -0
  27. wireforge/_data/schema/deviations.schema.json +47 -0
  28. wireforge/_data/schema/fragment.schema.json +79 -0
  29. wireforge/_data/schema/llr_ids.schema.json +25 -0
  30. wireforge/_data/schema/project.schema.json +1240 -0
  31. wireforge/_data/schema/runtime_requirements.schema.json +34 -0
  32. wireforge/_data/ui/assets/index-6Pomu6U4.js +44 -0
  33. wireforge/_data/ui/assets/index-GVdDyUAG.css +1 -0
  34. wireforge/_data/ui/index.html +13 -0
  35. wireforge/bundle.py +177 -0
  36. wireforge/ci_check.py +155 -0
  37. wireforge/cli.py +617 -0
  38. wireforge/codec.py +897 -0
  39. wireforge/compat.py +536 -0
  40. wireforge/coverage_points.py +64 -0
  41. wireforge/cpp.py +273 -0
  42. wireforge/cpp_codec.py +440 -0
  43. wireforge/cpp_interface.py +874 -0
  44. wireforge/cpp_tests.py +1993 -0
  45. wireforge/differential.py +586 -0
  46. wireforge/docs_markdown.py +72 -0
  47. wireforge/expr.py +598 -0
  48. wireforge/findings.py +187 -0
  49. wireforge/fmt.py +351 -0
  50. wireforge/generate.py +644 -0
  51. wireforge/golden.py +253 -0
  52. wireforge/hlr_import.py +112 -0
  53. wireforge/impact.py +249 -0
  54. wireforge/importers.py +402 -0
  55. wireforge/issues.py +27 -0
  56. wireforge/layout.py +681 -0
  57. wireforge/lifecycle.py +1266 -0
  58. wireforge/lifecycle_results.py +205 -0
  59. wireforge/lifecycle_rules.py +78 -0
  60. wireforge/lifecycle_runtime.py +375 -0
  61. wireforge/llr.py +693 -0
  62. wireforge/llr_ids.py +104 -0
  63. wireforge/loader.py +422 -0
  64. wireforge/mcp_server.py +357 -0
  65. wireforge/model.py +322 -0
  66. wireforge/plain.py +15 -0
  67. wireforge/py.typed +0 -0
  68. wireforge/reqif.py +289 -0
  69. wireforge/resources.py +43 -0
  70. wireforge/results.py +377 -0
  71. wireforge/runtime_reqs.py +147 -0
  72. wireforge/schema.py +151 -0
  73. wireforge/server/__init__.py +1 -0
  74. wireforge/server/app.py +619 -0
  75. wireforge/server/oidc.py +99 -0
  76. wireforge/server/storage.py +146 -0
  77. wireforge/service.py +1354 -0
  78. wireforge/templates/command/project.yaml +38 -0
  79. wireforge/templates/raw/project.yaml +28 -0
  80. wireforge/templates/telemetry/project.yaml +51 -0
  81. wireforge/test_cases.py +475 -0
  82. wireforge/test_project.py +478 -0
  83. wireforge/trace.py +442 -0
  84. wireforge/validate.py +1241 -0
  85. wireforge/vcs.py +44 -0
  86. wireforge/vectors.py +222 -0
  87. wireforge/versioning.py +137 -0
  88. wireforge/wireshark.py +792 -0
  89. wireforge/wireshark_runtime.lua +725 -0
  90. wireforge-0.1.0.dist-info/METADATA +91 -0
  91. wireforge-0.1.0.dist-info/RECORD +96 -0
  92. wireforge-0.1.0.dist-info/WHEEL +5 -0
  93. wireforge-0.1.0.dist-info/entry_points.txt +2 -0
  94. wireforge-0.1.0.dist-info/licenses/LICENSE +98 -0
  95. wireforge-0.1.0.dist-info/licenses/runtime/LICENSE +21 -0
  96. wireforge-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1240 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "WireForge project (root file, schema_version 1)",
4
+ "type": "object",
5
+ "required": [
6
+ "schema_version",
7
+ "project"
8
+ ],
9
+ "properties": {
10
+ "schema_version": {
11
+ "$ref": "#/$defs/schemaVersion"
12
+ },
13
+ "project": {
14
+ "$ref": "#/$defs/identifier"
15
+ },
16
+ "version": {
17
+ "$ref": "#/$defs/semver",
18
+ "description": "Version of this project/ICD set."
19
+ },
20
+ "description": {
21
+ "type": "string"
22
+ },
23
+ "namespace": {
24
+ "type": "string",
25
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*(::[A-Za-z_][A-Za-z0-9_]*)*$",
26
+ "description": "C++ namespace of the generated code."
27
+ },
28
+ "include": {
29
+ "type": "array",
30
+ "items": {
31
+ "type": "string",
32
+ "minLength": 1
33
+ },
34
+ "description": "Glob patterns (relative to this file) of fragment files merged into the project."
35
+ },
36
+ "defaults": {
37
+ "$ref": "#/$defs/defaults"
38
+ },
39
+ "defines": {
40
+ "$ref": "#/$defs/sections/properties/defines"
41
+ },
42
+ "profiles": {
43
+ "$ref": "#/$defs/sections/properties/profiles"
44
+ },
45
+ "checksums": {
46
+ "$ref": "#/$defs/sections/properties/checksums"
47
+ },
48
+ "enums": {
49
+ "$ref": "#/$defs/sections/properties/enums"
50
+ },
51
+ "types": {
52
+ "$ref": "#/$defs/sections/properties/types"
53
+ },
54
+ "user_types": {
55
+ "$ref": "#/$defs/sections/properties/user_types"
56
+ },
57
+ "messages": {
58
+ "$ref": "#/$defs/sections/properties/messages"
59
+ },
60
+ "interfaces": {
61
+ "$ref": "#/$defs/sections/properties/interfaces"
62
+ },
63
+ "schema_minor": {
64
+ "$ref": "#/$defs/schemaMinor"
65
+ },
66
+ "generator": {
67
+ "$ref": "#/$defs/generator"
68
+ },
69
+ "user_includes": {
70
+ "$ref": "#/$defs/userIncludes"
71
+ },
72
+ "bundle": {
73
+ "$ref": "#/$defs/bundleInfo"
74
+ },
75
+ "requirements": {
76
+ "$ref": "#/$defs/sections/properties/requirements"
77
+ },
78
+ "vectors": {
79
+ "$ref": "#/$defs/sections/properties/vectors"
80
+ }
81
+ },
82
+ "additionalProperties": false,
83
+ "$defs": {
84
+ "identifier": {
85
+ "type": "string",
86
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
87
+ },
88
+ "semver": {
89
+ "type": "string",
90
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
91
+ },
92
+ "expression": {
93
+ "type": "string",
94
+ "minLength": 1,
95
+ "description": "Expression in the WireForge expression language (docs/SCHEMA_SPEC.md section 7)."
96
+ },
97
+ "intOrExpr": {
98
+ "anyOf": [
99
+ {
100
+ "type": "integer"
101
+ },
102
+ {
103
+ "$ref": "#/$defs/expression"
104
+ }
105
+ ]
106
+ },
107
+ "numOrExpr": {
108
+ "anyOf": [
109
+ {
110
+ "type": "number"
111
+ },
112
+ {
113
+ "$ref": "#/$defs/expression"
114
+ }
115
+ ]
116
+ },
117
+ "scalarValue": {
118
+ "anyOf": [
119
+ {
120
+ "type": "number"
121
+ },
122
+ {
123
+ "type": "boolean"
124
+ },
125
+ {
126
+ "type": "string"
127
+ }
128
+ ]
129
+ },
130
+ "endian": {
131
+ "enum": [
132
+ "big",
133
+ "little"
134
+ ]
135
+ },
136
+ "bitOrder": {
137
+ "enum": [
138
+ "msb_first",
139
+ "lsb_first"
140
+ ]
141
+ },
142
+ "rangeCheck": {
143
+ "type": "object",
144
+ "properties": {
145
+ "encode": {
146
+ "type": "boolean"
147
+ },
148
+ "decode": {
149
+ "type": "boolean"
150
+ }
151
+ },
152
+ "additionalProperties": false
153
+ },
154
+ "defaults": {
155
+ "type": "object",
156
+ "properties": {
157
+ "endian": {
158
+ "$ref": "#/$defs/endian"
159
+ },
160
+ "bit_order": {
161
+ "$ref": "#/$defs/bitOrder"
162
+ },
163
+ "range_check": {
164
+ "$ref": "#/$defs/rangeCheck"
165
+ }
166
+ },
167
+ "additionalProperties": false
168
+ },
169
+ "builtinType": {
170
+ "enum": [
171
+ "bool",
172
+ "u8",
173
+ "u16",
174
+ "u32",
175
+ "u64",
176
+ "i8",
177
+ "i16",
178
+ "i32",
179
+ "i64",
180
+ "f32",
181
+ "f64",
182
+ "char"
183
+ ]
184
+ },
185
+ "integerType": {
186
+ "enum": [
187
+ "u8",
188
+ "u16",
189
+ "u32",
190
+ "u64",
191
+ "i8",
192
+ "i16",
193
+ "i32",
194
+ "i64"
195
+ ]
196
+ },
197
+ "typeRef": {
198
+ "anyOf": [
199
+ {
200
+ "$ref": "#/$defs/builtinType"
201
+ },
202
+ {
203
+ "$ref": "#/$defs/identifier"
204
+ }
205
+ ]
206
+ },
207
+ "occurs": {
208
+ "type": "object",
209
+ "description": "Occurrence model: optional field = max 1; array = max N. No count and no fill means exactly `max` occurrences.",
210
+ "required": [
211
+ "max"
212
+ ],
213
+ "properties": {
214
+ "min": {
215
+ "$ref": "#/$defs/intOrExpr"
216
+ },
217
+ "max": {
218
+ "$ref": "#/$defs/intOrExpr"
219
+ },
220
+ "count": {
221
+ "$ref": "#/$defs/intOrExpr",
222
+ "description": "Number of occurrences present on the wire; 0 means absent."
223
+ },
224
+ "fill": {
225
+ "const": true,
226
+ "description": "Occurrences fill the remaining payload (last field only)."
227
+ }
228
+ },
229
+ "not": {
230
+ "required": [
231
+ "count",
232
+ "fill"
233
+ ]
234
+ },
235
+ "additionalProperties": false
236
+ },
237
+ "checksumCovers": {
238
+ "oneOf": [
239
+ {
240
+ "type": "object",
241
+ "required": [
242
+ "from",
243
+ "to"
244
+ ],
245
+ "properties": {
246
+ "from": {
247
+ "$ref": "#/$defs/identifier"
248
+ },
249
+ "to": {
250
+ "$ref": "#/$defs/identifier"
251
+ }
252
+ },
253
+ "additionalProperties": false
254
+ },
255
+ {
256
+ "type": "object",
257
+ "required": [
258
+ "scope"
259
+ ],
260
+ "properties": {
261
+ "scope": {
262
+ "enum": [
263
+ "preceding",
264
+ "payload",
265
+ "header_and_payload"
266
+ ]
267
+ }
268
+ },
269
+ "additionalProperties": false
270
+ }
271
+ ]
272
+ },
273
+ "checksumUse": {
274
+ "type": "object",
275
+ "required": [
276
+ "use",
277
+ "covers"
278
+ ],
279
+ "properties": {
280
+ "use": {
281
+ "$ref": "#/$defs/identifier"
282
+ },
283
+ "covers": {
284
+ "$ref": "#/$defs/checksumCovers"
285
+ }
286
+ },
287
+ "additionalProperties": false
288
+ },
289
+ "field": {
290
+ "type": "object",
291
+ "required": [
292
+ "name",
293
+ "type"
294
+ ],
295
+ "properties": {
296
+ "name": {
297
+ "$ref": "#/$defs/identifier"
298
+ },
299
+ "type": {
300
+ "$ref": "#/$defs/typeRef"
301
+ },
302
+ "description": {
303
+ "type": "string"
304
+ },
305
+ "units": {
306
+ "type": "string"
307
+ },
308
+ "bits": {
309
+ "type": "integer",
310
+ "minimum": 1,
311
+ "maximum": 64
312
+ },
313
+ "min": {
314
+ "$ref": "#/$defs/numOrExpr"
315
+ },
316
+ "max": {
317
+ "$ref": "#/$defs/numOrExpr"
318
+ },
319
+ "default": {
320
+ "anyOf": [
321
+ {
322
+ "$ref": "#/$defs/scalarValue"
323
+ },
324
+ {
325
+ "type": "array",
326
+ "items": {
327
+ "$ref": "#/$defs/scalarValue"
328
+ }
329
+ }
330
+ ]
331
+ },
332
+ "const": {
333
+ "$ref": "#/$defs/scalarValue"
334
+ },
335
+ "reserved": {
336
+ "type": "boolean"
337
+ },
338
+ "occurs": {
339
+ "$ref": "#/$defs/occurs"
340
+ },
341
+ "checksum": {
342
+ "$ref": "#/$defs/checksumUse"
343
+ },
344
+ "role": {
345
+ "enum": [
346
+ "message_id",
347
+ "payload_length",
348
+ "sync",
349
+ "protocol_version",
350
+ "sequence"
351
+ ]
352
+ },
353
+ "if": {
354
+ "$ref": "#/$defs/expression",
355
+ "description": "Preprocessor condition; emitted as #if in C++."
356
+ },
357
+ "since": {
358
+ "$ref": "#/$defs/semver"
359
+ },
360
+ "deprecated": {
361
+ "type": "boolean"
362
+ },
363
+ "reqs": {
364
+ "$ref": "#/$defs/reqs"
365
+ }
366
+ },
367
+ "additionalProperties": false
368
+ },
369
+ "fieldList": {
370
+ "type": "array",
371
+ "minItems": 1,
372
+ "items": {
373
+ "$ref": "#/$defs/field"
374
+ }
375
+ },
376
+ "structDef": {
377
+ "type": "object",
378
+ "required": [
379
+ "fields"
380
+ ],
381
+ "properties": {
382
+ "description": {
383
+ "type": "string"
384
+ },
385
+ "fields": {
386
+ "$ref": "#/$defs/fieldList"
387
+ },
388
+ "if": {
389
+ "$ref": "#/$defs/expression"
390
+ },
391
+ "since": {
392
+ "$ref": "#/$defs/semver"
393
+ },
394
+ "deprecated": {
395
+ "type": "boolean"
396
+ },
397
+ "reqs": {
398
+ "$ref": "#/$defs/reqs"
399
+ }
400
+ },
401
+ "additionalProperties": false
402
+ },
403
+ "enumDef": {
404
+ "type": "object",
405
+ "required": [
406
+ "type",
407
+ "values"
408
+ ],
409
+ "properties": {
410
+ "type": {
411
+ "$ref": "#/$defs/integerType"
412
+ },
413
+ "description": {
414
+ "type": "string"
415
+ },
416
+ "values": {
417
+ "type": "object",
418
+ "minProperties": 1,
419
+ "propertyNames": {
420
+ "$ref": "#/$defs/identifier"
421
+ },
422
+ "additionalProperties": {
423
+ "type": "integer"
424
+ }
425
+ },
426
+ "reqs": {
427
+ "$ref": "#/$defs/reqs"
428
+ }
429
+ },
430
+ "additionalProperties": false
431
+ },
432
+ "messageDef": {
433
+ "type": "object",
434
+ "required": [
435
+ "fields"
436
+ ],
437
+ "properties": {
438
+ "id": {
439
+ "type": "integer",
440
+ "minimum": 0
441
+ },
442
+ "description": {
443
+ "type": "string"
444
+ },
445
+ "endian": {
446
+ "$ref": "#/$defs/endian"
447
+ },
448
+ "bit_order": {
449
+ "$ref": "#/$defs/bitOrder"
450
+ },
451
+ "range_check": {
452
+ "$ref": "#/$defs/rangeCheck"
453
+ },
454
+ "fields": {
455
+ "$ref": "#/$defs/fieldList"
456
+ },
457
+ "if": {
458
+ "$ref": "#/$defs/expression"
459
+ },
460
+ "since": {
461
+ "$ref": "#/$defs/semver"
462
+ },
463
+ "deprecated": {
464
+ "type": "boolean"
465
+ },
466
+ "reqs": {
467
+ "$ref": "#/$defs/reqs"
468
+ }
469
+ },
470
+ "additionalProperties": false
471
+ },
472
+ "checksumDef": {
473
+ "type": "object",
474
+ "required": [
475
+ "algo"
476
+ ],
477
+ "properties": {
478
+ "algo": {
479
+ "enum": [
480
+ "crc32",
481
+ "crc",
482
+ "custom"
483
+ ]
484
+ },
485
+ "description": {
486
+ "type": "string"
487
+ },
488
+ "width": {
489
+ "type": "integer",
490
+ "minimum": 1,
491
+ "maximum": 64
492
+ },
493
+ "poly": {
494
+ "type": "integer",
495
+ "minimum": 0
496
+ },
497
+ "init": {
498
+ "type": "integer",
499
+ "minimum": 0
500
+ },
501
+ "refin": {
502
+ "type": "boolean"
503
+ },
504
+ "refout": {
505
+ "type": "boolean"
506
+ },
507
+ "xorout": {
508
+ "type": "integer",
509
+ "minimum": 0
510
+ },
511
+ "check": {
512
+ "type": "integer",
513
+ "minimum": 0,
514
+ "description": "Expected result for ASCII \"123456789\" (self-test)."
515
+ },
516
+ "impl": {
517
+ "type": "string",
518
+ "minLength": 1,
519
+ "description": "Fully qualified C++ type satisfying the checksum contract."
520
+ },
521
+ "include": {
522
+ "type": "string",
523
+ "minLength": 1
524
+ },
525
+ "size_bytes": {
526
+ "type": "integer",
527
+ "minimum": 1,
528
+ "maximum": 16
529
+ },
530
+ "reqs": {
531
+ "$ref": "#/$defs/reqs"
532
+ }
533
+ },
534
+ "additionalProperties": false,
535
+ "allOf": [
536
+ {
537
+ "if": {
538
+ "properties": {
539
+ "algo": {
540
+ "const": "crc32"
541
+ }
542
+ },
543
+ "required": [
544
+ "algo"
545
+ ]
546
+ },
547
+ "then": {
548
+ "propertyNames": {
549
+ "not": {
550
+ "enum": [
551
+ "width",
552
+ "poly",
553
+ "init",
554
+ "refin",
555
+ "refout",
556
+ "xorout",
557
+ "check",
558
+ "impl",
559
+ "include",
560
+ "size_bytes"
561
+ ]
562
+ }
563
+ }
564
+ }
565
+ },
566
+ {
567
+ "if": {
568
+ "properties": {
569
+ "algo": {
570
+ "const": "crc"
571
+ }
572
+ },
573
+ "required": [
574
+ "algo"
575
+ ]
576
+ },
577
+ "then": {
578
+ "required": [
579
+ "width",
580
+ "poly"
581
+ ],
582
+ "propertyNames": {
583
+ "not": {
584
+ "enum": [
585
+ "impl",
586
+ "include",
587
+ "size_bytes"
588
+ ]
589
+ }
590
+ }
591
+ }
592
+ },
593
+ {
594
+ "if": {
595
+ "properties": {
596
+ "algo": {
597
+ "const": "custom"
598
+ }
599
+ },
600
+ "required": [
601
+ "algo"
602
+ ]
603
+ },
604
+ "then": {
605
+ "required": [
606
+ "impl",
607
+ "include",
608
+ "size_bytes"
609
+ ],
610
+ "propertyNames": {
611
+ "not": {
612
+ "enum": [
613
+ "width",
614
+ "poly",
615
+ "init",
616
+ "refin",
617
+ "refout",
618
+ "xorout",
619
+ "check"
620
+ ]
621
+ }
622
+ }
623
+ }
624
+ }
625
+ ]
626
+ },
627
+ "userTypeDef": {
628
+ "type": "object",
629
+ "required": [
630
+ "cpp",
631
+ "size_bytes"
632
+ ],
633
+ "additionalProperties": false,
634
+ "properties": {
635
+ "cpp": {
636
+ "type": "string",
637
+ "minLength": 1,
638
+ "description": "Fully qualified C++ type name."
639
+ },
640
+ "size_bytes": {
641
+ "type": "integer",
642
+ "minimum": 1
643
+ },
644
+ "include": {
645
+ "type": "string",
646
+ "pattern": "^[^\"<>\\n\\r]+$"
647
+ },
648
+ "style": {
649
+ "enum": [
650
+ "quote",
651
+ "angle"
652
+ ],
653
+ "default": "quote"
654
+ },
655
+ "description": {
656
+ "type": "string"
657
+ },
658
+ "reqs": {
659
+ "$ref": "#/$defs/reqs"
660
+ }
661
+ }
662
+ },
663
+ "headerDef": {
664
+ "anyOf": [
665
+ {
666
+ "const": "none"
667
+ },
668
+ {
669
+ "type": "object",
670
+ "required": [
671
+ "fields"
672
+ ],
673
+ "properties": {
674
+ "fields": {
675
+ "$ref": "#/$defs/fieldList"
676
+ }
677
+ },
678
+ "additionalProperties": false
679
+ }
680
+ ]
681
+ },
682
+ "trailerDef": {
683
+ "type": "object",
684
+ "required": [
685
+ "fields"
686
+ ],
687
+ "properties": {
688
+ "fields": {
689
+ "$ref": "#/$defs/fieldList"
690
+ }
691
+ },
692
+ "additionalProperties": false
693
+ },
694
+ "framing": {
695
+ "type": "object",
696
+ "required": [
697
+ "kind"
698
+ ],
699
+ "properties": {
700
+ "kind": {
701
+ "enum": [
702
+ "none",
703
+ "fixed",
704
+ "sync_length",
705
+ "length_prefixed"
706
+ ]
707
+ },
708
+ "frame_size": {
709
+ "$ref": "#/$defs/intOrExpr"
710
+ },
711
+ "max_frame_size": {
712
+ "$ref": "#/$defs/intOrExpr"
713
+ },
714
+ "length_counts": {
715
+ "enum": [
716
+ "payload",
717
+ "payload_and_trailer",
718
+ "frame"
719
+ ]
720
+ },
721
+ "resync": {
722
+ "type": "boolean"
723
+ },
724
+ "reqs": {
725
+ "$ref": "#/$defs/reqs"
726
+ }
727
+ },
728
+ "additionalProperties": false,
729
+ "allOf": [
730
+ {
731
+ "if": {
732
+ "properties": {
733
+ "kind": {
734
+ "const": "fixed"
735
+ }
736
+ },
737
+ "required": [
738
+ "kind"
739
+ ]
740
+ },
741
+ "then": {
742
+ "required": [
743
+ "frame_size"
744
+ ]
745
+ }
746
+ },
747
+ {
748
+ "if": {
749
+ "properties": {
750
+ "kind": {
751
+ "enum": [
752
+ "sync_length",
753
+ "length_prefixed"
754
+ ]
755
+ }
756
+ },
757
+ "required": [
758
+ "kind"
759
+ ]
760
+ },
761
+ "then": {
762
+ "required": [
763
+ "max_frame_size"
764
+ ]
765
+ }
766
+ }
767
+ ]
768
+ },
769
+ "interfaceMessage": {
770
+ "anyOf": [
771
+ {
772
+ "$ref": "#/$defs/identifier"
773
+ },
774
+ {
775
+ "type": "object",
776
+ "required": [
777
+ "name"
778
+ ],
779
+ "properties": {
780
+ "name": {
781
+ "$ref": "#/$defs/identifier"
782
+ },
783
+ "id": {
784
+ "type": "integer",
785
+ "minimum": 0
786
+ },
787
+ "if": {
788
+ "$ref": "#/$defs/expression"
789
+ },
790
+ "since": {
791
+ "$ref": "#/$defs/semver"
792
+ },
793
+ "reqs": {
794
+ "$ref": "#/$defs/reqs"
795
+ }
796
+ },
797
+ "additionalProperties": false
798
+ }
799
+ ]
800
+ },
801
+ "interfaceDef": {
802
+ "type": "object",
803
+ "required": [
804
+ "version",
805
+ "direction",
806
+ "messages"
807
+ ],
808
+ "properties": {
809
+ "version": {
810
+ "$ref": "#/$defs/semver",
811
+ "description": "ICD version of this interface."
812
+ },
813
+ "description": {
814
+ "type": "string"
815
+ },
816
+ "direction": {
817
+ "enum": [
818
+ "tx",
819
+ "rx",
820
+ "both"
821
+ ]
822
+ },
823
+ "endian": {
824
+ "$ref": "#/$defs/endian"
825
+ },
826
+ "bit_order": {
827
+ "$ref": "#/$defs/bitOrder"
828
+ },
829
+ "range_check": {
830
+ "$ref": "#/$defs/rangeCheck"
831
+ },
832
+ "header": {
833
+ "$ref": "#/$defs/headerDef"
834
+ },
835
+ "trailer": {
836
+ "$ref": "#/$defs/trailerDef"
837
+ },
838
+ "framing": {
839
+ "$ref": "#/$defs/framing"
840
+ },
841
+ "messages": {
842
+ "type": "array",
843
+ "items": {
844
+ "$ref": "#/$defs/interfaceMessage"
845
+ }
846
+ },
847
+ "buffers": {
848
+ "type": "object",
849
+ "properties": {
850
+ "rx_bytes": {
851
+ "$ref": "#/$defs/intOrExpr"
852
+ },
853
+ "tx_bytes": {
854
+ "$ref": "#/$defs/intOrExpr"
855
+ }
856
+ },
857
+ "additionalProperties": false
858
+ },
859
+ "allow_trailing_bytes": {
860
+ "type": "boolean"
861
+ },
862
+ "reqs": {
863
+ "$ref": "#/$defs/reqs"
864
+ }
865
+ },
866
+ "additionalProperties": false
867
+ },
868
+ "profileDef": {
869
+ "type": "object",
870
+ "required": [
871
+ "defines"
872
+ ],
873
+ "properties": {
874
+ "description": {
875
+ "type": "string"
876
+ },
877
+ "defines": {
878
+ "type": "object",
879
+ "propertyNames": {
880
+ "$ref": "#/$defs/identifier"
881
+ },
882
+ "additionalProperties": {
883
+ "type": "integer"
884
+ }
885
+ }
886
+ },
887
+ "additionalProperties": false
888
+ },
889
+ "sections": {
890
+ "type": "object",
891
+ "properties": {
892
+ "defines": {
893
+ "type": "object",
894
+ "propertyNames": {
895
+ "$ref": "#/$defs/identifier"
896
+ },
897
+ "additionalProperties": {
898
+ "type": "integer"
899
+ }
900
+ },
901
+ "profiles": {
902
+ "type": "object",
903
+ "propertyNames": {
904
+ "$ref": "#/$defs/identifier"
905
+ },
906
+ "additionalProperties": {
907
+ "$ref": "#/$defs/profileDef"
908
+ }
909
+ },
910
+ "checksums": {
911
+ "type": "object",
912
+ "propertyNames": {
913
+ "$ref": "#/$defs/identifier"
914
+ },
915
+ "additionalProperties": {
916
+ "$ref": "#/$defs/checksumDef"
917
+ }
918
+ },
919
+ "enums": {
920
+ "type": "object",
921
+ "propertyNames": {
922
+ "$ref": "#/$defs/identifier"
923
+ },
924
+ "additionalProperties": {
925
+ "$ref": "#/$defs/enumDef"
926
+ }
927
+ },
928
+ "types": {
929
+ "type": "object",
930
+ "propertyNames": {
931
+ "$ref": "#/$defs/identifier"
932
+ },
933
+ "additionalProperties": {
934
+ "$ref": "#/$defs/structDef"
935
+ }
936
+ },
937
+ "user_types": {
938
+ "type": "object",
939
+ "propertyNames": {
940
+ "$ref": "#/$defs/identifier"
941
+ },
942
+ "additionalProperties": {
943
+ "$ref": "#/$defs/userTypeDef"
944
+ }
945
+ },
946
+ "messages": {
947
+ "type": "object",
948
+ "propertyNames": {
949
+ "$ref": "#/$defs/identifier"
950
+ },
951
+ "additionalProperties": {
952
+ "$ref": "#/$defs/messageDef"
953
+ }
954
+ },
955
+ "interfaces": {
956
+ "type": "object",
957
+ "propertyNames": {
958
+ "$ref": "#/$defs/identifier"
959
+ },
960
+ "additionalProperties": {
961
+ "$ref": "#/$defs/interfaceDef"
962
+ }
963
+ },
964
+ "requirements": {
965
+ "type": "object",
966
+ "propertyNames": {
967
+ "$ref": "#/$defs/requirementId"
968
+ },
969
+ "additionalProperties": {
970
+ "$ref": "#/$defs/requirementDef"
971
+ }
972
+ },
973
+ "vectors": {
974
+ "type": "object",
975
+ "propertyNames": {
976
+ "$ref": "#/$defs/identifier"
977
+ },
978
+ "additionalProperties": {
979
+ "$ref": "#/$defs/vectorDef"
980
+ }
981
+ }
982
+ }
983
+ },
984
+ "schemaVersion": {
985
+ "const": 1,
986
+ "description": "File-format major version. Newer than the tool supports: hard error; older: migrate with `wireforge import`."
987
+ },
988
+ "schemaMinor": {
989
+ "type": "integer",
990
+ "minimum": 0,
991
+ "description": "File-format minor version (additive changes only)."
992
+ },
993
+ "generator": {
994
+ "type": "object",
995
+ "required": [
996
+ "name",
997
+ "version"
998
+ ],
999
+ "properties": {
1000
+ "name": {
1001
+ "const": "wireforge"
1002
+ },
1003
+ "version": {
1004
+ "$ref": "#/$defs/semver"
1005
+ }
1006
+ },
1007
+ "additionalProperties": false,
1008
+ "description": "WireForge release that wrote this file (informational stamp)."
1009
+ },
1010
+ "bundleInfo": {
1011
+ "type": "object",
1012
+ "required": [
1013
+ "content_hash"
1014
+ ],
1015
+ "properties": {
1016
+ "content_hash": {
1017
+ "type": "string",
1018
+ "pattern": "^[0-9a-f]{64}$",
1019
+ "description": "sha256 of the canonical definition content."
1020
+ },
1021
+ "source_files": {
1022
+ "type": "array",
1023
+ "items": {
1024
+ "type": "string"
1025
+ }
1026
+ }
1027
+ },
1028
+ "additionalProperties": false
1029
+ },
1030
+ "userConstant": {
1031
+ "type": "object",
1032
+ "required": [
1033
+ "cpp"
1034
+ ],
1035
+ "properties": {
1036
+ "cpp": {
1037
+ "type": "string",
1038
+ "pattern": "^(::)?[A-Za-z_][A-Za-z0-9_]*(::[A-Za-z_][A-Za-z0-9_]*)*$",
1039
+ "description": "C++ spelling emitted in generated code (constexpr variable, enumerator or macro)."
1040
+ },
1041
+ "value": {
1042
+ "type": "integer",
1043
+ "description": "Value the tools use for analysis, docs and tests; verified against the real constant by a generated static_assert."
1044
+ },
1045
+ "profile_values": {
1046
+ "type": "object",
1047
+ "propertyNames": {
1048
+ "$ref": "#/$defs/identifier"
1049
+ },
1050
+ "additionalProperties": {
1051
+ "type": "integer"
1052
+ },
1053
+ "description": "Per-profile override of `value`."
1054
+ },
1055
+ "description": {
1056
+ "type": "string"
1057
+ }
1058
+ },
1059
+ "additionalProperties": false
1060
+ },
1061
+ "userIncludes": {
1062
+ "type": "object",
1063
+ "properties": {
1064
+ "include_dirs": {
1065
+ "type": "array",
1066
+ "items": {
1067
+ "type": "string",
1068
+ "minLength": 1
1069
+ },
1070
+ "description": "Directories added to the include path of generated build files."
1071
+ },
1072
+ "headers": {
1073
+ "type": "array",
1074
+ "items": {
1075
+ "type": "object",
1076
+ "required": [
1077
+ "path"
1078
+ ],
1079
+ "properties": {
1080
+ "path": {
1081
+ "type": "string",
1082
+ "pattern": "^[^\"<>\\n\\r]+$"
1083
+ },
1084
+ "style": {
1085
+ "enum": [
1086
+ "quote",
1087
+ "angle"
1088
+ ]
1089
+ },
1090
+ "if": {
1091
+ "$ref": "#/$defs/expression"
1092
+ }
1093
+ },
1094
+ "additionalProperties": false
1095
+ },
1096
+ "description": "Headers #included by the generated user prelude, in order."
1097
+ },
1098
+ "constants": {
1099
+ "type": "object",
1100
+ "propertyNames": {
1101
+ "$ref": "#/$defs/identifier"
1102
+ },
1103
+ "additionalProperties": {
1104
+ "$ref": "#/$defs/userConstant"
1105
+ },
1106
+ "description": "Integer constants from user code usable in expressions."
1107
+ },
1108
+ "prelude": {
1109
+ "type": "array",
1110
+ "items": {
1111
+ "type": "string",
1112
+ "pattern": "^[^\\n\\r]*$"
1113
+ },
1114
+ "description": "Verbatim C++ lines emitted after the headers (e.g. extern declarations). Not analysed by WireForge."
1115
+ }
1116
+ },
1117
+ "additionalProperties": false
1118
+ },
1119
+ "requirementId": {
1120
+ "type": "string",
1121
+ "pattern": "^[A-Za-z][A-Za-z0-9_.:-]*$",
1122
+ "maxLength": 64
1123
+ },
1124
+ "reqs": {
1125
+ "type": "array",
1126
+ "items": {
1127
+ "$ref": "#/$defs/requirementId"
1128
+ },
1129
+ "minItems": 1,
1130
+ "uniqueItems": true,
1131
+ "description": "Ids of the requirements (section `requirements`) this element implements."
1132
+ },
1133
+ "requirementDef": {
1134
+ "type": "object",
1135
+ "required": [
1136
+ "text"
1137
+ ],
1138
+ "properties": {
1139
+ "text": {
1140
+ "type": "string",
1141
+ "minLength": 1
1142
+ },
1143
+ "source": {
1144
+ "type": "string",
1145
+ "description": "Where the requirement comes from (free text, e.g. an ICD section)."
1146
+ },
1147
+ "verification": {
1148
+ "enum": [
1149
+ "test",
1150
+ "analysis",
1151
+ "review"
1152
+ ],
1153
+ "description": "How the requirement is verified (default test)."
1154
+ }
1155
+ },
1156
+ "additionalProperties": false
1157
+ },
1158
+ "vectorDef": {
1159
+ "type": "object",
1160
+ "required": [
1161
+ "message",
1162
+ "bytes",
1163
+ "expect",
1164
+ "reqs"
1165
+ ],
1166
+ "properties": {
1167
+ "description": {
1168
+ "type": "string"
1169
+ },
1170
+ "interface": {
1171
+ "$ref": "#/$defs/identifier"
1172
+ },
1173
+ "message": {
1174
+ "$ref": "#/$defs/identifier"
1175
+ },
1176
+ "profile": {
1177
+ "$ref": "#/$defs/identifier"
1178
+ },
1179
+ "direction": {
1180
+ "enum": [
1181
+ "decode",
1182
+ "encode",
1183
+ "both"
1184
+ ],
1185
+ "description": "decode (default), encode or both."
1186
+ },
1187
+ "bytes": {
1188
+ "type": "string",
1189
+ "pattern": "^[0-9A-Fa-f _]+$",
1190
+ "description": "Payload (or frame, with `interface`) as hex; spaces and underscores are ignored."
1191
+ },
1192
+ "expect": {
1193
+ "oneOf": [
1194
+ {
1195
+ "type": "object",
1196
+ "required": [
1197
+ "fields"
1198
+ ],
1199
+ "properties": {
1200
+ "fields": {
1201
+ "type": "object",
1202
+ "additionalProperties": true,
1203
+ "description": "Expected field values, in the shape of the decoded message."
1204
+ }
1205
+ },
1206
+ "additionalProperties": false
1207
+ },
1208
+ {
1209
+ "type": "object",
1210
+ "required": [
1211
+ "status"
1212
+ ],
1213
+ "properties": {
1214
+ "status": {
1215
+ "enum": [
1216
+ "BufferTooSmall",
1217
+ "Truncated",
1218
+ "OutOfRange",
1219
+ "CountExceedsMax",
1220
+ "ConstMismatch",
1221
+ "ChecksumMismatch",
1222
+ "UnknownMessageId",
1223
+ "InvalidLength",
1224
+ "TrailingBytes",
1225
+ "InvalidState"
1226
+ ]
1227
+ }
1228
+ },
1229
+ "additionalProperties": false
1230
+ }
1231
+ ]
1232
+ },
1233
+ "reqs": {
1234
+ "$ref": "#/$defs/reqs"
1235
+ }
1236
+ },
1237
+ "additionalProperties": false
1238
+ }
1239
+ }
1240
+ }