altium-toolkit 1.0.10 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/docs/api.md +6 -2
  2. package/docs/model-format.md +29 -4
  3. package/docs/schemas/altium_toolkit/ci_artifact_bundle_a1.schema.json +4 -0
  4. package/docs/schemas/altium_toolkit/contract_gate_a1.schema.json +34 -0
  5. package/docs/schemas/altium_toolkit/draftsman_board_view_cache_a1.schema.json +115 -0
  6. package/docs/schemas/altium_toolkit/draftsman_digest_a1.schema.json +132 -1
  7. package/docs/schemas/altium_toolkit/host_capabilities_a1.schema.json +39 -0
  8. package/docs/schemas/altium_toolkit/library_merge_plan_a1.schema.json +56 -0
  9. package/docs/schemas/altium_toolkit/library_qa_a1.schema.json +70 -0
  10. package/docs/schemas/altium_toolkit/normalized_model_a1.schema.json +692 -2
  11. package/docs/schemas/altium_toolkit/pcb_bom_profile_a1.schema.json +48 -0
  12. package/docs/schemas/altium_toolkit/pcb_layer_stack_a1.schema.json +98 -0
  13. package/docs/schemas/altium_toolkit/pcb_layer_stack_fidelity_a1.schema.json +66 -0
  14. package/docs/schemas/altium_toolkit/pcb_placed_footprint_extraction_a1.schema.json +31 -0
  15. package/docs/schemas/altium_toolkit/pcb_review_metadata_a1.schema.json +62 -0
  16. package/docs/schemas/altium_toolkit/pcb_rigid_flex_topology_a1.schema.json +52 -0
  17. package/docs/schemas/altium_toolkit/pcblib_parity_a1.schema.json +24 -0
  18. package/docs/schemas/altium_toolkit/project_bom_pnp_reconciliation_a1.schema.json +63 -0
  19. package/docs/schemas/altium_toolkit/project_outjob_digest_a1.schema.json +46 -0
  20. package/docs/schemas/altium_toolkit/project_script_a1.schema.json +50 -0
  21. package/docs/schemas/altium_toolkit/schematic_render_ops_a1.schema.json +55 -0
  22. package/docs/schemas/altium_toolkit/schematic_template_extraction_a1.schema.json +37 -0
  23. package/package.json +1 -1
  24. package/src/core/altium/AltiumParser.mjs +7 -2
  25. package/src/core/altium/CiArtifactBundleBuilder.mjs +16 -5
  26. package/src/core/altium/ContractGateReportBuilder.mjs +351 -0
  27. package/src/core/altium/DraftsmanBoardViewMetadataBuilder.mjs +653 -0
  28. package/src/core/altium/DraftsmanDigestParser.mjs +246 -7
  29. package/src/core/altium/DraftsmanImagePayloadManifestBuilder.mjs +178 -0
  30. package/src/core/altium/HostCapabilityDiagnosticsBuilder.mjs +271 -0
  31. package/src/core/altium/LibraryQaReportBuilder.mjs +504 -0
  32. package/src/core/altium/LibraryRenderManifestBuilder.mjs +172 -2
  33. package/src/core/altium/PcbBomProfileBuilder.mjs +263 -0
  34. package/src/core/altium/PcbComponentKindPolicy.mjs +146 -0
  35. package/src/core/altium/PcbLayerStackFidelityReportBuilder.mjs +141 -0
  36. package/src/core/altium/PcbLayerStackInterchangeParser.mjs +453 -0
  37. package/src/core/altium/PcbLayerStackQueryHelper.mjs +195 -0
  38. package/src/core/altium/PcbLayerStackReadModelBuilder.mjs +906 -0
  39. package/src/core/altium/PcbLayerStackSourceMetadataParser.mjs +488 -0
  40. package/src/core/altium/PcbLibModelParser.mjs +2 -0
  41. package/src/core/altium/PcbLibParityReportBuilder.mjs +242 -0
  42. package/src/core/altium/PcbModelParser.mjs +182 -18
  43. package/src/core/altium/PcbPickPlacePositionResolver.mjs +3 -0
  44. package/src/core/altium/PcbPlacedFootprintManifestBuilder.mjs +338 -0
  45. package/src/core/altium/PcbPolygonRecordParser.mjs +120 -0
  46. package/src/core/altium/PcbReviewDrillMetadataBuilder.mjs +301 -0
  47. package/src/core/altium/PcbReviewMetadataBuilder.mjs +373 -0
  48. package/src/core/altium/PcbReviewPolygonRealizationBuilder.mjs +269 -0
  49. package/src/core/altium/PcbReviewRouteHighlightProfileBuilder.mjs +298 -0
  50. package/src/core/altium/PcbRigidFlexTopologyBuilder.mjs +171 -0
  51. package/src/core/altium/PrintableTextDecoder.mjs +70 -6
  52. package/src/core/altium/PrjPcbModelParser.mjs +45 -0
  53. package/src/core/altium/PrjScrModelParser.mjs +386 -0
  54. package/src/core/altium/ProjectBomPnpReconciliationBuilder.mjs +237 -0
  55. package/src/core/altium/ProjectDesignBundleBuilder.mjs +61 -2
  56. package/src/core/altium/ProjectOutJobDigestBuilder.mjs +424 -13
  57. package/src/core/altium/SvgModelCrossLinkValidator.mjs +35 -2
  58. package/src/core/circuit-json/CircuitJsonModelAdapter.mjs +164 -0
  59. package/src/parser.mjs +15 -0
  60. package/src/ui/PcbFootprintPrimitiveSelector.mjs +13 -1
  61. package/src/ui/PcbScene3dBuilder.mjs +26 -4
  62. package/src/ui/SchematicRenderOpsSidecarBuilder.mjs +554 -0
  63. package/src/ui/SchematicSvgRenderer.mjs +48 -2
