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