pi-outpost 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contract/README.md +34 -0
- package/dist/contract/conformance/index.json +18 -0
- package/dist/contract/conformance/invalid/table-row-object-column-mismatch.json +18 -0
- package/dist/contract/conformance/invalid/table-row-unknown-role.json +17 -0
- package/dist/contract/conformance/invalid/table-row-without-cells.json +14 -0
- package/dist/contract/conformance/valid/table-rows-partly-roled.json +29 -0
- package/dist/contract/conformance/valid/table-rows-with-roles.json +45 -0
- package/dist/contract/schemas/structured-exchange-1.json +38 -11
- package/dist/contract/validate-structured-exchange.mjs +45 -14
- package/dist/pi-outpost.mjs +125 -93
- package/dist/pi-outpost.sea.mjs +125 -93
- package/dist/sea-prep.blob +0 -0
- package/dist/skills/structured-exchange/SKILL.md +28 -1
- package/dist/skills/structured-exchange/structured-exchange-1.json +38 -11
- package/dist/web/assets/{PdfViewer-CEAp6biY.js → PdfViewer-DL928k-s.js} +2 -2
- package/dist/web/assets/{abnfDiagram-N423BO3Z-BE4AMXSH.js → abnfDiagram-N423BO3Z-DbxX-0Kj.js} +1 -1
- package/dist/web/assets/architecture-TIHT7OUA-CxgGNTsk.js +1 -0
- package/dist/web/assets/{architectureDiagram-T3A2C74G-tjG-eidb.js → architectureDiagram-T3A2C74G-BMX346um.js} +1 -1
- package/dist/web/assets/{blockDiagram-VBNYF7ZC-Bwzla1cD.js → blockDiagram-VBNYF7ZC-ChV86tmC.js} +1 -1
- package/dist/web/assets/browser-BoWduoKG.js +19 -0
- package/dist/web/assets/{c4Diagram-5PPSVZJV-BbNH9mqH.js → c4Diagram-5PPSVZJV-C-zTSE0y.js} +1 -1
- package/dist/web/assets/channel-D-LTlrLf.js +1 -0
- package/dist/web/assets/{chunk-2GRJ4B5K-BTjPaaWT.js → chunk-2GRJ4B5K-W04su_X7.js} +1 -1
- package/dist/web/assets/{chunk-3NCLNEKW-DfGGO5Az.js → chunk-3NCLNEKW-DY4xKOXA.js} +1 -1
- package/dist/web/assets/{chunk-4I5QYGJK-Bajr_p-3.js → chunk-4I5QYGJK-DXYX0vFa.js} +1 -1
- package/dist/web/assets/{chunk-5RXB4S5H-CbDXtSwX.js → chunk-5RXB4S5H-Du7kbrqX.js} +1 -1
- package/dist/web/assets/{chunk-6Q2QTUOP-Cj5IB9-q.js → chunk-6Q2QTUOP-BfJd7VYB.js} +1 -1
- package/dist/web/assets/{chunk-7Z6QIM7H-BIsTfYEd.js → chunk-7Z6QIM7H-BY1Y6LJS.js} +1 -1
- package/dist/web/assets/{chunk-GF5L2VYU-CYLPBeKA.js → chunk-GF5L2VYU-CsEEcYjl.js} +1 -1
- package/dist/web/assets/{chunk-I66GZJ75-BjZt7BZl.js → chunk-I66GZJ75-DPBfauyP.js} +3 -3
- package/dist/web/assets/{chunk-J7OUQ5F2-B3gViRUp.js → chunk-J7OUQ5F2-CdpH0vwJ.js} +2 -2
- package/dist/web/assets/{chunk-JQJVKLGR-Dg177seh.js → chunk-JQJVKLGR-CdyovfRR.js} +1 -1
- package/dist/web/assets/{chunk-KBJHAD2P-B_2jByMg.js → chunk-KBJHAD2P-DmmiNkBn.js} +1 -1
- package/dist/web/assets/{chunk-NSK5VX7P-B5w-3_Ed.js → chunk-NSK5VX7P-BQQH6IYd.js} +1 -1
- package/dist/web/assets/{chunk-QR6OTTB3-DCJRxmQT.js → chunk-QR6OTTB3-DWTPlePZ.js} +1 -1
- package/dist/web/assets/{chunk-UBXNYLIW-DBuIxFzr.js → chunk-UBXNYLIW-CXboJ2bm.js} +1 -1
- package/dist/web/assets/{chunk-W5SLKNZC-B-cGIOQF.js → chunk-W5SLKNZC-CaOM1dXh.js} +1 -1
- package/dist/web/assets/{chunk-WRU74C26-CLOxZV1w.js → chunk-WRU74C26-DRizKOyu.js} +1 -1
- package/dist/web/assets/classDiagram-JCYQIIEL-DHVDyqvh.js +1 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-DHVDyqvh.js +1 -0
- package/dist/web/assets/{cynefin-VYW2F7L2-Bk96SN7L.js → cynefin-VYW2F7L2-CD-nMJrn.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-MW4NZA55-ooeswKGp.js → cynefinDiagram-MW4NZA55-Ig6qnUj1.js} +1 -1
- package/dist/web/assets/{dagre-VZM6K2ZE-CSwH_rTA.js → dagre-VZM6K2ZE-CxSxgcwX.js} +1 -1
- package/dist/web/assets/{diagram-7IWD3JNH-DVtrh_uV.js → diagram-7IWD3JNH-CB2xc-gJ.js} +1 -1
- package/dist/web/assets/{diagram-B4RE2ZJO-CYE5VmiD.js → diagram-B4RE2ZJO-5cmS8UzR.js} +1 -1
- package/dist/web/assets/{diagram-LBJQPF4R-BYOlHlmg.js → diagram-LBJQPF4R-B80eqvld.js} +1 -1
- package/dist/web/assets/{diagram-Q27KOJAE-DJWxpvu9.js → diagram-Q27KOJAE-DHwyKZTY.js} +1 -1
- package/dist/web/assets/{diagram-UB23O5K3-B1g-vwj0.js → diagram-UB23O5K3-dDfTtdVR.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-BXEA7PRR-BX8Jv2Vd.js → ebnfDiagram-BXEA7PRR-BycgjimL.js} +1 -1
- package/dist/web/assets/{erDiagram-JOGREHBK-9hxklGu2.js → erDiagram-JOGREHBK-BeCSU7rz.js} +1 -1
- package/dist/web/assets/eventmodeling-45OFAUF4-neKvK6DT.js +1 -0
- package/dist/web/assets/flowDiagram-UKHOOZJN-CAZkXvN7.js +1 -0
- package/dist/web/assets/{ganttDiagram-PKOTCBZU-D0kAnvoM.js → ganttDiagram-PKOTCBZU-Bazy8cgV.js} +1 -1
- package/dist/web/assets/{gitGraph-TEB2WS4Q-C9UMPCgj.js → gitGraph-TEB2WS4Q-DcGskfJN.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-DS77QQ5N-6tPgqwE6.js → gitGraphDiagram-DS77QQ5N-Z6jvA444.js} +1 -1
- package/dist/web/assets/{index-De86t3J_.js → index-B-cfhDrI.js} +13 -12
- package/dist/web/assets/index-Dz7YkDhP.css +2 -0
- package/dist/web/assets/{info-DKCQHKI2-BBV4qqmE.js → info-DKCQHKI2-DJ49CwmK.js} +1 -1
- package/dist/web/assets/{infoDiagram-6WML65LV-Bmhc86CN.js → infoDiagram-6WML65LV-YqZl8Nm2.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-WSZJBQD7-5wn4Yv2C.js → ishikawaDiagram-WSZJBQD7-iBNItVc-.js} +1 -1
- package/dist/web/assets/{journeyDiagram-NVQOT4AX-DJLLpQlS.js → journeyDiagram-NVQOT4AX-EwTx3T1Q.js} +1 -1
- package/dist/web/assets/{kanban-definition-27J2QSJJ-7h9EMbUW.js → kanban-definition-27J2QSJJ-DtdE2AjM.js} +1 -1
- package/dist/web/assets/{line-Uu7s3CmK.js → line-Cbqxb04I.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-DwpLoctN.js → mermaid-parser.core-rv6CQBy8.js} +3 -3
- package/dist/web/assets/{mermaid.core-CRSZr8Y7.js → mermaid.core-DXHLsEfO.js} +3 -3
- package/dist/web/assets/{mindmap-definition-FAOFIHXS-DPic1KLK.js → mindmap-definition-FAOFIHXS-CaiyLb0a.js} +1 -1
- package/dist/web/assets/{packet-7NZHBO7P-CMRjleUu.js → packet-7NZHBO7P-ByIsiWdp.js} +1 -1
- package/dist/web/assets/{pdf-DGJrgWix.js → pdf-BmZiCqYN.js} +1 -1
- package/dist/web/assets/{pegDiagram-VL7TDLO6-CdECC4cs.js → pegDiagram-VL7TDLO6-B-6_sex6.js} +1 -1
- package/dist/web/assets/{pie-RZYD4A2V-C5X4oGn0.js → pie-RZYD4A2V-BD8R7sOm.js} +1 -1
- package/dist/web/assets/{pieDiagram-7S7Q4E2Y-Bvs4Q2O-.js → pieDiagram-7S7Q4E2Y-C-a2vyAv.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-CIZ2JOQS-FsUrYDg7.js → quadrantDiagram-CIZ2JOQS-DNnBJnEd.js} +1 -1
- package/dist/web/assets/{radar-I7S5WNFK-tvx7HrZO.js → radar-I7S5WNFK-kEFklpqR.js} +1 -1
- package/dist/web/assets/{railroad-3IZDKUUU-DBks1QD-.js → railroad-3IZDKUUU-DVRWY3AC.js} +1 -1
- package/dist/web/assets/railroad-abnf-AHOZXSZD-BjQiPTbu.js +1 -0
- package/dist/web/assets/railroad-ebnf-EBAXGLYW-iJlInGQn.js +1 -0
- package/dist/web/assets/railroad-peg-LSFZ7HO6-DbABHd8A.js +1 -0
- package/dist/web/assets/{railroadDiagram-AXF67PYL-CBvFYCmN.js → railroadDiagram-AXF67PYL-DBXx-64f.js} +1 -1
- package/dist/web/assets/{requirementDiagram-LRYGKXZP-C-rumttI.js → requirementDiagram-LRYGKXZP-FKSCWatA.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-W5VNT64P-ClOK2cdj.js → sankeyDiagram-W5VNT64P-BIsqrSkd.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-SI44F4Z6-B0pKllVj.js → sequenceDiagram-SI44F4Z6-O_YBlsgm.js} +1 -1
- package/dist/web/assets/{stateDiagram-OKZ733FA-BoAWywzk.js → stateDiagram-OKZ733FA-CQpPvMSw.js} +1 -1
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-BD_nJJ8M.js +1 -0
- package/dist/web/assets/{swimlanes-SLNWSIFB-cdgjeXSf.js → swimlanes-SLNWSIFB-DVWLKMSf.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-B9QwBXcD.js +8 -0
- package/dist/web/assets/{timeline-definition-Z64GVDOM-ByMPGIEh.js → timeline-definition-Z64GVDOM-D08L6QQ6.js} +1 -1
- package/dist/web/assets/{treeView-QDETBFTQ-zBqwQF47.js → treeView-QDETBFTQ-DmuKTQhG.js} +1 -1
- package/dist/web/assets/{treemap-6X3UGDF4-C2U9S2di.js → treemap-6X3UGDF4-CFwpXcZR.js} +1 -1
- package/dist/web/assets/{vennDiagram-T6HMQDX7-CyJfOcB0.js → vennDiagram-T6HMQDX7-Df5-OwXn.js} +1 -1
- package/dist/web/assets/{wardley-OPB4EBWU-CDxzQuvF.js → wardley-OPB4EBWU-e2h7ylSU.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-T6FBY63Y-IO8_CDTG.js → wardleyDiagram-T6FBY63Y-pZ4HlA6p.js} +1 -1
- package/dist/web/assets/{xychartDiagram-ELKLHX3M-UUfxFEDc.js → xychartDiagram-ELKLHX3M-Byk049lP.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/architecture-TIHT7OUA-DgTbwInB.js +0 -1
- package/dist/web/assets/channel-CXbqHDJA.js +0 -1
- package/dist/web/assets/classDiagram-JCYQIIEL-lv93WkUc.js +0 -1
- package/dist/web/assets/classDiagram-v2-OCEON4UE-lv93WkUc.js +0 -1
- package/dist/web/assets/eventmodeling-45OFAUF4-CSvMsqcO.js +0 -1
- package/dist/web/assets/flowDiagram-UKHOOZJN-CPmAOaGQ.js +0 -1
- package/dist/web/assets/index-CZwzQTfU.css +0 -2
- package/dist/web/assets/railroad-abnf-AHOZXSZD-BnvB29Nv.js +0 -1
- package/dist/web/assets/railroad-ebnf-EBAXGLYW-BUSDQ0vn.js +0 -1
- package/dist/web/assets/railroad-peg-LSFZ7HO6-CZV0givf.js +0 -1
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CHrsco-w.js +0 -1
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-DPjAUQdL.js +0 -8
package/dist/contract/README.md
CHANGED
|
@@ -129,6 +129,40 @@ and an explicit white ground, so what lands in the document is what was on scree
|
|
|
129
129
|
earlier version drew them as HTML inside `foreignObject`, which looks identical in the
|
|
130
130
|
browser and loses everything the moment it is serialized.
|
|
131
131
|
|
|
132
|
+
## A table that reports a change
|
|
133
|
+
|
|
134
|
+
A table cannot be proposed — it has no identity per row for a patch to join against,
|
|
135
|
+
and an envelope declaring a table with a `target` or a `removal` is refused. It can
|
|
136
|
+
still report on a change it projects. Any row may declare what it plays:
|
|
137
|
+
|
|
138
|
+
```json
|
|
139
|
+
"rows": [
|
|
140
|
+
{ "role": "added", "cells": ["REQ-5", "Log every actuation.", "draft"] },
|
|
141
|
+
{ "role": "changed", "cells": ["REQ-2", "Signal a fault within 200 ms.", "in review"] },
|
|
142
|
+
{ "role": "removed", "cells": ["REQ-3", "Read battery voltage at 10 Hz.", "withdrawn"] },
|
|
143
|
+
{ "cells": ["REQ-1", "Stop within 40 m.", "approved"] }
|
|
144
|
+
]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`role` is `added`, `changed`, `context` or `removed`, and it is rendered with the
|
|
148
|
+
colours a graph uses for the same words. A row that declares none reads as context
|
|
149
|
+
among rows that do. Both row forms are accepted for the life of version 1, so
|
|
150
|
+
`["REQ-1", "…"]` and `{ "cells": ["REQ-1", "…"] }` are the same row and a table that
|
|
151
|
+
declares no role anywhere renders exactly as it did before roles existed.
|
|
152
|
+
|
|
153
|
+
Declare the role rather than encoding it in a column. A `status` column of your own
|
|
154
|
+
vocabulary is data, and is rendered as data — nothing infers a role from a cell.
|
|
155
|
+
|
|
156
|
+
A reader can switch a role off from the key, which narrows the table to the rows that
|
|
157
|
+
remain, and can take the table away with **download CSV** or **download XLSX**. Where
|
|
158
|
+
rows declare roles, both exports carry a `change` column, because the colour that
|
|
159
|
+
states the role in the rendering does not survive the crossing. A narrowed table
|
|
160
|
+
exports only what it shows, and the controls say so.
|
|
161
|
+
|
|
162
|
+
Old consumers: a copy of the widget published before roles existed validates against
|
|
163
|
+
its own committed schema, so a role-carrying table is refused there and the tool
|
|
164
|
+
result falls back to raw output. It degrades; it does not break.
|
|
165
|
+
|
|
132
166
|
## If you are not building in this repository
|
|
133
167
|
|
|
134
168
|
You do not need our command-line interface, and you do not need this repository. The
|
|
@@ -50,6 +50,12 @@
|
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
"file": "valid/graph-containers-at-the-ceiling.json"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"file": "valid/table-rows-with-roles.json"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"file": "valid/table-rows-partly-roled.json"
|
|
53
59
|
}
|
|
54
60
|
],
|
|
55
61
|
"invalid": [
|
|
@@ -160,6 +166,18 @@
|
|
|
160
166
|
{
|
|
161
167
|
"file": "invalid/containers-over-the-ceiling.json",
|
|
162
168
|
"expectedRule": "schema/maxItems"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"file": "invalid/table-row-unknown-role.json",
|
|
172
|
+
"expectedRule": "schema/enum"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"file": "invalid/table-row-without-cells.json",
|
|
176
|
+
"expectedRule": "schema/required"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"file": "invalid/table-row-object-column-mismatch.json",
|
|
180
|
+
"expectedRule": "row-column-mismatch"
|
|
163
181
|
}
|
|
164
182
|
]
|
|
165
183
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "urn:structured-exchange:1",
|
|
3
|
+
"kind": "table",
|
|
4
|
+
"data": {
|
|
5
|
+
"columns": [
|
|
6
|
+
"id",
|
|
7
|
+
"requirement"
|
|
8
|
+
],
|
|
9
|
+
"rows": [
|
|
10
|
+
{
|
|
11
|
+
"role": "added",
|
|
12
|
+
"cells": [
|
|
13
|
+
"REQ-005",
|
|
14
|
+
"A new one."
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"cells": [
|
|
19
|
+
"REQ-001",
|
|
20
|
+
"A row that declares no role."
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
[
|
|
24
|
+
"REQ-002",
|
|
25
|
+
"A row still written as a bare array."
|
|
26
|
+
]
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "urn:structured-exchange:1",
|
|
3
|
+
"kind": "table",
|
|
4
|
+
"data": {
|
|
5
|
+
"columns": [
|
|
6
|
+
"id",
|
|
7
|
+
"requirement",
|
|
8
|
+
"status"
|
|
9
|
+
],
|
|
10
|
+
"rows": [
|
|
11
|
+
{
|
|
12
|
+
"role": "added",
|
|
13
|
+
"cells": [
|
|
14
|
+
"REQ-005",
|
|
15
|
+
"The system shall log every actuation.",
|
|
16
|
+
"draft"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"role": "changed",
|
|
21
|
+
"cells": [
|
|
22
|
+
"REQ-002",
|
|
23
|
+
"The dashboard shall signal a fault within 200 ms.",
|
|
24
|
+
"in review"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"role": "context",
|
|
29
|
+
"cells": [
|
|
30
|
+
"REQ-001",
|
|
31
|
+
"The braking system shall stop the vehicle.",
|
|
32
|
+
"approved"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"role": "removed",
|
|
37
|
+
"cells": [
|
|
38
|
+
"REQ-003",
|
|
39
|
+
"The ECU shall read battery voltage at 10 Hz.",
|
|
40
|
+
"withdrawn"
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -236,6 +236,19 @@
|
|
|
236
236
|
"$ref": "#/$defs/label"
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
|
+
},
|
|
240
|
+
"cells": {
|
|
241
|
+
"type": "array",
|
|
242
|
+
"items": {
|
|
243
|
+
"type": [
|
|
244
|
+
"string",
|
|
245
|
+
"number",
|
|
246
|
+
"boolean",
|
|
247
|
+
"null"
|
|
248
|
+
],
|
|
249
|
+
"maxLength": 1000
|
|
250
|
+
},
|
|
251
|
+
"maxItems": 50
|
|
239
252
|
}
|
|
240
253
|
},
|
|
241
254
|
"properties": {
|
|
@@ -347,17 +360,31 @@
|
|
|
347
360
|
"type": "array",
|
|
348
361
|
"maxItems": 5000,
|
|
349
362
|
"items": {
|
|
350
|
-
"
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
"
|
|
356
|
-
"
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
363
|
+
"oneOf": [
|
|
364
|
+
{
|
|
365
|
+
"$ref": "#/$defs/cells"
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"type": "object",
|
|
369
|
+
"additionalProperties": false,
|
|
370
|
+
"required": [
|
|
371
|
+
"cells"
|
|
372
|
+
],
|
|
373
|
+
"properties": {
|
|
374
|
+
"cells": {
|
|
375
|
+
"$ref": "#/$defs/cells"
|
|
376
|
+
},
|
|
377
|
+
"role": {
|
|
378
|
+
"enum": [
|
|
379
|
+
"added",
|
|
380
|
+
"changed",
|
|
381
|
+
"context",
|
|
382
|
+
"removed"
|
|
383
|
+
]
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
]
|
|
361
388
|
}
|
|
362
389
|
}
|
|
363
390
|
}
|
|
@@ -10,6 +10,9 @@ import { readFileSync } from "node:fs";
|
|
|
10
10
|
|
|
11
11
|
// shared/src/structuredExchange.ts
|
|
12
12
|
var PROPOSABLE_KINDS = ["graph", "sequence"];
|
|
13
|
+
function readTableRow(row) {
|
|
14
|
+
return Array.isArray(row) ? { cells: row } : { cells: row.cells, role: row.role };
|
|
15
|
+
}
|
|
13
16
|
var STRUCTURED_EXCHANGE_CEILINGS = {
|
|
14
17
|
nodes: 500,
|
|
15
18
|
edges: 2e3,
|
|
@@ -282,12 +285,13 @@ function validateStructuredExchangeSemantics(envelope) {
|
|
|
282
285
|
if (envelope.kind === "table") {
|
|
283
286
|
const { columns, rows } = envelope.data;
|
|
284
287
|
rows.forEach((row, index3) => {
|
|
285
|
-
|
|
288
|
+
const { cells } = readTableRow(row);
|
|
289
|
+
if (cells.length !== columns.length) {
|
|
286
290
|
issues.push({
|
|
287
291
|
rule: "row-column-mismatch",
|
|
288
292
|
path: `/data/rows/${index3}`,
|
|
289
|
-
message: `row has ${
|
|
290
|
-
observed:
|
|
293
|
+
message: `row has ${cells.length} values but ${columns.length} columns are declared`,
|
|
294
|
+
observed: cells.length,
|
|
291
295
|
limit: columns.length
|
|
292
296
|
});
|
|
293
297
|
}
|
|
@@ -8442,6 +8446,19 @@ var structured_exchange_1_default = {
|
|
|
8442
8446
|
$ref: "#/$defs/label"
|
|
8443
8447
|
}
|
|
8444
8448
|
}
|
|
8449
|
+
},
|
|
8450
|
+
cells: {
|
|
8451
|
+
type: "array",
|
|
8452
|
+
items: {
|
|
8453
|
+
type: [
|
|
8454
|
+
"string",
|
|
8455
|
+
"number",
|
|
8456
|
+
"boolean",
|
|
8457
|
+
"null"
|
|
8458
|
+
],
|
|
8459
|
+
maxLength: 1e3
|
|
8460
|
+
},
|
|
8461
|
+
maxItems: 50
|
|
8445
8462
|
}
|
|
8446
8463
|
},
|
|
8447
8464
|
properties: {
|
|
@@ -8553,17 +8570,31 @@ var structured_exchange_1_default = {
|
|
|
8553
8570
|
type: "array",
|
|
8554
8571
|
maxItems: 5e3,
|
|
8555
8572
|
items: {
|
|
8556
|
-
|
|
8557
|
-
|
|
8558
|
-
|
|
8559
|
-
|
|
8560
|
-
|
|
8561
|
-
"
|
|
8562
|
-
|
|
8563
|
-
|
|
8564
|
-
|
|
8565
|
-
|
|
8566
|
-
|
|
8573
|
+
oneOf: [
|
|
8574
|
+
{
|
|
8575
|
+
$ref: "#/$defs/cells"
|
|
8576
|
+
},
|
|
8577
|
+
{
|
|
8578
|
+
type: "object",
|
|
8579
|
+
additionalProperties: false,
|
|
8580
|
+
required: [
|
|
8581
|
+
"cells"
|
|
8582
|
+
],
|
|
8583
|
+
properties: {
|
|
8584
|
+
cells: {
|
|
8585
|
+
$ref: "#/$defs/cells"
|
|
8586
|
+
},
|
|
8587
|
+
role: {
|
|
8588
|
+
enum: [
|
|
8589
|
+
"added",
|
|
8590
|
+
"changed",
|
|
8591
|
+
"context",
|
|
8592
|
+
"removed"
|
|
8593
|
+
]
|
|
8594
|
+
}
|
|
8595
|
+
}
|
|
8596
|
+
}
|
|
8597
|
+
]
|
|
8567
8598
|
}
|
|
8568
8599
|
}
|
|
8569
8600
|
}
|