package/docs/api.md CHANGED
@@ -65,8 +65,8 @@ Specialized parser helpers are exported for lower-level integrations, including
65
65
  `PcbDimensionParser`, `PcbEmbeddedFontExtractor`,
66
66
  `PcbExtendedPrimitiveInformationParser`, `PcbFontMetricsParser`,
67
67
  `LibraryRenderManifestBuilder`, `LibrarySearchIndex`,
68
- `PcbOwnershipGraphBuilder`, `PcbPadStackParser`,
69
- `PcbPickPlacePositionResolver`,
68
+ `PcbBomProfileBuilder`, `PcbLayerStackFidelityReportBuilder`,
69
+ `PcbOwnershipGraphBuilder`, `PcbPadStackParser`, `PcbPickPlacePositionResolver`,
70
70
  `ProjectAnnotationParser`, `ProjectDesignBundleBuilder`,
71
71
  `ProjectNetlistExporter`, `ProjectVariantViewBuilder`,
72
72
  `PcbMechanicalLayerPairParser`, `PcbSpecialStringResolver`, `PcbUnionParser`,
@@ -101,6 +101,10 @@ embedded font payload and metric shape that `.PcbDoc` and `.PcbLib` parsing adds
101
101
  to normalized models. `PcbRawRecordRegistry` exposes immutable primitive stream
102
102
  descriptors and the raw-record preservation helpers used by the PcbDoc/PcbLib
103
103
  extractors.
104
+ `PcbBomProfileBuilder` exposes PCB-only BOM grouping and parameter alias
105
+ normalization. `PcbLayerStackFidelityReportBuilder` classifies layer-stack
106
+ source evidence and unsupported native-regeneration limits for deterministic
107
+ QA/reporting.
104
108
  `LibraryRenderManifestBuilder` and `LibrarySearchIndex` expose deterministic
105
109
  SchLib/PcbLib render/export manifests plus exact, keyword, and fuzzy lookup
106
110
  helpers. `PcbStatisticsBuilder` emits board QA summaries used by `.PcbDoc`
@@ -17,11 +17,22 @@ Every parser result is an array of elements with a `type` field. The adapter
17
17
  emits Circuit JSON elements for source project metadata, source components,
18
18
  ports, nets, schematic symbols, schematic lines, schematic text, PCB boards,
19
19
  PCB components, PCB pads, PCB traces, and PCB vias where those structures are
20
- available in the source document.
20
+ available in the source document. Altium Toolkit sidecar contracts that do not
21
+ map to upstream Circuit JSON element families are serialized as custom
22
+ `altium_toolkit_*` elements. Each sidecar element includes a stable
23
+ `altium_toolkit_sidecar_id`, a `source_document` identity block, the sidecar
24
+ `schema`, and the original normalized sidecar object in `payload`.
25
+
26
+ Current custom sidecar element types include PCB layer stacks, rigid-flex
27
+ topology, PCB review metadata, placed-footprint extraction manifests, PCB
28
+ library parity reports, project OutJob digests, project document graphs,
29
+ BOM/PnP reconciliation reports, Draftsman image payloads, Draftsman board-view
30
+ metadata, contract-gate reports, and host-capability diagnostics.
21
31
 
22
32
  Use `CircuitJsonModelSchema.isModel(result)` to validate that a value is a
23
33
  Circuit JSON array. `JSON.stringify(result)` serializes only the Circuit JSON
24
- elements; compatibility fields are intentionally omitted from serialized JSON.
34
+ elements, including custom `altium_toolkit_*` sidecar elements; compatibility
35
+ fields are intentionally omitted from serialized JSON.
25
36
 
26
37
  ## Renderer Compatibility Fields
27
38
 
@@ -294,6 +305,12 @@ component bodies. `pcbLibrary.renderManifest` exposes stable footprint SVG keys,
294
305
  per-layer SVG keys, layer descriptors, and embedded asset descriptors. Asset
295
306
  descriptors may include native format, wrapper type, byte size, checksum, and
296
307
  structured diagnostics when extraction supplied that metadata.
308
+ `LibraryRenderManifestBuilder.buildSchematicExtractionManifest()` adds a
309
+ read-only database-library audit plan for placed schematic symbols, including
310
+ preserved versus stripped parameter names and stripped implementation keys.
311
+ `LibraryRenderManifestBuilder.buildSchematicTemplateExtractionManifest()`
312
+ summarizes template identity, owned records, fonts, title-block fields, and
313
+ missing template parameters without generating template files.
297
314
  `LibrarySearchIndex` provides exact, keyword, and fuzzy symbol/footprint lookup
298
315
  helpers over parsed library read models.
299
316
 
@@ -340,6 +357,13 @@ metadata sidecar as the composite SVG, with `view.kind` set to `layer`, a
340
357
  single included layer id, and `layerSet.layerView` describing the exported
341
358
  layer.
342
359
 
360
+ PCB documents expose `pcb.bomProfile` for PCB-only BOM grouping and parameter
361
+ alias normalization. `pcb.layerStackReadModel.fidelityReport` classifies
362
+ semantic layer-stack data, preserved native cache evidence, interchange-only
363
+ fields, and unsupported native-regeneration reasons. Draftsman digests preserve
364
+ typed font-style records, note geometry, note border/fill state, and picture
365
+ geometry when those fields are available in the container.
366
+
343
367
  External model placements in the 3D scene description include a `projection`
344
368
  diagnostic object. The `source` explains whether bounds came from an authored
345
369
  projection override, resolved model bounds, nearby pad-span fallback,
@@ -367,5 +391,6 @@ Consumers should treat unknown fields as additive within the same schema id.
367
391
  Parser fixes may add detail, but existing field names and shapes should stay
368
392
  compatible unless a new schema id explicitly documents a model migration.
369
393
  Focused machine-readable schemas are available under
370
- `docs/schemas/altium_toolkit/` for the normalized root, project bundle, netlist
371
- JSON, schematic SVG semantic metadata, and PCB SVG semantic metadata contracts.
394
+ `docs/schemas/altium_toolkit/` for the normalized root plus focused project,
395
+ netlist, SVG, PCB review, layer-stack, Draftsman, library, and CI/reporting
396
+ contracts.
@@ -16,6 +16,7 @@
16
16
  "schematicSvgs",
17
17
  "pcbLayerSvgs",
18
18
  "statistics",
19
+ "contractGate",
19
20
  "diagnostics"
20
21
  ],
21
22
  "properties": {
@@ -69,6 +70,9 @@
69
70
  "statistics": {
70
71
  "type": "object"
71
72
  },
73
+ "contractGate": {
74
+ "$ref": "contract_gate_a1.schema.json"
75
+ },
72
76
  "diagnostics": {
73
77
  "type": "array"
74
78
  }
@@ -0,0 +1,34 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "altium-toolkit.contract-gate.a1",
4
+ "title": "Altium Toolkit Contract Gate A1",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": ["schema", "status", "summary", "gates", "svgLinkReports"],
8
+ "properties": {
9
+ "schema": {
10
+ "const": "altium-toolkit.contract-gate.a1"
11
+ },
12
+ "status": {
13
+ "enum": ["pass", "fail"]
14
+ },
15
+ "summary": {
16
+ "type": "object",
17
+ "additionalProperties": true
18
+ },
19
+ "gates": {
20
+ "type": "array",
21
+ "items": {
22
+ "type": "object",
23
+ "additionalProperties": true
24
+ }
25
+ },
26
+ "svgLinkReports": {
27
+ "type": "array",
28
+ "items": {
29
+ "type": "object",
30
+ "additionalProperties": true
31
+ }
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,115 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "altium-toolkit.draftsman.board-view-cache.a1",
4
+ "title": "Altium Toolkit Draftsman Board View Cache A1",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": [
8
+ "schema",
9
+ "summary",
10
+ "layerColors",
11
+ "pcbParameters",
12
+ "boardAssemblyViews",
13
+ "boardFabricationViews",
14
+ "boardProjections",
15
+ "generatedGeometry",
16
+ "cacheLayers",
17
+ "displayLayers",
18
+ "cachePrimitives",
19
+ "highlightGroups",
20
+ "layerTiles",
21
+ "diagnostics"
22
+ ],
23
+ "properties": {
24
+ "schema": {
25
+ "const": "altium-toolkit.draftsman.board-view-cache.a1"
26
+ },
27
+ "summary": {
28
+ "type": "object",
29
+ "additionalProperties": true
30
+ },
31
+ "layerColors": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "object",
35
+ "additionalProperties": true
36
+ }
37
+ },
38
+ "pcbParameters": {
39
+ "type": "object",
40
+ "additionalProperties": {
41
+ "type": "string"
42
+ }
43
+ },
44
+ "boardAssemblyViews": {
45
+ "type": "array",
46
+ "items": {
47
+ "type": "object",
48
+ "additionalProperties": true
49
+ }
50
+ },
51
+ "boardFabricationViews": {
52
+ "type": "array",
53
+ "items": {
54
+ "type": "object",
55
+ "additionalProperties": true
56
+ }
57
+ },
58
+ "boardProjections": {
59
+ "type": "array",
60
+ "items": {
61
+ "type": "object",
62
+ "additionalProperties": true
63
+ }
64
+ },
65
+ "generatedGeometry": {
66
+ "type": "array",
67
+ "items": {
68
+ "type": "object",
69
+ "additionalProperties": true
70
+ }
71
+ },
72
+ "cacheLayers": {
73
+ "type": "array",
74
+ "items": {
75
+ "type": "object",
76
+ "additionalProperties": true
77
+ }
78
+ },
79
+ "displayLayers": {
80
+ "type": "array",
81
+ "items": {
82
+ "type": "object",
83
+ "additionalProperties": true
84
+ }
85
+ },
86
+ "cachePrimitives": {
87
+ "type": "array",
88
+ "items": {
89
+ "type": "object",
90
+ "additionalProperties": true
91
+ }
92
+ },
93
+ "highlightGroups": {
94
+ "type": "array",
95
+ "items": {
96
+ "type": "object",
97
+ "additionalProperties": true
98
+ }
99
+ },
100
+ "layerTiles": {
101
+ "type": "array",
102
+ "items": {
103
+ "type": "object",
104
+ "additionalProperties": true
105
+ }
106
+ },
107
+ "diagnostics": {
108
+ "type": "array",
109
+ "items": {
110
+ "type": "object",
111
+ "additionalProperties": true
112
+ }
113
+ }
114
+ }
115
+ }
@@ -12,6 +12,23 @@
12
12
  "sourceDocumentName": {
13
13
  "type": "string"
14
14
  },
15
+ "documentOptions": {
16
+ "type": "object",
17
+ "additionalProperties": true
18
+ },
19
+ "styles": {
20
+ "type": "object",
21
+ "additionalProperties": true,
22
+ "properties": {
23
+ "fontStyles": {
24
+ "type": "array",
25
+ "items": {
26
+ "type": "object",
27
+ "additionalProperties": true
28
+ }
29
+ }
30
+ }
31
+ },
15
32
  "pages": {
16
33
  "type": "array",
17
34
  "items": {
@@ -23,10 +40,124 @@
23
40
  "titleBlocks",
24
41
  "notes",
25
42
  "images",
43
+ "zones",
44
+ "items",
26
45
  "unsupportedRawItems"
27
- ]
46
+ ],
47
+ "properties": {
48
+ "pageSetup": {
49
+ "type": "object",
50
+ "additionalProperties": true
51
+ },
52
+ "zones": {
53
+ "type": "array",
54
+ "items": {
55
+ "type": "object",
56
+ "additionalProperties": true
57
+ }
58
+ },
59
+ "items": {
60
+ "type": "array",
61
+ "items": {
62
+ "type": "object",
63
+ "additionalProperties": true
64
+ }
65
+ }
66
+ }
28
67
  }
29
68
  },
69
+ "imagePayloads": {
70
+ "type": "object",
71
+ "required": ["schema", "summary", "payloads", "diagnostics"],
72
+ "properties": {
73
+ "schema": {
74
+ "const": "altium-toolkit.draftsman.image-payloads.a1"
75
+ },
76
+ "summary": {
77
+ "type": "object",
78
+ "additionalProperties": true
79
+ },
80
+ "payloads": {
81
+ "type": "array",
82
+ "items": {
83
+ "type": "object",
84
+ "additionalProperties": true
85
+ }
86
+ },
87
+ "diagnostics": {
88
+ "type": "array",
89
+ "items": {
90
+ "type": "object",
91
+ "additionalProperties": true
92
+ }
93
+ }
94
+ },
95
+ "additionalProperties": true
96
+ },
97
+ "boardViewMetadata": {
98
+ "type": "object",
99
+ "required": [
100
+ "schema",
101
+ "summary",
102
+ "layerColors",
103
+ "pcbParameters",
104
+ "boardAssemblyViews",
105
+ "boardFabricationViews",
106
+ "boardProjections",
107
+ "generatedGeometry"
108
+ ],
109
+ "properties": {
110
+ "schema": {
111
+ "const": "altium-toolkit.draftsman.board-view-cache.a1"
112
+ },
113
+ "summary": {
114
+ "type": "object",
115
+ "additionalProperties": true
116
+ },
117
+ "layerColors": {
118
+ "type": "array",
119
+ "items": {
120
+ "type": "object",
121
+ "additionalProperties": true
122
+ }
123
+ },
124
+ "pcbParameters": {
125
+ "type": "object",
126
+ "additionalProperties": {
127
+ "type": "string"
128
+ }
129
+ },
130
+ "boardAssemblyViews": {
131
+ "type": "array",
132
+ "items": {
133
+ "type": "object",
134
+ "additionalProperties": true
135
+ }
136
+ },
137
+ "boardFabricationViews": {
138
+ "type": "array",
139
+ "items": {
140
+ "type": "object",
141
+ "additionalProperties": true
142
+ }
143
+ },
144
+ "boardProjections": {
145
+ "type": "array",
146
+ "items": {
147
+ "type": "object",
148
+ "additionalProperties": true
149
+ }
150
+ },
151
+ "generatedGeometry": {
152
+ "type": "array",
153
+ "items": {
154
+ "type": "object",
155
+ "additionalProperties": true
156
+ }
157
+ }
158
+ },
159
+ "additionalProperties": true
160
+ },
30
161
  "indexes": {
31
162
  "type": "object",
32
163
  "additionalProperties": true
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "altium-toolkit.host-capabilities.a1",
4
+ "title": "Altium Toolkit Host Capabilities A1",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": ["schema", "host", "summary", "capabilities", "diagnostics"],
8
+ "properties": {
9
+ "schema": {
10
+ "const": "altium-toolkit.host-capabilities.a1"
11
+ },
12
+ "host": {
13
+ "type": "object",
14
+ "additionalProperties": true
15
+ },
16
+ "summary": {
17
+ "type": "object",
18
+ "additionalProperties": true
19
+ },
20
+ "capabilities": {
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "additionalProperties": true
25
+ }
26
+ },
27
+ "readiness": {
28
+ "type": "object",
29
+ "additionalProperties": true
30
+ },
31
+ "diagnostics": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "object",
35
+ "additionalProperties": true
36
+ }
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "altium-toolkit.library.merge-plan.a1",
4
+ "title": "Altium Toolkit Library Merge Plan A1",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": [
8
+ "schema",
9
+ "strategy",
10
+ "summary",
11
+ "duplicateSymbols",
12
+ "embeddedAssets",
13
+ "fontDependencies",
14
+ "diagnostics"
15
+ ],
16
+ "properties": {
17
+ "schema": {
18
+ "const": "altium-toolkit.library.merge-plan.a1"
19
+ },
20
+ "strategy": {
21
+ "type": "string"
22
+ },
23
+ "summary": {
24
+ "type": "object",
25
+ "additionalProperties": true
26
+ },
27
+ "duplicateSymbols": {
28
+ "type": "array",
29
+ "items": {
30
+ "type": "object",
31
+ "additionalProperties": true
32
+ }
33
+ },
34
+ "embeddedAssets": {
35
+ "type": "array",
36
+ "items": {
37
+ "type": "object",
38
+ "additionalProperties": true
39
+ }
40
+ },
41
+ "fontDependencies": {
42
+ "type": "array",
43
+ "items": {
44
+ "type": "object",
45
+ "additionalProperties": true
46
+ }
47
+ },
48
+ "diagnostics": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "object",
52
+ "additionalProperties": true
53
+ }
54
+ }
55
+ }
56
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "altium-toolkit.library.qa.a1",
4
+ "title": "Altium Toolkit Library QA A1",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": [
8
+ "schema",
9
+ "summary",
10
+ "duplicateSymbols",
11
+ "duplicateFootprints",
12
+ "staleImplementations",
13
+ "missingModels",
14
+ "multipartMismatches"
15
+ ],
16
+ "properties": {
17
+ "schema": {
18
+ "const": "altium-toolkit.library.qa.a1"
19
+ },
20
+ "summary": {
21
+ "type": "object",
22
+ "additionalProperties": true
23
+ },
24
+ "duplicateSymbols": {
25
+ "type": "array",
26
+ "items": {
27
+ "type": "object",
28
+ "additionalProperties": true
29
+ }
30
+ },
31
+ "duplicateFootprints": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "object",
35
+ "additionalProperties": true
36
+ }
37
+ },
38
+ "staleImplementations": {
39
+ "type": "array",
40
+ "items": {
41
+ "type": "object",
42
+ "additionalProperties": true
43
+ }
44
+ },
45
+ "missingModels": {
46
+ "type": "array",
47
+ "items": {
48
+ "type": "object",
49
+ "additionalProperties": true
50
+ }
51
+ },
52
+ "multipartMismatches": {
53
+ "type": "array",
54
+ "items": {
55
+ "type": "object",
56
+ "additionalProperties": true
57
+ }
58
+ },
59
+ "mergePlan": {
60
+ "$ref": "library_merge_plan_a1.schema.json"
61
+ },
62
+ "issues": {
63
+ "type": "array",
64
+ "items": {
65
+ "type": "object",
66
+ "additionalProperties": true
67
+ }
68
+ }
69
+ }
70
+ }