colregs 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/LICENSE +194 -26
  2. package/PROVENANCE.md +46 -13
  3. package/README.md +324 -20
  4. package/data/applicability.json +1247 -236
  5. package/data/deprecated-identifiers.json +7 -0
  6. package/data/facts.json +549 -112
  7. package/data/geometry.json +34 -34
  8. package/data/images.json +52 -26
  9. package/data/lights.json +36 -36
  10. package/data/rules.json +887 -104
  11. package/docs/adr/0001-name-and-jurisdiction-model.md +194 -0
  12. package/docs/adr/0002-wig-gate-and-jurisdiction-field.md +77 -0
  13. package/docs/adr/0003-language-as-a-dimension.md +220 -0
  14. package/docs/adr/0004-licence-layering.md +78 -0
  15. package/docs/adr/0005-rule-categories-and-the-situation-record.md +323 -0
  16. package/docs/adr/0006-json-schema-and-identifier-diff.md +95 -0
  17. package/docs/conventions.md +27 -0
  18. package/docs/gates.json +84 -0
  19. package/docs/identifiers.md +435 -0
  20. package/docs/requirements.md +1320 -0
  21. package/docs/verification/2026-08-30-q6-q8.md +278 -0
  22. package/docs/verification/2026-09-05-rule27f-rule28-anchor-scenarios.md +330 -0
  23. package/fixtures/applicability-fixtures.json +498 -138
  24. package/fixtures/situation-fixtures.json +3603 -0
  25. package/package.json +27 -5
  26. package/schema/applicability-fixtures.schema.json +47 -0
  27. package/schema/applicability.schema.json +401 -0
  28. package/schema/deprecated-identifiers.schema.json +29 -0
  29. package/schema/facts.schema.json +793 -0
  30. package/schema/geometry.schema.json +239 -0
  31. package/schema/images.schema.json +53 -0
  32. package/schema/lights.schema.json +131 -0
  33. package/schema/rules.schema.json +50 -0
  34. package/schema/situation-fixtures.schema.json +325 -0
@@ -0,0 +1,3603 @@
1
+ {
2
+ "note": "Situations and the applicability entry ids that apply to each, under the International rules. The two-subject sibling of applicability-fixtures.json, which is untouched and stays the one-subject contract (REQ-VERIFY-1, REQ-CAT-5). A situation addresses each vessel's facts through the subject namespace of docs/identifiers.md: <subject>:<class>:<key>, subject in {own, other, pair}.",
3
+ "schema": "situation/1",
4
+ "status": "pencil",
5
+ "adr": "0005",
6
+ "requirements": [
7
+ "REQ-CAT-4",
8
+ "REQ-CAT-5",
9
+ "REQ-CAT-6",
10
+ "REQ-CAT-7"
11
+ ],
12
+ "jurisdiction": "intl",
13
+ "expect_form": {
14
+ "note": "An element of `expect` is either a bare entry id, exactly as in applicability-fixtures.json, or an object {\"entry\": <id>, \"modality\": <modality>} naming the modality that entry is expected to carry for this situation. The two forms are interchangeable and a bare id asserts nothing about modality, so the published one-subject fixtures remain valid unedited while Q-5's three modality-only gates (23a2, 26b-mast, 30c) become fixturable.",
15
+ "bare": "23a1",
16
+ "with_modality": {
17
+ "entry": "23a2",
18
+ "modality": "may"
19
+ }
20
+ },
21
+ "case_status": {
22
+ "note": "`status` says whether a case asserts anything. An `illustrative` case fixes the shape of the situation record and the namespace before the entries it describes exist; its `expect` is empty and the suite checks its shape and namespace resolution only. A case becomes `binding` when the entries it names exist, and only then does it join the fixture replay. The three illustrative cases this file opened with -- a crossing, a narrow-channel head-on and a 13(d) latch -- are all binding as of the classification PR, which is what they were written to become. The status stays in the schema because the next family of norms will want it again.",
23
+ "values": [
24
+ "illustrative",
25
+ "binding"
26
+ ]
27
+ },
28
+ "cases": [
29
+ {
30
+ "name": "crossing: own power-driven, other fine on the starboard bow",
31
+ "status": "binding",
32
+ "narrative": "Two power-driven vessels in sight of one another, other bearing 040 relative at 3 nm on a steady bearing and crossing right to left ahead. Own has the other on her own starboard side, so own is the give-way vessel under Rule 15 and Rule 16 governs the action; the other is stand-on under Rule 17. Rule 15 is not transcribed yet, so this asserts nothing. Binding since Rules 7(d), 13, 14 and 15 landed: 15a-crossing is the encounter, 15a-give-way is the role, 7d1 is the steady bearing, and 8f3 is Rule 8(f)(iii) denying the stand-on vessel any privilege from a shall-not-impede duty she is not owed. Rules 16 and 17 are `conduct` and are still not modelled.",
33
+ "expect": [
34
+ "4",
35
+ "11",
36
+ "7d1",
37
+ "8f3",
38
+ "15a-crossing",
39
+ "15a-give-way"
40
+ ],
41
+ "situation": {
42
+ "own": {
43
+ "fact": {
44
+ "fact:propulsion": "propulsion:power",
45
+ "fact:activity": "activity:none",
46
+ "fact:position": "position:underway",
47
+ "fact:making_way": true,
48
+ "fact:length_m": 15
49
+ },
50
+ "kin": {
51
+ "kin:position": {
52
+ "latitude": 50.0,
53
+ "longitude": -1.4
54
+ },
55
+ "kin:heading_deg": 0,
56
+ "kin:sog_kn": 12,
57
+ "kin:rot_deg_min": 0,
58
+ "kin:dynamics": "dynamics:yacht"
59
+ },
60
+ "geo": {
61
+ "geo:rel_bearing_deg": 40
62
+ },
63
+ "hist": {
64
+ "hist:was_overtaking": false,
65
+ "hist:latched_at_s": null
66
+ }
67
+ },
68
+ "other": {
69
+ "fact": {
70
+ "fact:propulsion": "propulsion:power",
71
+ "fact:activity": "activity:none",
72
+ "fact:position": "position:underway",
73
+ "fact:making_way": true,
74
+ "fact:length_m": 40
75
+ },
76
+ "kin": {
77
+ "kin:position": {
78
+ "latitude": 50.0383,
79
+ "longitude": -1.35
80
+ },
81
+ "kin:heading_deg": 300,
82
+ "kin:sog_kn": 7.83,
83
+ "kin:rot_deg_min": 0,
84
+ "kin:dynamics": "dynamics:cargo"
85
+ },
86
+ "geo": {
87
+ "geo:rel_bearing_deg": 280
88
+ },
89
+ "hist": {
90
+ "hist:was_overtaking": false,
91
+ "hist:latched_at_s": null
92
+ }
93
+ },
94
+ "pair": {
95
+ "geo": {
96
+ "geo:range_m": 5556,
97
+ "geo:bearing_change_deg_min": 0.0,
98
+ "geo:cpa_m": 1,
99
+ "geo:tcpa_s": 1023,
100
+ "geo:in_sight": true,
101
+ "geo:risk_of_collision": true
102
+ }
103
+ }
104
+ }
105
+ },
106
+ {
107
+ "name": "narrow channel: head-on round a bend, bank 100 m to starboard",
108
+ "status": "binding",
109
+ "narrative": "The R1 illustration of ADR 0005 sec. 5 and the proposal's sec. 4. Own keeps to the starboard side of a narrow channel per Rule 9(a); a vessel cuts the bend and is head-on at 800 m. Rule 14(a) requires each to alter to starboard, and the bank is 100 m to starboard of own. Every compliant plan grounds or collides; a port alteration passes starboard-to-starboard and breaches 14(a). The value of the case here is not the region finding, which belongs to colregs-engine -- it is that the situation record can carry it at all. Binding now: `pair:env:narrow_channel` is the fact the recorded gap asked for and 14b is the classification. Neither 9(b) nor 9(c) applies from own's side -- she is 24 m and power-driven -- so the narrow channel changes no entry here and is stated because it is true, not to select one. Recast on a steady bearing when the consistency check landed (Q-48): the other now bears 357 relative, three degrees on own's port bow, and has own 3.6 degrees on her own starboard bow, which at 12 and 10 knots is a collision course. The 3/8 starboard-to-starboard pair the case opened with passed at 74 m with the bearing changing four and a half degrees a minute, and no positive speeds make it steady -- two vessels each with the other to starboard are never on a collision course. The dilemma is unchanged: a starboard alteration is into the bank.",
110
+ "expect": [
111
+ "4",
112
+ "11",
113
+ "7d1",
114
+ "8f3",
115
+ "14b"
116
+ ],
117
+ "situation": {
118
+ "own": {
119
+ "fact": {
120
+ "fact:propulsion": "propulsion:power",
121
+ "fact:activity": "activity:none",
122
+ "fact:position": "position:underway",
123
+ "fact:making_way": true,
124
+ "fact:length_m": 24
125
+ },
126
+ "kin": {
127
+ "kin:position": {
128
+ "latitude": 50.0,
129
+ "longitude": -1.4
130
+ },
131
+ "kin:heading_deg": 90,
132
+ "kin:sog_kn": 12,
133
+ "kin:rot_deg_min": 0,
134
+ "kin:dynamics": "dynamics:ferry"
135
+ },
136
+ "geo": {
137
+ "geo:rel_bearing_deg": 357.0
138
+ },
139
+ "hist": {
140
+ "hist:was_overtaking": false,
141
+ "hist:latched_at_s": null
142
+ }
143
+ },
144
+ "other": {
145
+ "fact": {
146
+ "fact:propulsion": "propulsion:power",
147
+ "fact:activity": "activity:none",
148
+ "fact:position": "position:underway",
149
+ "fact:making_way": true,
150
+ "fact:length_m": 18
151
+ },
152
+ "kin": {
153
+ "kin:position": {
154
+ "latitude": 50.00038,
155
+ "longitude": -1.38882
156
+ },
157
+ "kin:heading_deg": 263.4,
158
+ "kin:sog_kn": 10,
159
+ "kin:rot_deg_min": 0,
160
+ "kin:dynamics": "dynamics:unknown"
161
+ },
162
+ "geo": {
163
+ "geo:rel_bearing_deg": 3.6
164
+ },
165
+ "hist": {
166
+ "hist:was_overtaking": false,
167
+ "hist:latched_at_s": null
168
+ }
169
+ },
170
+ "pair": {
171
+ "geo": {
172
+ "geo:range_m": 800,
173
+ "geo:bearing_change_deg_min": 0.0,
174
+ "geo:cpa_m": 0,
175
+ "geo:tcpa_s": 71,
176
+ "geo:in_sight": true,
177
+ "geo:risk_of_collision": true
178
+ },
179
+ "env": {
180
+ "env:narrow_channel": true,
181
+ "env:traffic_lane": false
182
+ }
183
+ }
184
+ }
185
+ },
186
+ {
187
+ "name": "13(d) latch: an overtaking whose bearing has drawn out to a crossing",
188
+ "status": "binding",
189
+ "narrative": "Own came up on the other vessel from abaft her beam and is overtaking. The bearing has since drawn out: own now bears 250 relative from the other, just outside Rule 13(b)'s 112.5-247.5 sector, so the instantaneous geometry alone would reclassify this as a crossing with the other vessel give-way. Rule 13(d) forbids exactly that, and own:hist:was_overtaking is the fact that carries it. This is the case that makes history a class rather than a note. Binding: 13d holds the classification at overtaking on the strength of the latch alone, and 15a-crossing is absent -- not because the geometry excludes it, which it does not, but because its `own:hist:was_overtaking: false` gate does. That absence is the whole content of 13(d). The pair numbers were re-derived from the kinematics when the consistency check landed (Q-48): at 400 m abeam with five knots between them the bearing is changing at 24 degrees a minute and the closest approach is already past, so 7(d)(i)'s steady-bearing ground is not available and `7d1` left the expectation. `geo:risk_of_collision` is a supplied judgement and stays true -- nothing in this package may deny a risk, and 13(d) does not read one.",
190
+ "expect": [
191
+ "4",
192
+ "11",
193
+ "8f3",
194
+ "13a",
195
+ "13d"
196
+ ],
197
+ "situation": {
198
+ "own": {
199
+ "fact": {
200
+ "fact:propulsion": "propulsion:power",
201
+ "fact:activity": "activity:none",
202
+ "fact:position": "position:underway",
203
+ "fact:making_way": true,
204
+ "fact:length_m": 30
205
+ },
206
+ "kin": {
207
+ "kin:position": {
208
+ "latitude": 50.0,
209
+ "longitude": -1.4
210
+ },
211
+ "kin:heading_deg": 20,
212
+ "kin:sog_kn": 14,
213
+ "kin:rot_deg_min": 0,
214
+ "kin:dynamics": "dynamics:cargo"
215
+ },
216
+ "geo": {
217
+ "geo:rel_bearing_deg": 90
218
+ },
219
+ "hist": {
220
+ "hist:was_overtaking": true,
221
+ "hist:latched_at_s": 420
222
+ }
223
+ },
224
+ "other": {
225
+ "fact": {
226
+ "fact:propulsion": "propulsion:power",
227
+ "fact:activity": "activity:none",
228
+ "fact:position": "position:underway",
229
+ "fact:making_way": true,
230
+ "fact:length_m": 22
231
+ },
232
+ "kin": {
233
+ "kin:position": {
234
+ "latitude": 49.99877,
235
+ "longitude": -1.39475
236
+ },
237
+ "kin:heading_deg": 40,
238
+ "kin:sog_kn": 9,
239
+ "kin:rot_deg_min": 0,
240
+ "kin:dynamics": "dynamics:fishing"
241
+ },
242
+ "geo": {
243
+ "geo:rel_bearing_deg": 250
244
+ },
245
+ "hist": {
246
+ "hist:was_overtaking": false,
247
+ "hist:latched_at_s": null
248
+ }
249
+ },
250
+ "pair": {
251
+ "geo": {
252
+ "geo:range_m": 400,
253
+ "geo:bearing_change_deg_min": 24.51,
254
+ "geo:cpa_m": 350,
255
+ "geo:tcpa_s": -60,
256
+ "geo:in_sight": true,
257
+ "geo:risk_of_collision": true
258
+ }
259
+ }
260
+ }
261
+ },
262
+ {
263
+ "name": "18 matrix: own power-driven, other power-driven, in sight",
264
+ "status": "binding",
265
+ "narrative": "Own is power-driven; the other vessel is power-driven. Both underway and in sight of one another.",
266
+ "expect": [
267
+ "11",
268
+ "4"
269
+ ],
270
+ "situation": {
271
+ "own": {
272
+ "fact": {
273
+ "fact:propulsion": "propulsion:power",
274
+ "fact:activity": "activity:none",
275
+ "fact:position": "position:underway",
276
+ "fact:making_way": true,
277
+ "fact:length_m": 40
278
+ }
279
+ },
280
+ "other": {
281
+ "fact": {
282
+ "fact:propulsion": "propulsion:power",
283
+ "fact:activity": "activity:none",
284
+ "fact:position": "position:underway",
285
+ "fact:making_way": true,
286
+ "fact:length_m": 40
287
+ }
288
+ },
289
+ "pair": {
290
+ "geo": {
291
+ "geo:in_sight": true
292
+ }
293
+ }
294
+ }
295
+ },
296
+ {
297
+ "name": "18 matrix: own power-driven, other sailing, in sight",
298
+ "status": "binding",
299
+ "narrative": "Own is power-driven; the other vessel is sailing. Both underway and in sight of one another.",
300
+ "expect": [
301
+ "11",
302
+ "18a4",
303
+ "4"
304
+ ],
305
+ "situation": {
306
+ "own": {
307
+ "fact": {
308
+ "fact:propulsion": "propulsion:power",
309
+ "fact:activity": "activity:none",
310
+ "fact:position": "position:underway",
311
+ "fact:making_way": true,
312
+ "fact:length_m": 40
313
+ }
314
+ },
315
+ "other": {
316
+ "fact": {
317
+ "fact:propulsion": "propulsion:sail",
318
+ "fact:activity": "activity:none",
319
+ "fact:position": "position:underway",
320
+ "fact:making_way": true,
321
+ "fact:length_m": 12
322
+ }
323
+ },
324
+ "pair": {
325
+ "geo": {
326
+ "geo:in_sight": true
327
+ }
328
+ }
329
+ }
330
+ },
331
+ {
332
+ "name": "18 matrix: own power-driven, other fishing (power), in sight",
333
+ "status": "binding",
334
+ "narrative": "Own is power-driven; the other vessel is fishing (power). Both underway and in sight of one another.",
335
+ "expect": [
336
+ "11",
337
+ "18a3",
338
+ "4"
339
+ ],
340
+ "situation": {
341
+ "own": {
342
+ "fact": {
343
+ "fact:propulsion": "propulsion:power",
344
+ "fact:activity": "activity:none",
345
+ "fact:position": "position:underway",
346
+ "fact:making_way": true,
347
+ "fact:length_m": 40
348
+ }
349
+ },
350
+ "other": {
351
+ "fact": {
352
+ "fact:propulsion": "propulsion:power",
353
+ "fact:activity": "activity:fishing",
354
+ "fact:position": "position:underway",
355
+ "fact:making_way": true,
356
+ "fact:length_m": 18
357
+ }
358
+ },
359
+ "pair": {
360
+ "geo": {
361
+ "geo:in_sight": true
362
+ }
363
+ }
364
+ }
365
+ },
366
+ {
367
+ "name": "18 matrix: own power-driven, other not under command, in sight",
368
+ "status": "binding",
369
+ "narrative": "Own is power-driven; the other vessel is not under command. Both underway and in sight of one another.",
370
+ "expect": [
371
+ "11",
372
+ "18a1",
373
+ "4"
374
+ ],
375
+ "situation": {
376
+ "own": {
377
+ "fact": {
378
+ "fact:propulsion": "propulsion:power",
379
+ "fact:activity": "activity:none",
380
+ "fact:position": "position:underway",
381
+ "fact:making_way": true,
382
+ "fact:length_m": 40
383
+ }
384
+ },
385
+ "other": {
386
+ "fact": {
387
+ "fact:propulsion": "propulsion:power",
388
+ "fact:activity": "activity:nuc",
389
+ "fact:position": "position:underway",
390
+ "fact:making_way": false,
391
+ "fact:length_m": 60
392
+ }
393
+ },
394
+ "pair": {
395
+ "geo": {
396
+ "geo:in_sight": true
397
+ }
398
+ }
399
+ }
400
+ },
401
+ {
402
+ "name": "18 matrix: own power-driven, other restricted in her ability to manoeuvre, in sight",
403
+ "status": "binding",
404
+ "narrative": "Own is power-driven; the other vessel is restricted in her ability to manoeuvre. Both underway and in sight of one another.",
405
+ "expect": [
406
+ "11",
407
+ "18a2",
408
+ "4"
409
+ ],
410
+ "situation": {
411
+ "own": {
412
+ "fact": {
413
+ "fact:propulsion": "propulsion:power",
414
+ "fact:activity": "activity:none",
415
+ "fact:position": "position:underway",
416
+ "fact:making_way": true,
417
+ "fact:length_m": 40
418
+ }
419
+ },
420
+ "other": {
421
+ "fact": {
422
+ "fact:propulsion": "propulsion:power",
423
+ "fact:activity": "activity:ram",
424
+ "fact:position": "position:underway",
425
+ "fact:making_way": true,
426
+ "fact:length_m": 80
427
+ }
428
+ },
429
+ "pair": {
430
+ "geo": {
431
+ "geo:in_sight": true
432
+ }
433
+ }
434
+ }
435
+ },
436
+ {
437
+ "name": "18 matrix: own power-driven, other constrained by her draught, in sight",
438
+ "status": "binding",
439
+ "narrative": "Own is power-driven; the other vessel is constrained by her draught. Both underway and in sight of one another.",
440
+ "expect": [
441
+ "11",
442
+ {
443
+ "entry": "18d1",
444
+ "modality": "shall-if-practicable"
445
+ },
446
+ "4"
447
+ ],
448
+ "situation": {
449
+ "own": {
450
+ "fact": {
451
+ "fact:propulsion": "propulsion:power",
452
+ "fact:activity": "activity:none",
453
+ "fact:position": "position:underway",
454
+ "fact:making_way": true,
455
+ "fact:length_m": 40
456
+ }
457
+ },
458
+ "other": {
459
+ "fact": {
460
+ "fact:propulsion": "propulsion:power",
461
+ "fact:activity": "activity:cbd",
462
+ "fact:position": "position:underway",
463
+ "fact:making_way": true,
464
+ "fact:length_m": 220
465
+ }
466
+ },
467
+ "pair": {
468
+ "geo": {
469
+ "geo:in_sight": true
470
+ }
471
+ }
472
+ }
473
+ },
474
+ {
475
+ "name": "18 matrix: own sailing, other power-driven, in sight",
476
+ "status": "binding",
477
+ "narrative": "Own is sailing; the other vessel is power-driven. Both underway and in sight of one another.",
478
+ "expect": [
479
+ "11",
480
+ "4"
481
+ ],
482
+ "situation": {
483
+ "own": {
484
+ "fact": {
485
+ "fact:propulsion": "propulsion:sail",
486
+ "fact:activity": "activity:none",
487
+ "fact:position": "position:underway",
488
+ "fact:making_way": true,
489
+ "fact:length_m": 12
490
+ }
491
+ },
492
+ "other": {
493
+ "fact": {
494
+ "fact:propulsion": "propulsion:power",
495
+ "fact:activity": "activity:none",
496
+ "fact:position": "position:underway",
497
+ "fact:making_way": true,
498
+ "fact:length_m": 40
499
+ }
500
+ },
501
+ "pair": {
502
+ "geo": {
503
+ "geo:in_sight": true
504
+ }
505
+ }
506
+ }
507
+ },
508
+ {
509
+ "name": "18 matrix: own sailing, other sailing, in sight",
510
+ "status": "binding",
511
+ "narrative": "Own is sailing; the other vessel is sailing. Both underway and in sight of one another.",
512
+ "expect": [
513
+ "11",
514
+ "4"
515
+ ],
516
+ "situation": {
517
+ "own": {
518
+ "fact": {
519
+ "fact:propulsion": "propulsion:sail",
520
+ "fact:activity": "activity:none",
521
+ "fact:position": "position:underway",
522
+ "fact:making_way": true,
523
+ "fact:length_m": 12
524
+ }
525
+ },
526
+ "other": {
527
+ "fact": {
528
+ "fact:propulsion": "propulsion:sail",
529
+ "fact:activity": "activity:none",
530
+ "fact:position": "position:underway",
531
+ "fact:making_way": true,
532
+ "fact:length_m": 12
533
+ }
534
+ },
535
+ "pair": {
536
+ "geo": {
537
+ "geo:in_sight": true
538
+ }
539
+ }
540
+ }
541
+ },
542
+ {
543
+ "name": "18 matrix: own sailing, other fishing (power), in sight",
544
+ "status": "binding",
545
+ "narrative": "Own is sailing; the other vessel is fishing (power). Both underway and in sight of one another.",
546
+ "expect": [
547
+ "11",
548
+ "18b3",
549
+ "4"
550
+ ],
551
+ "situation": {
552
+ "own": {
553
+ "fact": {
554
+ "fact:propulsion": "propulsion:sail",
555
+ "fact:activity": "activity:none",
556
+ "fact:position": "position:underway",
557
+ "fact:making_way": true,
558
+ "fact:length_m": 12
559
+ }
560
+ },
561
+ "other": {
562
+ "fact": {
563
+ "fact:propulsion": "propulsion:power",
564
+ "fact:activity": "activity:fishing",
565
+ "fact:position": "position:underway",
566
+ "fact:making_way": true,
567
+ "fact:length_m": 18
568
+ }
569
+ },
570
+ "pair": {
571
+ "geo": {
572
+ "geo:in_sight": true
573
+ }
574
+ }
575
+ }
576
+ },
577
+ {
578
+ "name": "18 matrix: own sailing, other not under command, in sight",
579
+ "status": "binding",
580
+ "narrative": "Own is sailing; the other vessel is not under command. Both underway and in sight of one another.",
581
+ "expect": [
582
+ "11",
583
+ "18b1",
584
+ "4"
585
+ ],
586
+ "situation": {
587
+ "own": {
588
+ "fact": {
589
+ "fact:propulsion": "propulsion:sail",
590
+ "fact:activity": "activity:none",
591
+ "fact:position": "position:underway",
592
+ "fact:making_way": true,
593
+ "fact:length_m": 12
594
+ }
595
+ },
596
+ "other": {
597
+ "fact": {
598
+ "fact:propulsion": "propulsion:power",
599
+ "fact:activity": "activity:nuc",
600
+ "fact:position": "position:underway",
601
+ "fact:making_way": false,
602
+ "fact:length_m": 60
603
+ }
604
+ },
605
+ "pair": {
606
+ "geo": {
607
+ "geo:in_sight": true
608
+ }
609
+ }
610
+ }
611
+ },
612
+ {
613
+ "name": "18 matrix: own sailing, other restricted in her ability to manoeuvre, in sight",
614
+ "status": "binding",
615
+ "narrative": "Own is sailing; the other vessel is restricted in her ability to manoeuvre. Both underway and in sight of one another.",
616
+ "expect": [
617
+ "11",
618
+ "18b2",
619
+ "4"
620
+ ],
621
+ "situation": {
622
+ "own": {
623
+ "fact": {
624
+ "fact:propulsion": "propulsion:sail",
625
+ "fact:activity": "activity:none",
626
+ "fact:position": "position:underway",
627
+ "fact:making_way": true,
628
+ "fact:length_m": 12
629
+ }
630
+ },
631
+ "other": {
632
+ "fact": {
633
+ "fact:propulsion": "propulsion:power",
634
+ "fact:activity": "activity:ram",
635
+ "fact:position": "position:underway",
636
+ "fact:making_way": true,
637
+ "fact:length_m": 80
638
+ }
639
+ },
640
+ "pair": {
641
+ "geo": {
642
+ "geo:in_sight": true
643
+ }
644
+ }
645
+ }
646
+ },
647
+ {
648
+ "name": "18 matrix: own sailing, other constrained by her draught, in sight",
649
+ "status": "binding",
650
+ "narrative": "Own is sailing; the other vessel is constrained by her draught. Both underway and in sight of one another.",
651
+ "expect": [
652
+ "11",
653
+ {
654
+ "entry": "18d1",
655
+ "modality": "shall-if-practicable"
656
+ },
657
+ "4"
658
+ ],
659
+ "situation": {
660
+ "own": {
661
+ "fact": {
662
+ "fact:propulsion": "propulsion:sail",
663
+ "fact:activity": "activity:none",
664
+ "fact:position": "position:underway",
665
+ "fact:making_way": true,
666
+ "fact:length_m": 12
667
+ }
668
+ },
669
+ "other": {
670
+ "fact": {
671
+ "fact:propulsion": "propulsion:power",
672
+ "fact:activity": "activity:cbd",
673
+ "fact:position": "position:underway",
674
+ "fact:making_way": true,
675
+ "fact:length_m": 220
676
+ }
677
+ },
678
+ "pair": {
679
+ "geo": {
680
+ "geo:in_sight": true
681
+ }
682
+ }
683
+ }
684
+ },
685
+ {
686
+ "name": "18 matrix: own fishing (power), other power-driven, in sight",
687
+ "status": "binding",
688
+ "narrative": "Own is fishing (power); the other vessel is power-driven. Both underway and in sight of one another.",
689
+ "expect": [
690
+ "11",
691
+ "4"
692
+ ],
693
+ "situation": {
694
+ "own": {
695
+ "fact": {
696
+ "fact:propulsion": "propulsion:power",
697
+ "fact:activity": "activity:fishing",
698
+ "fact:position": "position:underway",
699
+ "fact:making_way": true,
700
+ "fact:length_m": 18
701
+ }
702
+ },
703
+ "other": {
704
+ "fact": {
705
+ "fact:propulsion": "propulsion:power",
706
+ "fact:activity": "activity:none",
707
+ "fact:position": "position:underway",
708
+ "fact:making_way": true,
709
+ "fact:length_m": 40
710
+ }
711
+ },
712
+ "pair": {
713
+ "geo": {
714
+ "geo:in_sight": true
715
+ }
716
+ }
717
+ }
718
+ },
719
+ {
720
+ "name": "18 matrix: own fishing (power), other sailing, in sight",
721
+ "status": "binding",
722
+ "narrative": "Own is fishing (power); the other vessel is sailing. Both underway and in sight of one another.",
723
+ "expect": [
724
+ "11",
725
+ "4"
726
+ ],
727
+ "situation": {
728
+ "own": {
729
+ "fact": {
730
+ "fact:propulsion": "propulsion:power",
731
+ "fact:activity": "activity:fishing",
732
+ "fact:position": "position:underway",
733
+ "fact:making_way": true,
734
+ "fact:length_m": 18
735
+ }
736
+ },
737
+ "other": {
738
+ "fact": {
739
+ "fact:propulsion": "propulsion:sail",
740
+ "fact:activity": "activity:none",
741
+ "fact:position": "position:underway",
742
+ "fact:making_way": true,
743
+ "fact:length_m": 12
744
+ }
745
+ },
746
+ "pair": {
747
+ "geo": {
748
+ "geo:in_sight": true
749
+ }
750
+ }
751
+ }
752
+ },
753
+ {
754
+ "name": "18 matrix: own fishing (power), other fishing (power), in sight",
755
+ "status": "binding",
756
+ "narrative": "Own is fishing (power); the other vessel is fishing (power). Both underway and in sight of one another.",
757
+ "expect": [
758
+ "11",
759
+ "4"
760
+ ],
761
+ "situation": {
762
+ "own": {
763
+ "fact": {
764
+ "fact:propulsion": "propulsion:power",
765
+ "fact:activity": "activity:fishing",
766
+ "fact:position": "position:underway",
767
+ "fact:making_way": true,
768
+ "fact:length_m": 18
769
+ }
770
+ },
771
+ "other": {
772
+ "fact": {
773
+ "fact:propulsion": "propulsion:power",
774
+ "fact:activity": "activity:fishing",
775
+ "fact:position": "position:underway",
776
+ "fact:making_way": true,
777
+ "fact:length_m": 18
778
+ }
779
+ },
780
+ "pair": {
781
+ "geo": {
782
+ "geo:in_sight": true
783
+ }
784
+ }
785
+ }
786
+ },
787
+ {
788
+ "name": "18 matrix: own fishing (power), other not under command, in sight",
789
+ "status": "binding",
790
+ "narrative": "Own is fishing (power); the other vessel is not under command. Both underway and in sight of one another.",
791
+ "expect": [
792
+ "11",
793
+ {
794
+ "entry": "18c1",
795
+ "modality": "shall-if-practicable"
796
+ },
797
+ "4"
798
+ ],
799
+ "situation": {
800
+ "own": {
801
+ "fact": {
802
+ "fact:propulsion": "propulsion:power",
803
+ "fact:activity": "activity:fishing",
804
+ "fact:position": "position:underway",
805
+ "fact:making_way": true,
806
+ "fact:length_m": 18
807
+ }
808
+ },
809
+ "other": {
810
+ "fact": {
811
+ "fact:propulsion": "propulsion:power",
812
+ "fact:activity": "activity:nuc",
813
+ "fact:position": "position:underway",
814
+ "fact:making_way": false,
815
+ "fact:length_m": 60
816
+ }
817
+ },
818
+ "pair": {
819
+ "geo": {
820
+ "geo:in_sight": true
821
+ }
822
+ }
823
+ }
824
+ },
825
+ {
826
+ "name": "18 matrix: own fishing (power), other restricted in her ability to manoeuvre, in sight",
827
+ "status": "binding",
828
+ "narrative": "Own is fishing (power); the other vessel is restricted in her ability to manoeuvre. Both underway and in sight of one another.",
829
+ "expect": [
830
+ "11",
831
+ {
832
+ "entry": "18c2",
833
+ "modality": "shall-if-practicable"
834
+ },
835
+ "4"
836
+ ],
837
+ "situation": {
838
+ "own": {
839
+ "fact": {
840
+ "fact:propulsion": "propulsion:power",
841
+ "fact:activity": "activity:fishing",
842
+ "fact:position": "position:underway",
843
+ "fact:making_way": true,
844
+ "fact:length_m": 18
845
+ }
846
+ },
847
+ "other": {
848
+ "fact": {
849
+ "fact:propulsion": "propulsion:power",
850
+ "fact:activity": "activity:ram",
851
+ "fact:position": "position:underway",
852
+ "fact:making_way": true,
853
+ "fact:length_m": 80
854
+ }
855
+ },
856
+ "pair": {
857
+ "geo": {
858
+ "geo:in_sight": true
859
+ }
860
+ }
861
+ }
862
+ },
863
+ {
864
+ "name": "18 matrix: own fishing (power), other constrained by her draught, in sight",
865
+ "status": "binding",
866
+ "narrative": "Own is fishing (power); the other vessel is constrained by her draught. Both underway and in sight of one another.",
867
+ "expect": [
868
+ "11",
869
+ {
870
+ "entry": "18d1",
871
+ "modality": "shall-if-practicable"
872
+ },
873
+ "4"
874
+ ],
875
+ "situation": {
876
+ "own": {
877
+ "fact": {
878
+ "fact:propulsion": "propulsion:power",
879
+ "fact:activity": "activity:fishing",
880
+ "fact:position": "position:underway",
881
+ "fact:making_way": true,
882
+ "fact:length_m": 18
883
+ }
884
+ },
885
+ "other": {
886
+ "fact": {
887
+ "fact:propulsion": "propulsion:power",
888
+ "fact:activity": "activity:cbd",
889
+ "fact:position": "position:underway",
890
+ "fact:making_way": true,
891
+ "fact:length_m": 220
892
+ }
893
+ },
894
+ "pair": {
895
+ "geo": {
896
+ "geo:in_sight": true
897
+ }
898
+ }
899
+ }
900
+ },
901
+ {
902
+ "name": "18 matrix: own not under command, other power-driven, in sight",
903
+ "status": "binding",
904
+ "narrative": "Own is not under command: Rule 18 ranks her below nothing, so no paragraph of it applies to her and she carries no obligation here -- including against a vessel restricted in her ability to manoeuvre, which is the unordered pair at the top of the partial order.",
905
+ "expect": [
906
+ "11",
907
+ "4"
908
+ ],
909
+ "situation": {
910
+ "own": {
911
+ "fact": {
912
+ "fact:propulsion": "propulsion:power",
913
+ "fact:activity": "activity:nuc",
914
+ "fact:position": "position:underway",
915
+ "fact:making_way": false,
916
+ "fact:length_m": 60
917
+ }
918
+ },
919
+ "other": {
920
+ "fact": {
921
+ "fact:propulsion": "propulsion:power",
922
+ "fact:activity": "activity:none",
923
+ "fact:position": "position:underway",
924
+ "fact:making_way": true,
925
+ "fact:length_m": 40
926
+ }
927
+ },
928
+ "pair": {
929
+ "geo": {
930
+ "geo:in_sight": true
931
+ }
932
+ }
933
+ }
934
+ },
935
+ {
936
+ "name": "18 matrix: own not under command, other sailing, in sight",
937
+ "status": "binding",
938
+ "narrative": "Own is not under command: Rule 18 ranks her below nothing, so no paragraph of it applies to her and she carries no obligation here -- including against a vessel restricted in her ability to manoeuvre, which is the unordered pair at the top of the partial order.",
939
+ "expect": [
940
+ "11",
941
+ "4"
942
+ ],
943
+ "situation": {
944
+ "own": {
945
+ "fact": {
946
+ "fact:propulsion": "propulsion:power",
947
+ "fact:activity": "activity:nuc",
948
+ "fact:position": "position:underway",
949
+ "fact:making_way": false,
950
+ "fact:length_m": 60
951
+ }
952
+ },
953
+ "other": {
954
+ "fact": {
955
+ "fact:propulsion": "propulsion:sail",
956
+ "fact:activity": "activity:none",
957
+ "fact:position": "position:underway",
958
+ "fact:making_way": true,
959
+ "fact:length_m": 12
960
+ }
961
+ },
962
+ "pair": {
963
+ "geo": {
964
+ "geo:in_sight": true
965
+ }
966
+ }
967
+ }
968
+ },
969
+ {
970
+ "name": "18 matrix: own not under command, other fishing (power), in sight",
971
+ "status": "binding",
972
+ "narrative": "Own is not under command: Rule 18 ranks her below nothing, so no paragraph of it applies to her and she carries no obligation here -- including against a vessel restricted in her ability to manoeuvre, which is the unordered pair at the top of the partial order.",
973
+ "expect": [
974
+ "11",
975
+ "4"
976
+ ],
977
+ "situation": {
978
+ "own": {
979
+ "fact": {
980
+ "fact:propulsion": "propulsion:power",
981
+ "fact:activity": "activity:nuc",
982
+ "fact:position": "position:underway",
983
+ "fact:making_way": false,
984
+ "fact:length_m": 60
985
+ }
986
+ },
987
+ "other": {
988
+ "fact": {
989
+ "fact:propulsion": "propulsion:power",
990
+ "fact:activity": "activity:fishing",
991
+ "fact:position": "position:underway",
992
+ "fact:making_way": true,
993
+ "fact:length_m": 18
994
+ }
995
+ },
996
+ "pair": {
997
+ "geo": {
998
+ "geo:in_sight": true
999
+ }
1000
+ }
1001
+ }
1002
+ },
1003
+ {
1004
+ "name": "18 matrix: own not under command, other not under command, in sight",
1005
+ "status": "binding",
1006
+ "narrative": "Own is not under command: Rule 18 ranks her below nothing, so no paragraph of it applies to her and she carries no obligation here -- including against a vessel restricted in her ability to manoeuvre, which is the unordered pair at the top of the partial order.",
1007
+ "expect": [
1008
+ "11",
1009
+ "4"
1010
+ ],
1011
+ "situation": {
1012
+ "own": {
1013
+ "fact": {
1014
+ "fact:propulsion": "propulsion:power",
1015
+ "fact:activity": "activity:nuc",
1016
+ "fact:position": "position:underway",
1017
+ "fact:making_way": false,
1018
+ "fact:length_m": 60
1019
+ }
1020
+ },
1021
+ "other": {
1022
+ "fact": {
1023
+ "fact:propulsion": "propulsion:power",
1024
+ "fact:activity": "activity:nuc",
1025
+ "fact:position": "position:underway",
1026
+ "fact:making_way": false,
1027
+ "fact:length_m": 60
1028
+ }
1029
+ },
1030
+ "pair": {
1031
+ "geo": {
1032
+ "geo:in_sight": true
1033
+ }
1034
+ }
1035
+ }
1036
+ },
1037
+ {
1038
+ "name": "18 matrix: own not under command, other restricted in her ability to manoeuvre, in sight",
1039
+ "status": "binding",
1040
+ "narrative": "Own is not under command: Rule 18 ranks her below nothing, so no paragraph of it applies to her and she carries no obligation here -- including against a vessel restricted in her ability to manoeuvre, which is the unordered pair at the top of the partial order.",
1041
+ "expect": [
1042
+ "11",
1043
+ "4"
1044
+ ],
1045
+ "situation": {
1046
+ "own": {
1047
+ "fact": {
1048
+ "fact:propulsion": "propulsion:power",
1049
+ "fact:activity": "activity:nuc",
1050
+ "fact:position": "position:underway",
1051
+ "fact:making_way": false,
1052
+ "fact:length_m": 60
1053
+ }
1054
+ },
1055
+ "other": {
1056
+ "fact": {
1057
+ "fact:propulsion": "propulsion:power",
1058
+ "fact:activity": "activity:ram",
1059
+ "fact:position": "position:underway",
1060
+ "fact:making_way": true,
1061
+ "fact:length_m": 80
1062
+ }
1063
+ },
1064
+ "pair": {
1065
+ "geo": {
1066
+ "geo:in_sight": true
1067
+ }
1068
+ }
1069
+ }
1070
+ },
1071
+ {
1072
+ "name": "18 matrix: own not under command, other constrained by her draught, in sight",
1073
+ "status": "binding",
1074
+ "narrative": "Own is not under command: Rule 18 ranks her below nothing, so no paragraph of it applies to her and she carries no obligation here -- including against a vessel restricted in her ability to manoeuvre, which is the unordered pair at the top of the partial order.",
1075
+ "expect": [
1076
+ "11",
1077
+ "4"
1078
+ ],
1079
+ "situation": {
1080
+ "own": {
1081
+ "fact": {
1082
+ "fact:propulsion": "propulsion:power",
1083
+ "fact:activity": "activity:nuc",
1084
+ "fact:position": "position:underway",
1085
+ "fact:making_way": false,
1086
+ "fact:length_m": 60
1087
+ }
1088
+ },
1089
+ "other": {
1090
+ "fact": {
1091
+ "fact:propulsion": "propulsion:power",
1092
+ "fact:activity": "activity:cbd",
1093
+ "fact:position": "position:underway",
1094
+ "fact:making_way": true,
1095
+ "fact:length_m": 220
1096
+ }
1097
+ },
1098
+ "pair": {
1099
+ "geo": {
1100
+ "geo:in_sight": true
1101
+ }
1102
+ }
1103
+ }
1104
+ },
1105
+ {
1106
+ "name": "18 matrix: own restricted in her ability to manoeuvre, other power-driven, in sight",
1107
+ "status": "binding",
1108
+ "narrative": "Own is restricted in her ability to manoeuvre: nothing in Rule 18 is addressed to her, including against a vessel not under command. NUC and RAM are unordered.",
1109
+ "expect": [
1110
+ "11",
1111
+ "4"
1112
+ ],
1113
+ "situation": {
1114
+ "own": {
1115
+ "fact": {
1116
+ "fact:propulsion": "propulsion:power",
1117
+ "fact:activity": "activity:ram",
1118
+ "fact:position": "position:underway",
1119
+ "fact:making_way": true,
1120
+ "fact:length_m": 80
1121
+ }
1122
+ },
1123
+ "other": {
1124
+ "fact": {
1125
+ "fact:propulsion": "propulsion:power",
1126
+ "fact:activity": "activity:none",
1127
+ "fact:position": "position:underway",
1128
+ "fact:making_way": true,
1129
+ "fact:length_m": 40
1130
+ }
1131
+ },
1132
+ "pair": {
1133
+ "geo": {
1134
+ "geo:in_sight": true
1135
+ }
1136
+ }
1137
+ }
1138
+ },
1139
+ {
1140
+ "name": "18 matrix: own restricted in her ability to manoeuvre, other sailing, in sight",
1141
+ "status": "binding",
1142
+ "narrative": "Own is restricted in her ability to manoeuvre: nothing in Rule 18 is addressed to her, including against a vessel not under command. NUC and RAM are unordered.",
1143
+ "expect": [
1144
+ "11",
1145
+ "4"
1146
+ ],
1147
+ "situation": {
1148
+ "own": {
1149
+ "fact": {
1150
+ "fact:propulsion": "propulsion:power",
1151
+ "fact:activity": "activity:ram",
1152
+ "fact:position": "position:underway",
1153
+ "fact:making_way": true,
1154
+ "fact:length_m": 80
1155
+ }
1156
+ },
1157
+ "other": {
1158
+ "fact": {
1159
+ "fact:propulsion": "propulsion:sail",
1160
+ "fact:activity": "activity:none",
1161
+ "fact:position": "position:underway",
1162
+ "fact:making_way": true,
1163
+ "fact:length_m": 12
1164
+ }
1165
+ },
1166
+ "pair": {
1167
+ "geo": {
1168
+ "geo:in_sight": true
1169
+ }
1170
+ }
1171
+ }
1172
+ },
1173
+ {
1174
+ "name": "18 matrix: own restricted in her ability to manoeuvre, other fishing (power), in sight",
1175
+ "status": "binding",
1176
+ "narrative": "Own is restricted in her ability to manoeuvre: nothing in Rule 18 is addressed to her, including against a vessel not under command. NUC and RAM are unordered.",
1177
+ "expect": [
1178
+ "11",
1179
+ "4"
1180
+ ],
1181
+ "situation": {
1182
+ "own": {
1183
+ "fact": {
1184
+ "fact:propulsion": "propulsion:power",
1185
+ "fact:activity": "activity:ram",
1186
+ "fact:position": "position:underway",
1187
+ "fact:making_way": true,
1188
+ "fact:length_m": 80
1189
+ }
1190
+ },
1191
+ "other": {
1192
+ "fact": {
1193
+ "fact:propulsion": "propulsion:power",
1194
+ "fact:activity": "activity:fishing",
1195
+ "fact:position": "position:underway",
1196
+ "fact:making_way": true,
1197
+ "fact:length_m": 18
1198
+ }
1199
+ },
1200
+ "pair": {
1201
+ "geo": {
1202
+ "geo:in_sight": true
1203
+ }
1204
+ }
1205
+ }
1206
+ },
1207
+ {
1208
+ "name": "18 matrix: own restricted in her ability to manoeuvre, other not under command, in sight",
1209
+ "status": "binding",
1210
+ "narrative": "Own is restricted in her ability to manoeuvre: nothing in Rule 18 is addressed to her, including against a vessel not under command. NUC and RAM are unordered.",
1211
+ "expect": [
1212
+ "11",
1213
+ "4"
1214
+ ],
1215
+ "situation": {
1216
+ "own": {
1217
+ "fact": {
1218
+ "fact:propulsion": "propulsion:power",
1219
+ "fact:activity": "activity:ram",
1220
+ "fact:position": "position:underway",
1221
+ "fact:making_way": true,
1222
+ "fact:length_m": 80
1223
+ }
1224
+ },
1225
+ "other": {
1226
+ "fact": {
1227
+ "fact:propulsion": "propulsion:power",
1228
+ "fact:activity": "activity:nuc",
1229
+ "fact:position": "position:underway",
1230
+ "fact:making_way": false,
1231
+ "fact:length_m": 60
1232
+ }
1233
+ },
1234
+ "pair": {
1235
+ "geo": {
1236
+ "geo:in_sight": true
1237
+ }
1238
+ }
1239
+ }
1240
+ },
1241
+ {
1242
+ "name": "18 matrix: own restricted in her ability to manoeuvre, other restricted in her ability to manoeuvre, in sight",
1243
+ "status": "binding",
1244
+ "narrative": "Own is restricted in her ability to manoeuvre: nothing in Rule 18 is addressed to her, including against a vessel not under command. NUC and RAM are unordered.",
1245
+ "expect": [
1246
+ "11",
1247
+ "4"
1248
+ ],
1249
+ "situation": {
1250
+ "own": {
1251
+ "fact": {
1252
+ "fact:propulsion": "propulsion:power",
1253
+ "fact:activity": "activity:ram",
1254
+ "fact:position": "position:underway",
1255
+ "fact:making_way": true,
1256
+ "fact:length_m": 80
1257
+ }
1258
+ },
1259
+ "other": {
1260
+ "fact": {
1261
+ "fact:propulsion": "propulsion:power",
1262
+ "fact:activity": "activity:ram",
1263
+ "fact:position": "position:underway",
1264
+ "fact:making_way": true,
1265
+ "fact:length_m": 80
1266
+ }
1267
+ },
1268
+ "pair": {
1269
+ "geo": {
1270
+ "geo:in_sight": true
1271
+ }
1272
+ }
1273
+ }
1274
+ },
1275
+ {
1276
+ "name": "18 matrix: own restricted in her ability to manoeuvre, other constrained by her draught, in sight",
1277
+ "status": "binding",
1278
+ "narrative": "Own is restricted in her ability to manoeuvre: nothing in Rule 18 is addressed to her, including against a vessel not under command. NUC and RAM are unordered.",
1279
+ "expect": [
1280
+ "11",
1281
+ "4"
1282
+ ],
1283
+ "situation": {
1284
+ "own": {
1285
+ "fact": {
1286
+ "fact:propulsion": "propulsion:power",
1287
+ "fact:activity": "activity:ram",
1288
+ "fact:position": "position:underway",
1289
+ "fact:making_way": true,
1290
+ "fact:length_m": 80
1291
+ }
1292
+ },
1293
+ "other": {
1294
+ "fact": {
1295
+ "fact:propulsion": "propulsion:power",
1296
+ "fact:activity": "activity:cbd",
1297
+ "fact:position": "position:underway",
1298
+ "fact:making_way": true,
1299
+ "fact:length_m": 220
1300
+ }
1301
+ },
1302
+ "pair": {
1303
+ "geo": {
1304
+ "geo:in_sight": true
1305
+ }
1306
+ }
1307
+ }
1308
+ },
1309
+ {
1310
+ "name": "18 matrix: own constrained by her draught, other power-driven, in sight",
1311
+ "status": "binding",
1312
+ "narrative": "Own is constrained by her draught; the other vessel is power-driven. Both underway and in sight of one another.",
1313
+ "expect": [
1314
+ "11",
1315
+ "4"
1316
+ ],
1317
+ "situation": {
1318
+ "own": {
1319
+ "fact": {
1320
+ "fact:propulsion": "propulsion:power",
1321
+ "fact:activity": "activity:cbd",
1322
+ "fact:position": "position:underway",
1323
+ "fact:making_way": true,
1324
+ "fact:length_m": 220
1325
+ }
1326
+ },
1327
+ "other": {
1328
+ "fact": {
1329
+ "fact:propulsion": "propulsion:power",
1330
+ "fact:activity": "activity:none",
1331
+ "fact:position": "position:underway",
1332
+ "fact:making_way": true,
1333
+ "fact:length_m": 40
1334
+ }
1335
+ },
1336
+ "pair": {
1337
+ "geo": {
1338
+ "geo:in_sight": true
1339
+ }
1340
+ }
1341
+ }
1342
+ },
1343
+ {
1344
+ "name": "18 matrix: own constrained by her draught, other sailing, in sight",
1345
+ "status": "binding",
1346
+ "narrative": "Own is constrained by her draught; the other vessel is sailing. Both underway and in sight of one another.",
1347
+ "expect": [
1348
+ "11",
1349
+ "18a4",
1350
+ "4"
1351
+ ],
1352
+ "situation": {
1353
+ "own": {
1354
+ "fact": {
1355
+ "fact:propulsion": "propulsion:power",
1356
+ "fact:activity": "activity:cbd",
1357
+ "fact:position": "position:underway",
1358
+ "fact:making_way": true,
1359
+ "fact:length_m": 220
1360
+ }
1361
+ },
1362
+ "other": {
1363
+ "fact": {
1364
+ "fact:propulsion": "propulsion:sail",
1365
+ "fact:activity": "activity:none",
1366
+ "fact:position": "position:underway",
1367
+ "fact:making_way": true,
1368
+ "fact:length_m": 12
1369
+ }
1370
+ },
1371
+ "pair": {
1372
+ "geo": {
1373
+ "geo:in_sight": true
1374
+ }
1375
+ }
1376
+ }
1377
+ },
1378
+ {
1379
+ "name": "18 matrix: own constrained by her draught, other fishing (power), in sight",
1380
+ "status": "binding",
1381
+ "narrative": "Own is constrained by her draught; the other vessel is fishing (power). Both underway and in sight of one another.",
1382
+ "expect": [
1383
+ "11",
1384
+ "18a3",
1385
+ "4"
1386
+ ],
1387
+ "situation": {
1388
+ "own": {
1389
+ "fact": {
1390
+ "fact:propulsion": "propulsion:power",
1391
+ "fact:activity": "activity:cbd",
1392
+ "fact:position": "position:underway",
1393
+ "fact:making_way": true,
1394
+ "fact:length_m": 220
1395
+ }
1396
+ },
1397
+ "other": {
1398
+ "fact": {
1399
+ "fact:propulsion": "propulsion:power",
1400
+ "fact:activity": "activity:fishing",
1401
+ "fact:position": "position:underway",
1402
+ "fact:making_way": true,
1403
+ "fact:length_m": 18
1404
+ }
1405
+ },
1406
+ "pair": {
1407
+ "geo": {
1408
+ "geo:in_sight": true
1409
+ }
1410
+ }
1411
+ }
1412
+ },
1413
+ {
1414
+ "name": "18 matrix: own constrained by her draught, other not under command, in sight",
1415
+ "status": "binding",
1416
+ "narrative": "Own is constrained by her draught; the other vessel is not under command. Both underway and in sight of one another.",
1417
+ "expect": [
1418
+ "11",
1419
+ "18a1",
1420
+ "4"
1421
+ ],
1422
+ "situation": {
1423
+ "own": {
1424
+ "fact": {
1425
+ "fact:propulsion": "propulsion:power",
1426
+ "fact:activity": "activity:cbd",
1427
+ "fact:position": "position:underway",
1428
+ "fact:making_way": true,
1429
+ "fact:length_m": 220
1430
+ }
1431
+ },
1432
+ "other": {
1433
+ "fact": {
1434
+ "fact:propulsion": "propulsion:power",
1435
+ "fact:activity": "activity:nuc",
1436
+ "fact:position": "position:underway",
1437
+ "fact:making_way": false,
1438
+ "fact:length_m": 60
1439
+ }
1440
+ },
1441
+ "pair": {
1442
+ "geo": {
1443
+ "geo:in_sight": true
1444
+ }
1445
+ }
1446
+ }
1447
+ },
1448
+ {
1449
+ "name": "18 matrix: own constrained by her draught, other restricted in her ability to manoeuvre, in sight",
1450
+ "status": "binding",
1451
+ "narrative": "Own is constrained by her draught; the other vessel is restricted in her ability to manoeuvre. Both underway and in sight of one another.",
1452
+ "expect": [
1453
+ "11",
1454
+ "18a2",
1455
+ "4"
1456
+ ],
1457
+ "situation": {
1458
+ "own": {
1459
+ "fact": {
1460
+ "fact:propulsion": "propulsion:power",
1461
+ "fact:activity": "activity:cbd",
1462
+ "fact:position": "position:underway",
1463
+ "fact:making_way": true,
1464
+ "fact:length_m": 220
1465
+ }
1466
+ },
1467
+ "other": {
1468
+ "fact": {
1469
+ "fact:propulsion": "propulsion:power",
1470
+ "fact:activity": "activity:ram",
1471
+ "fact:position": "position:underway",
1472
+ "fact:making_way": true,
1473
+ "fact:length_m": 80
1474
+ }
1475
+ },
1476
+ "pair": {
1477
+ "geo": {
1478
+ "geo:in_sight": true
1479
+ }
1480
+ }
1481
+ }
1482
+ },
1483
+ {
1484
+ "name": "18 matrix: own constrained by her draught, other constrained by her draught, in sight",
1485
+ "status": "binding",
1486
+ "narrative": "Own is constrained by her draught; the other vessel is constrained by her draught. Both underway and in sight of one another.",
1487
+ "expect": [
1488
+ "11",
1489
+ {
1490
+ "entry": "18d1",
1491
+ "modality": "shall-if-practicable"
1492
+ },
1493
+ "4"
1494
+ ],
1495
+ "situation": {
1496
+ "own": {
1497
+ "fact": {
1498
+ "fact:propulsion": "propulsion:power",
1499
+ "fact:activity": "activity:cbd",
1500
+ "fact:position": "position:underway",
1501
+ "fact:making_way": true,
1502
+ "fact:length_m": 220
1503
+ }
1504
+ },
1505
+ "other": {
1506
+ "fact": {
1507
+ "fact:propulsion": "propulsion:power",
1508
+ "fact:activity": "activity:cbd",
1509
+ "fact:position": "position:underway",
1510
+ "fact:making_way": true,
1511
+ "fact:length_m": 220
1512
+ }
1513
+ },
1514
+ "pair": {
1515
+ "geo": {
1516
+ "geo:in_sight": true
1517
+ }
1518
+ }
1519
+ }
1520
+ },
1521
+ {
1522
+ "name": "18 matrix: own fishing under sail, other not under command, in sight",
1523
+ "status": "binding",
1524
+ "narrative": "18(c) does not distinguish propulsion: a fishing vessel under sail is ranked by 18(c)(i), not by 18(b)(i), and both would otherwise match. This is the case that makes own's activity list, not her propulsion, the discriminator.",
1525
+ "expect": [
1526
+ "11",
1527
+ {
1528
+ "entry": "18c1",
1529
+ "modality": "shall-if-practicable"
1530
+ },
1531
+ "4"
1532
+ ],
1533
+ "situation": {
1534
+ "own": {
1535
+ "fact": {
1536
+ "fact:propulsion": "propulsion:sail",
1537
+ "fact:activity": "activity:fishing",
1538
+ "fact:position": "position:underway",
1539
+ "fact:making_way": true,
1540
+ "fact:length_m": 16
1541
+ }
1542
+ },
1543
+ "other": {
1544
+ "fact": {
1545
+ "fact:propulsion": "propulsion:power",
1546
+ "fact:activity": "activity:nuc",
1547
+ "fact:position": "position:underway",
1548
+ "fact:making_way": false,
1549
+ "fact:length_m": 60
1550
+ }
1551
+ },
1552
+ "pair": {
1553
+ "geo": {
1554
+ "geo:in_sight": true
1555
+ }
1556
+ }
1557
+ }
1558
+ },
1559
+ {
1560
+ "name": "18 matrix: own fishing under sail, other power-driven, in sight",
1561
+ "status": "binding",
1562
+ "narrative": "A fishing vessel under sail against an ordinary power-driven vessel: 18(a)(iii) gives the duty to the other vessel, so own carries none. The mirror of this case is the power-driven row.",
1563
+ "expect": [
1564
+ "11",
1565
+ "4"
1566
+ ],
1567
+ "situation": {
1568
+ "own": {
1569
+ "fact": {
1570
+ "fact:propulsion": "propulsion:sail",
1571
+ "fact:activity": "activity:fishing",
1572
+ "fact:position": "position:underway",
1573
+ "fact:making_way": true,
1574
+ "fact:length_m": 16
1575
+ }
1576
+ },
1577
+ "other": {
1578
+ "fact": {
1579
+ "fact:propulsion": "propulsion:power",
1580
+ "fact:activity": "activity:none",
1581
+ "fact:position": "position:underway",
1582
+ "fact:making_way": true,
1583
+ "fact:length_m": 40
1584
+ }
1585
+ },
1586
+ "pair": {
1587
+ "geo": {
1588
+ "geo:in_sight": true
1589
+ }
1590
+ }
1591
+ }
1592
+ },
1593
+ {
1594
+ "name": "scope: own power-driven, other not under command, NOT in sight",
1595
+ "status": "binding",
1596
+ "narrative": "The same facts as the in-sight matrix cell, with `pair:geo:in_sight` false. Section II falls away entirely -- 18(a)(i) does not apply -- and Rule 19 takes its place. This is the scope gate, asserted rather than described.",
1597
+ "expect": [
1598
+ "19a",
1599
+ "4"
1600
+ ],
1601
+ "situation": {
1602
+ "own": {
1603
+ "fact": {
1604
+ "fact:propulsion": "propulsion:power",
1605
+ "fact:activity": "activity:none",
1606
+ "fact:position": "position:underway",
1607
+ "fact:making_way": true,
1608
+ "fact:length_m": 40
1609
+ }
1610
+ },
1611
+ "other": {
1612
+ "fact": {
1613
+ "fact:propulsion": "propulsion:power",
1614
+ "fact:activity": "activity:nuc",
1615
+ "fact:position": "position:underway",
1616
+ "fact:making_way": false,
1617
+ "fact:length_m": 60
1618
+ }
1619
+ },
1620
+ "pair": {
1621
+ "geo": {
1622
+ "geo:in_sight": false
1623
+ }
1624
+ }
1625
+ }
1626
+ },
1627
+ {
1628
+ "name": "scope: own power-driven, other sailing, NOT in sight",
1629
+ "status": "binding",
1630
+ "narrative": "Section II is gated off; a sailing vessel gets no Rule 18 privilege from a vessel that cannot see her.",
1631
+ "expect": [
1632
+ "19a",
1633
+ "4"
1634
+ ],
1635
+ "situation": {
1636
+ "own": {
1637
+ "fact": {
1638
+ "fact:propulsion": "propulsion:power",
1639
+ "fact:activity": "activity:none",
1640
+ "fact:position": "position:underway",
1641
+ "fact:making_way": true,
1642
+ "fact:length_m": 40
1643
+ }
1644
+ },
1645
+ "other": {
1646
+ "fact": {
1647
+ "fact:propulsion": "propulsion:sail",
1648
+ "fact:activity": "activity:none",
1649
+ "fact:position": "position:underway",
1650
+ "fact:making_way": true,
1651
+ "fact:length_m": 12
1652
+ }
1653
+ },
1654
+ "pair": {
1655
+ "geo": {
1656
+ "geo:in_sight": false
1657
+ }
1658
+ }
1659
+ }
1660
+ },
1661
+ {
1662
+ "name": "scope: own fishing, other restricted in her ability to manoeuvre, NOT in sight",
1663
+ "status": "binding",
1664
+ "narrative": "18(c)(ii) is Section II and falls away with it.",
1665
+ "expect": [
1666
+ "19a",
1667
+ "4"
1668
+ ],
1669
+ "situation": {
1670
+ "own": {
1671
+ "fact": {
1672
+ "fact:propulsion": "propulsion:power",
1673
+ "fact:activity": "activity:fishing",
1674
+ "fact:position": "position:underway",
1675
+ "fact:making_way": true,
1676
+ "fact:length_m": 18
1677
+ }
1678
+ },
1679
+ "other": {
1680
+ "fact": {
1681
+ "fact:propulsion": "propulsion:power",
1682
+ "fact:activity": "activity:ram",
1683
+ "fact:position": "position:underway",
1684
+ "fact:making_way": true,
1685
+ "fact:length_m": 80
1686
+ }
1687
+ },
1688
+ "pair": {
1689
+ "geo": {
1690
+ "geo:in_sight": false
1691
+ }
1692
+ }
1693
+ }
1694
+ },
1695
+ {
1696
+ "name": "8(f)(iii): risk of collision exists, and Rules 4-10 apply in any visibility",
1697
+ "status": "binding",
1698
+ "narrative": "Not in sight, so Section II is gone, but Rule 4 keeps Rules 4-10 alive and 8(f)(iii) is one of them. It confers no role on either subject, which is its whole content.",
1699
+ "expect": [
1700
+ "19a",
1701
+ "4",
1702
+ "8f3"
1703
+ ],
1704
+ "situation": {
1705
+ "own": {
1706
+ "fact": {
1707
+ "fact:propulsion": "propulsion:power",
1708
+ "fact:activity": "activity:none",
1709
+ "fact:position": "position:underway",
1710
+ "fact:making_way": true,
1711
+ "fact:length_m": 40
1712
+ }
1713
+ },
1714
+ "other": {
1715
+ "fact": {
1716
+ "fact:propulsion": "propulsion:power",
1717
+ "fact:activity": "activity:cbd",
1718
+ "fact:position": "position:underway",
1719
+ "fact:making_way": true,
1720
+ "fact:length_m": 220
1721
+ }
1722
+ },
1723
+ "pair": {
1724
+ "geo": {
1725
+ "geo:in_sight": false,
1726
+ "geo:risk_of_collision": true
1727
+ }
1728
+ }
1729
+ }
1730
+ },
1731
+ {
1732
+ "name": "13(a) overrides 18(a)(iv): own sailing and overtaking a power-driven vessel",
1733
+ "status": "binding",
1734
+ "narrative": "Own is a sailing vessel that came up on a power-driven vessel from abaft her beam, so `own:hist:was_overtaking` is latched. Read from own's side 13(a) makes her give-way. Read from the other vessel's side -- the swapped situation -- 18(a)(iv) would make the power-driven vessel give-way to a sailing vessel, and 13(a)'s rel:overrides is what resolves the pair. The conflict is only visible across the swap, because a two-subject entry is evaluated from own's side alone.",
1735
+ "expect": [
1736
+ "11",
1737
+ "13a",
1738
+ "4",
1739
+ "13d"
1740
+ ],
1741
+ "situation": {
1742
+ "own": {
1743
+ "fact": {
1744
+ "fact:propulsion": "propulsion:sail",
1745
+ "fact:activity": "activity:none",
1746
+ "fact:position": "position:underway",
1747
+ "fact:making_way": true,
1748
+ "fact:length_m": 12
1749
+ },
1750
+ "hist": {
1751
+ "hist:was_overtaking": true,
1752
+ "hist:latched_at_s": 300
1753
+ }
1754
+ },
1755
+ "other": {
1756
+ "fact": {
1757
+ "fact:propulsion": "propulsion:power",
1758
+ "fact:activity": "activity:none",
1759
+ "fact:position": "position:underway",
1760
+ "fact:making_way": true,
1761
+ "fact:length_m": 40
1762
+ }
1763
+ },
1764
+ "pair": {
1765
+ "geo": {
1766
+ "geo:in_sight": true
1767
+ }
1768
+ }
1769
+ }
1770
+ },
1771
+ {
1772
+ "name": "18(f)(i): a WIG craft near the surface keeps clear of a power-driven vessel",
1773
+ "status": "binding",
1774
+ "narrative": "A WIG craft near the surface satisfies 18(a)'s predicate too -- she is a power-driven vessel underway -- and against an ordinary power-driven vessel no 18(a) entry fires, so 18(f)(i) stands alone.",
1775
+ "expect": [
1776
+ "11",
1777
+ "18f1",
1778
+ "4"
1779
+ ],
1780
+ "situation": {
1781
+ "own": {
1782
+ "fact": {
1783
+ "fact:propulsion": "propulsion:power",
1784
+ "fact:activity": "activity:none",
1785
+ "fact:position": "position:underway",
1786
+ "fact:making_way": true,
1787
+ "fact:length_m": 30,
1788
+ "fact:wig": true,
1789
+ "fact:wig_near_surface": true
1790
+ }
1791
+ },
1792
+ "other": {
1793
+ "fact": {
1794
+ "fact:propulsion": "propulsion:power",
1795
+ "fact:activity": "activity:none",
1796
+ "fact:position": "position:underway",
1797
+ "fact:making_way": true,
1798
+ "fact:length_m": 40
1799
+ }
1800
+ },
1801
+ "pair": {
1802
+ "geo": {
1803
+ "geo:in_sight": true
1804
+ }
1805
+ }
1806
+ }
1807
+ },
1808
+ {
1809
+ "name": "18(f)(i) overrides 18(a)(iv): a WIG craft near the surface and a sailing vessel",
1810
+ "status": "binding",
1811
+ "narrative": "Here both fire from own's side: 18(a)(iv) would make her give-way, 18(f)(i) makes her keep clear of all vessels. 18f1's rel:overrides against 18a4 is what stops that being two different roles for one subject in one situation.",
1812
+ "expect": [
1813
+ "11",
1814
+ "18a4",
1815
+ "18f1",
1816
+ "4"
1817
+ ],
1818
+ "situation": {
1819
+ "own": {
1820
+ "fact": {
1821
+ "fact:propulsion": "propulsion:power",
1822
+ "fact:activity": "activity:none",
1823
+ "fact:position": "position:underway",
1824
+ "fact:making_way": true,
1825
+ "fact:length_m": 30,
1826
+ "fact:wig": true,
1827
+ "fact:wig_near_surface": true
1828
+ }
1829
+ },
1830
+ "other": {
1831
+ "fact": {
1832
+ "fact:propulsion": "propulsion:sail",
1833
+ "fact:activity": "activity:none",
1834
+ "fact:position": "position:underway",
1835
+ "fact:making_way": true,
1836
+ "fact:length_m": 12
1837
+ }
1838
+ },
1839
+ "pair": {
1840
+ "geo": {
1841
+ "geo:in_sight": true
1842
+ }
1843
+ }
1844
+ }
1845
+ },
1846
+ {
1847
+ "name": "9(b) overrides 18(a)(iv): a sailing vessel in a narrow channel",
1848
+ "status": "binding",
1849
+ "narrative": "Outside a channel a power-driven vessel keeps out of the way of a sailing vessel. Inside one 9(b) reverses it: the sailing vessel shall not impede. Both halves of 9(b)'s disjunctive subject fire here because the vessel is also under 20 m.",
1850
+ "expect": [
1851
+ "11",
1852
+ "4",
1853
+ {
1854
+ "entry": "9b",
1855
+ "modality": "shall-not-impede"
1856
+ }
1857
+ ],
1858
+ "situation": {
1859
+ "own": {
1860
+ "fact": {
1861
+ "fact:propulsion": "propulsion:sail",
1862
+ "fact:activity": "activity:none",
1863
+ "fact:position": "position:underway",
1864
+ "fact:making_way": true,
1865
+ "fact:length_m": 12
1866
+ }
1867
+ },
1868
+ "other": {
1869
+ "fact": {
1870
+ "fact:propulsion": "propulsion:power",
1871
+ "fact:activity": "activity:none",
1872
+ "fact:position": "position:underway",
1873
+ "fact:making_way": true,
1874
+ "fact:length_m": 40,
1875
+ "fact:confined_to_channel": true
1876
+ }
1877
+ },
1878
+ "pair": {
1879
+ "geo": {
1880
+ "geo:in_sight": true
1881
+ },
1882
+ "env": {
1883
+ "env:narrow_channel": true,
1884
+ "env:traffic_lane": false
1885
+ }
1886
+ }
1887
+ }
1888
+ },
1889
+ {
1890
+ "name": "9(c) overrides 18(a)(iii): a fishing vessel in a narrow channel",
1891
+ "status": "binding",
1892
+ "narrative": "18(a)(iii) would make the power-driven vessel keep out of the way; 9(c) makes the fishing vessel not impede her. Read from the fishing vessel's side.",
1893
+ "expect": [
1894
+ "11",
1895
+ "4",
1896
+ {
1897
+ "entry": "9b",
1898
+ "modality": "shall-not-impede"
1899
+ },
1900
+ {
1901
+ "entry": "9c",
1902
+ "modality": "shall-not-impede"
1903
+ }
1904
+ ],
1905
+ "situation": {
1906
+ "own": {
1907
+ "fact": {
1908
+ "fact:propulsion": "propulsion:power",
1909
+ "fact:activity": "activity:fishing",
1910
+ "fact:position": "position:underway",
1911
+ "fact:making_way": true,
1912
+ "fact:length_m": 18
1913
+ }
1914
+ },
1915
+ "other": {
1916
+ "fact": {
1917
+ "fact:propulsion": "propulsion:power",
1918
+ "fact:activity": "activity:none",
1919
+ "fact:position": "position:underway",
1920
+ "fact:making_way": true,
1921
+ "fact:length_m": 40,
1922
+ "fact:confined_to_channel": true
1923
+ }
1924
+ },
1925
+ "pair": {
1926
+ "geo": {
1927
+ "geo:in_sight": true
1928
+ },
1929
+ "env": {
1930
+ "env:narrow_channel": true,
1931
+ "env:traffic_lane": false
1932
+ }
1933
+ }
1934
+ }
1935
+ },
1936
+ {
1937
+ "name": "10(i) overrides 18(a)(iii): a fishing vessel in a traffic separation scheme",
1938
+ "status": "binding",
1939
+ "narrative": "The traffic-lane twin of 9(c). `pair:env:traffic_lane` is the only fact that separates them.",
1940
+ "expect": [
1941
+ {
1942
+ "entry": "10i",
1943
+ "modality": "shall-not-impede"
1944
+ },
1945
+ {
1946
+ "entry": "10j",
1947
+ "modality": "shall-not-impede"
1948
+ },
1949
+ "11",
1950
+ "4"
1951
+ ],
1952
+ "situation": {
1953
+ "own": {
1954
+ "fact": {
1955
+ "fact:propulsion": "propulsion:power",
1956
+ "fact:activity": "activity:fishing",
1957
+ "fact:position": "position:underway",
1958
+ "fact:making_way": true,
1959
+ "fact:length_m": 18
1960
+ }
1961
+ },
1962
+ "other": {
1963
+ "fact": {
1964
+ "fact:propulsion": "propulsion:power",
1965
+ "fact:activity": "activity:none",
1966
+ "fact:position": "position:underway",
1967
+ "fact:making_way": true,
1968
+ "fact:length_m": 40,
1969
+ "fact:following_traffic_lane": true
1970
+ }
1971
+ },
1972
+ "pair": {
1973
+ "geo": {
1974
+ "geo:in_sight": true
1975
+ },
1976
+ "env": {
1977
+ "env:narrow_channel": false,
1978
+ "env:traffic_lane": true
1979
+ }
1980
+ }
1981
+ }
1982
+ },
1983
+ {
1984
+ "name": "10(j) overrides 18(a)(iv): a sailing vessel under 20 m in a traffic separation scheme",
1985
+ "status": "binding",
1986
+ "narrative": "10(j)'s object is narrower than 9(b)'s -- a power-driven vessel following a traffic lane -- so `other:fact:propulsion` is read. Both halves of the disjunctive subject fire.",
1987
+ "expect": [
1988
+ {
1989
+ "entry": "10j",
1990
+ "modality": "shall-not-impede"
1991
+ },
1992
+ "11",
1993
+ "4"
1994
+ ],
1995
+ "situation": {
1996
+ "own": {
1997
+ "fact": {
1998
+ "fact:propulsion": "propulsion:sail",
1999
+ "fact:activity": "activity:none",
2000
+ "fact:position": "position:underway",
2001
+ "fact:making_way": true,
2002
+ "fact:length_m": 12
2003
+ }
2004
+ },
2005
+ "other": {
2006
+ "fact": {
2007
+ "fact:propulsion": "propulsion:power",
2008
+ "fact:activity": "activity:none",
2009
+ "fact:position": "position:underway",
2010
+ "fact:making_way": true,
2011
+ "fact:length_m": 40,
2012
+ "fact:following_traffic_lane": true
2013
+ }
2014
+ },
2015
+ "pair": {
2016
+ "geo": {
2017
+ "geo:in_sight": true
2018
+ },
2019
+ "env": {
2020
+ "env:narrow_channel": false,
2021
+ "env:traffic_lane": true
2022
+ }
2023
+ }
2024
+ }
2025
+ },
2026
+ {
2027
+ "name": "9(b) length boundary: 19.9 m power-driven vessel in a narrow channel",
2028
+ "status": "binding",
2029
+ "narrative": "REQ-VERIFY-5: the `own:fact:length_m: {lt: 20}` disjunct of 9b's `any_of` subject, isolated from the `propulsion:sail` disjunct and from 18a4 by keeping both vessels power-driven -- no other predicate fires, so only the length gate decides.",
2030
+ "expect": [
2031
+ "11",
2032
+ "4",
2033
+ {
2034
+ "entry": "9b",
2035
+ "modality": "shall-not-impede"
2036
+ }
2037
+ ],
2038
+ "situation": {
2039
+ "own": {
2040
+ "fact": {
2041
+ "fact:propulsion": "propulsion:power",
2042
+ "fact:activity": "activity:none",
2043
+ "fact:position": "position:underway",
2044
+ "fact:making_way": true,
2045
+ "fact:length_m": 19.9
2046
+ }
2047
+ },
2048
+ "other": {
2049
+ "fact": {
2050
+ "fact:propulsion": "propulsion:power",
2051
+ "fact:activity": "activity:none",
2052
+ "fact:position": "position:underway",
2053
+ "fact:making_way": true,
2054
+ "fact:length_m": 40,
2055
+ "fact:confined_to_channel": true
2056
+ }
2057
+ },
2058
+ "pair": {
2059
+ "geo": {
2060
+ "geo:in_sight": true
2061
+ },
2062
+ "env": {
2063
+ "env:narrow_channel": true,
2064
+ "env:traffic_lane": false
2065
+ }
2066
+ }
2067
+ }
2068
+ },
2069
+ {
2070
+ "name": "9(b) length boundary: 20.0 m power-driven vessel in a narrow channel",
2071
+ "status": "binding",
2072
+ "narrative": "The other side of the same gate: at exactly 20 m, neither disjunct of 9b's subject holds, so 9b no longer applies and nothing else in this situation does either. `other:fact:confined_to_channel` stays true so length alone crosses the threshold.",
2073
+ "expect": [
2074
+ "11",
2075
+ "4"
2076
+ ],
2077
+ "situation": {
2078
+ "own": {
2079
+ "fact": {
2080
+ "fact:propulsion": "propulsion:power",
2081
+ "fact:activity": "activity:none",
2082
+ "fact:position": "position:underway",
2083
+ "fact:making_way": true,
2084
+ "fact:length_m": 20
2085
+ }
2086
+ },
2087
+ "other": {
2088
+ "fact": {
2089
+ "fact:propulsion": "propulsion:power",
2090
+ "fact:activity": "activity:none",
2091
+ "fact:position": "position:underway",
2092
+ "fact:making_way": true,
2093
+ "fact:length_m": 40,
2094
+ "fact:confined_to_channel": true
2095
+ }
2096
+ },
2097
+ "pair": {
2098
+ "geo": {
2099
+ "geo:in_sight": true
2100
+ },
2101
+ "env": {
2102
+ "env:narrow_channel": true,
2103
+ "env:traffic_lane": false
2104
+ }
2105
+ }
2106
+ }
2107
+ },
2108
+ {
2109
+ "name": "10(j) length boundary: 19.9 m power-driven vessel in a traffic separation scheme",
2110
+ "status": "binding",
2111
+ "narrative": "REQ-VERIFY-5: the twin gate, on 10j's `any_of` subject. Both vessels power-driven, other following the lane, so only the length disjunct decides.",
2112
+ "expect": [
2113
+ "11",
2114
+ "4",
2115
+ {
2116
+ "entry": "10j",
2117
+ "modality": "shall-not-impede"
2118
+ }
2119
+ ],
2120
+ "situation": {
2121
+ "own": {
2122
+ "fact": {
2123
+ "fact:propulsion": "propulsion:power",
2124
+ "fact:activity": "activity:none",
2125
+ "fact:position": "position:underway",
2126
+ "fact:making_way": true,
2127
+ "fact:length_m": 19.9
2128
+ }
2129
+ },
2130
+ "other": {
2131
+ "fact": {
2132
+ "fact:propulsion": "propulsion:power",
2133
+ "fact:activity": "activity:none",
2134
+ "fact:position": "position:underway",
2135
+ "fact:making_way": true,
2136
+ "fact:length_m": 40,
2137
+ "fact:following_traffic_lane": true
2138
+ }
2139
+ },
2140
+ "pair": {
2141
+ "geo": {
2142
+ "geo:in_sight": true
2143
+ },
2144
+ "env": {
2145
+ "env:narrow_channel": false,
2146
+ "env:traffic_lane": true
2147
+ }
2148
+ }
2149
+ }
2150
+ },
2151
+ {
2152
+ "name": "10(j) length boundary: 20.0 m power-driven vessel in a traffic separation scheme",
2153
+ "status": "binding",
2154
+ "narrative": "The other side of the same gate: at exactly 20 m, neither disjunct holds and 10j no longer applies. `other:fact:following_traffic_lane` stays true so length alone crosses the threshold.",
2155
+ "expect": [
2156
+ "11",
2157
+ "4"
2158
+ ],
2159
+ "situation": {
2160
+ "own": {
2161
+ "fact": {
2162
+ "fact:propulsion": "propulsion:power",
2163
+ "fact:activity": "activity:none",
2164
+ "fact:position": "position:underway",
2165
+ "fact:making_way": true,
2166
+ "fact:length_m": 20
2167
+ }
2168
+ },
2169
+ "other": {
2170
+ "fact": {
2171
+ "fact:propulsion": "propulsion:power",
2172
+ "fact:activity": "activity:none",
2173
+ "fact:position": "position:underway",
2174
+ "fact:making_way": true,
2175
+ "fact:length_m": 40,
2176
+ "fact:following_traffic_lane": true
2177
+ }
2178
+ },
2179
+ "pair": {
2180
+ "geo": {
2181
+ "geo:in_sight": true
2182
+ },
2183
+ "env": {
2184
+ "env:narrow_channel": false,
2185
+ "env:traffic_lane": true
2186
+ }
2187
+ }
2188
+ }
2189
+ },
2190
+ {
2191
+ "name": "10(j) does not apply: a sailing vessel and another sailing vessel in a scheme",
2192
+ "status": "binding",
2193
+ "narrative": "The negative case for 10(j)'s `other:fact:propulsion` gate: the other vessel is not power-driven, so 10(j) does not fire and Rule 18 says nothing between two sailing vessels either. Rule 12 would, and is not modelled.",
2194
+ "expect": [
2195
+ "11",
2196
+ "4"
2197
+ ],
2198
+ "situation": {
2199
+ "own": {
2200
+ "fact": {
2201
+ "fact:propulsion": "propulsion:sail",
2202
+ "fact:activity": "activity:none",
2203
+ "fact:position": "position:underway",
2204
+ "fact:making_way": true,
2205
+ "fact:length_m": 12
2206
+ }
2207
+ },
2208
+ "other": {
2209
+ "fact": {
2210
+ "fact:propulsion": "propulsion:sail",
2211
+ "fact:activity": "activity:none",
2212
+ "fact:position": "position:underway",
2213
+ "fact:making_way": true,
2214
+ "fact:length_m": 14
2215
+ }
2216
+ },
2217
+ "pair": {
2218
+ "geo": {
2219
+ "geo:in_sight": true
2220
+ },
2221
+ "env": {
2222
+ "env:narrow_channel": false,
2223
+ "env:traffic_lane": true
2224
+ }
2225
+ }
2226
+ }
2227
+ },
2228
+ {
2229
+ "name": "9(b) does not apply: the other vessel is not confined to the channel (Q-34)",
2230
+ "status": "binding",
2231
+ "narrative": "REQ-VERIFY-5's twin for a boolean gate rather than a threshold: same subjects and channel as the first 9(b) fixture, but the other vessel is not the paragraph's protected vessel, so `other:fact:confined_to_channel` alone decides and 9(b) does not fire.",
2232
+ "expect": [
2233
+ "11",
2234
+ "4"
2235
+ ],
2236
+ "situation": {
2237
+ "own": {
2238
+ "fact": {
2239
+ "fact:propulsion": "propulsion:sail",
2240
+ "fact:activity": "activity:none",
2241
+ "fact:position": "position:underway",
2242
+ "fact:making_way": true,
2243
+ "fact:length_m": 12
2244
+ }
2245
+ },
2246
+ "other": {
2247
+ "fact": {
2248
+ "fact:propulsion": "propulsion:power",
2249
+ "fact:activity": "activity:none",
2250
+ "fact:position": "position:underway",
2251
+ "fact:making_way": true,
2252
+ "fact:length_m": 40,
2253
+ "fact:confined_to_channel": false
2254
+ }
2255
+ },
2256
+ "pair": {
2257
+ "geo": {
2258
+ "geo:in_sight": true
2259
+ },
2260
+ "env": {
2261
+ "env:narrow_channel": true,
2262
+ "env:traffic_lane": false
2263
+ }
2264
+ }
2265
+ }
2266
+ },
2267
+ {
2268
+ "name": "10(j) does not apply: the other vessel is not following the lane (Q-34)",
2269
+ "status": "binding",
2270
+ "narrative": "The traffic-lane twin of the 9(b) case above: same subjects and scheme as the 10(j) fixture, but the other vessel is not following it, so `other:fact:following_traffic_lane` alone decides.",
2271
+ "expect": [
2272
+ "11",
2273
+ "4"
2274
+ ],
2275
+ "situation": {
2276
+ "own": {
2277
+ "fact": {
2278
+ "fact:propulsion": "propulsion:sail",
2279
+ "fact:activity": "activity:none",
2280
+ "fact:position": "position:underway",
2281
+ "fact:making_way": true,
2282
+ "fact:length_m": 12
2283
+ }
2284
+ },
2285
+ "other": {
2286
+ "fact": {
2287
+ "fact:propulsion": "propulsion:power",
2288
+ "fact:activity": "activity:none",
2289
+ "fact:position": "position:underway",
2290
+ "fact:making_way": true,
2291
+ "fact:length_m": 40,
2292
+ "fact:following_traffic_lane": false
2293
+ }
2294
+ },
2295
+ "pair": {
2296
+ "geo": {
2297
+ "geo:in_sight": true
2298
+ },
2299
+ "env": {
2300
+ "env:narrow_channel": false,
2301
+ "env:traffic_lane": true
2302
+ }
2303
+ }
2304
+ }
2305
+ },
2306
+ {
2307
+ "name": "27(c): other is towing in a way that severely restricts the pair, in sight",
2308
+ "status": "binding",
2309
+ "situation": {
2310
+ "own": {
2311
+ "fact": {
2312
+ "fact:propulsion": "propulsion:power",
2313
+ "fact:activity": "activity:none",
2314
+ "fact:position": "position:underway",
2315
+ "fact:making_way": true,
2316
+ "fact:length_m": 40
2317
+ }
2318
+ },
2319
+ "other": {
2320
+ "fact": {
2321
+ "fact:propulsion": "propulsion:power",
2322
+ "fact:activity": "activity:towing",
2323
+ "fact:position": "position:underway",
2324
+ "fact:making_way": true,
2325
+ "fact:length_m": 60,
2326
+ "fact:tow_length_m": 300,
2327
+ "fact:tow_restricts_deviation": true
2328
+ }
2329
+ },
2330
+ "pair": {
2331
+ "geo": {
2332
+ "geo:in_sight": true
2333
+ }
2334
+ }
2335
+ },
2336
+ "expect": [
2337
+ "11",
2338
+ "18a2",
2339
+ "4"
2340
+ ],
2341
+ "narrative": "The case Q-32 recorded as uncaught: a towing operation that severely restricts the towing vessel and her tow is restricted in her ability to manoeuvre by 27(c), so 18(a)(ii) applies -- but her `fact:activity` is `activity:towing` and no enumeration of the display axis reached her. `fact:rule18_class` decodes her to `rule18_class:ram` and the entry finds her."
2342
+ },
2343
+ {
2344
+ "name": "27(c): other is towing ordinarily, and Rule 18 does not rank her, in sight",
2345
+ "status": "binding",
2346
+ "situation": {
2347
+ "own": {
2348
+ "fact": {
2349
+ "fact:propulsion": "propulsion:power",
2350
+ "fact:activity": "activity:none",
2351
+ "fact:position": "position:underway",
2352
+ "fact:making_way": true,
2353
+ "fact:length_m": 40
2354
+ }
2355
+ },
2356
+ "other": {
2357
+ "fact": {
2358
+ "fact:propulsion": "propulsion:power",
2359
+ "fact:activity": "activity:towing",
2360
+ "fact:position": "position:underway",
2361
+ "fact:making_way": true,
2362
+ "fact:length_m": 60,
2363
+ "fact:tow_length_m": 300,
2364
+ "fact:tow_restricts_deviation": false
2365
+ }
2366
+ },
2367
+ "pair": {
2368
+ "geo": {
2369
+ "geo:in_sight": true
2370
+ }
2371
+ }
2372
+ },
2373
+ "expect": [
2374
+ "11",
2375
+ "4"
2376
+ ],
2377
+ "narrative": "The other side of the same boolean, and the reason 27(c) needs one: most tows do not severely restrict the pair, and a tow that does not is an ordinary power-driven vessel under Rule 18. Without `fact:tow_restricts_deviation` the decode would have to choose one reading for every tow and would be wrong about most of them."
2378
+ },
2379
+ {
2380
+ "name": "27(c): other is being towed in a way that severely restricts the pair, in sight",
2381
+ "status": "binding",
2382
+ "situation": {
2383
+ "own": {
2384
+ "fact": {
2385
+ "fact:propulsion": "propulsion:power",
2386
+ "fact:activity": "activity:none",
2387
+ "fact:position": "position:underway",
2388
+ "fact:making_way": true,
2389
+ "fact:length_m": 40
2390
+ }
2391
+ },
2392
+ "other": {
2393
+ "fact": {
2394
+ "fact:propulsion": "propulsion:power",
2395
+ "fact:activity": "activity:being_towed",
2396
+ "fact:position": "position:underway",
2397
+ "fact:making_way": true,
2398
+ "fact:length_m": 60,
2399
+ "fact:tow_restricts_deviation": true
2400
+ }
2401
+ },
2402
+ "pair": {
2403
+ "geo": {
2404
+ "geo:in_sight": true
2405
+ }
2406
+ }
2407
+ },
2408
+ "expect": [
2409
+ "11",
2410
+ "18a2",
2411
+ "4"
2412
+ ],
2413
+ "narrative": "3(g)(vi) names \"the towing vessel and her tow\" together, and the tow carries her own fact record -- so this side of the pair needs its own fixture: `activity:being_towed` plus `fact:tow_restricts_deviation` on her own record decodes her to `rule18_class:ram` exactly as the towing vessel's does. Before this fixture the decode row only matched `activity:towing`, and the tow herself fell through to her propulsion undetected."
2414
+ },
2415
+ {
2416
+ "name": "13(b) edge: own bears exactly 112.5 from the other, and is not yet overtaking",
2417
+ "status": "binding",
2418
+ "narrative": "Own bears 112.5 relative from the other -- exactly 22.5 degrees abaft her beam, the forward edge of her sternlight arc. 13(b) says 'more than 22.5 degrees abaft her beam', so the edge itself is not an overtaking and the encounter is a crossing. The other bears 300 relative from own, on own's port bow, so own is the stand-on vessel and 15a-give-way is absent from her side; it applies to the other vessel, which is the swapped situation and not what a fixture asserts.",
2419
+ "expect": [
2420
+ "4",
2421
+ "11",
2422
+ "7d1",
2423
+ "8f3",
2424
+ "15a-crossing"
2425
+ ],
2426
+ "situation": {
2427
+ "own": {
2428
+ "fact": {
2429
+ "fact:propulsion": "propulsion:power",
2430
+ "fact:activity": "activity:none",
2431
+ "fact:position": "position:underway",
2432
+ "fact:making_way": true,
2433
+ "fact:length_m": 30.0
2434
+ },
2435
+ "kin": {
2436
+ "kin:heading_deg": 0,
2437
+ "kin:sog_kn": 12.0,
2438
+ "kin:rot_deg_min": 0,
2439
+ "kin:dynamics": "dynamics:cargo"
2440
+ },
2441
+ "geo": {
2442
+ "geo:rel_bearing_deg": 300.0
2443
+ },
2444
+ "hist": {
2445
+ "hist:was_overtaking": false,
2446
+ "hist:latched_at_s": null
2447
+ }
2448
+ },
2449
+ "other": {
2450
+ "fact": {
2451
+ "fact:propulsion": "propulsion:power",
2452
+ "fact:activity": "activity:none",
2453
+ "fact:position": "position:underway",
2454
+ "fact:making_way": true,
2455
+ "fact:length_m": 30.0
2456
+ },
2457
+ "kin": {
2458
+ "kin:heading_deg": 7.5,
2459
+ "kin:sog_kn": 11.25,
2460
+ "kin:rot_deg_min": 0,
2461
+ "kin:dynamics": "dynamics:ferry"
2462
+ },
2463
+ "geo": {
2464
+ "geo:rel_bearing_deg": 112.5
2465
+ },
2466
+ "hist": {
2467
+ "hist:was_overtaking": false,
2468
+ "hist:latched_at_s": null
2469
+ }
2470
+ },
2471
+ "pair": {
2472
+ "geo": {
2473
+ "geo:range_m": 2000,
2474
+ "geo:bearing_change_deg_min": 0.0,
2475
+ "geo:cpa_m": 2,
2476
+ "geo:tcpa_s": 2294,
2477
+ "geo:in_sight": true,
2478
+ "geo:risk_of_collision": true
2479
+ }
2480
+ }
2481
+ }
2482
+ },
2483
+ {
2484
+ "name": "13(b) edge: own bears 112.6 from the other, one tenth of a degree into the sector",
2485
+ "status": "binding",
2486
+ "narrative": "The same edge from the other side of it. A tenth of a degree further abaft the other's beam and the encounter is an overtaking: 13b-overtaking classifies it and 13a lays the duty on own. 15a-crossing is excluded by the sector, not by a hand-written crossing sector, which is the property the partition test asserts over the whole circle.",
2487
+ "expect": [
2488
+ "4",
2489
+ "11",
2490
+ "7d1",
2491
+ "8f3",
2492
+ "13a",
2493
+ "13b-overtaking"
2494
+ ],
2495
+ "situation": {
2496
+ "own": {
2497
+ "fact": {
2498
+ "fact:propulsion": "propulsion:power",
2499
+ "fact:activity": "activity:none",
2500
+ "fact:position": "position:underway",
2501
+ "fact:making_way": true,
2502
+ "fact:length_m": 30.0
2503
+ },
2504
+ "kin": {
2505
+ "kin:heading_deg": 0,
2506
+ "kin:sog_kn": 14.0,
2507
+ "kin:rot_deg_min": 0,
2508
+ "kin:dynamics": "dynamics:cargo"
2509
+ },
2510
+ "geo": {
2511
+ "geo:rel_bearing_deg": 350.0
2512
+ },
2513
+ "hist": {
2514
+ "hist:was_overtaking": false,
2515
+ "hist:latched_at_s": null
2516
+ }
2517
+ },
2518
+ "other": {
2519
+ "fact": {
2520
+ "fact:propulsion": "propulsion:power",
2521
+ "fact:activity": "activity:none",
2522
+ "fact:position": "position:underway",
2523
+ "fact:making_way": true,
2524
+ "fact:length_m": 30.0
2525
+ },
2526
+ "kin": {
2527
+ "kin:heading_deg": 57.4,
2528
+ "kin:sog_kn": 2.63,
2529
+ "kin:rot_deg_min": 0,
2530
+ "kin:dynamics": "dynamics:fishing"
2531
+ },
2532
+ "geo": {
2533
+ "geo:rel_bearing_deg": 112.6
2534
+ },
2535
+ "hist": {
2536
+ "hist:was_overtaking": false,
2537
+ "hist:latched_at_s": null
2538
+ }
2539
+ },
2540
+ "pair": {
2541
+ "geo": {
2542
+ "geo:range_m": 1200,
2543
+ "geo:bearing_change_deg_min": 0.0,
2544
+ "geo:cpa_m": 0,
2545
+ "geo:tcpa_s": 183,
2546
+ "geo:in_sight": true,
2547
+ "geo:risk_of_collision": true
2548
+ }
2549
+ }
2550
+ }
2551
+ },
2552
+ {
2553
+ "name": "13(b) edge: own bears exactly 247.5 from the other, the mirror of the same edge",
2554
+ "status": "binding",
2555
+ "narrative": "The port-quarter edge, 112.5 degrees the other way round. Not overtaking, so a crossing; and the other bears 010 relative from own, on her starboard bow, so own is the give-way vessel. Own is inside the head-on cone and the other is not, which is why 14b does not apply: 14(b) is a statement about both aspects, and the `any_of` that negates it needs only one of them outside.",
2556
+ "expect": [
2557
+ "4",
2558
+ "11",
2559
+ "7d1",
2560
+ "8f3",
2561
+ "15a-crossing",
2562
+ "15a-give-way"
2563
+ ],
2564
+ "situation": {
2565
+ "own": {
2566
+ "fact": {
2567
+ "fact:propulsion": "propulsion:power",
2568
+ "fact:activity": "activity:none",
2569
+ "fact:position": "position:underway",
2570
+ "fact:making_way": true,
2571
+ "fact:length_m": 30.0
2572
+ },
2573
+ "kin": {
2574
+ "kin:heading_deg": 0,
2575
+ "kin:sog_kn": 14.0,
2576
+ "kin:rot_deg_min": 0,
2577
+ "kin:dynamics": "dynamics:cargo"
2578
+ },
2579
+ "geo": {
2580
+ "geo:rel_bearing_deg": 10.0
2581
+ },
2582
+ "hist": {
2583
+ "hist:was_overtaking": false,
2584
+ "hist:latched_at_s": null
2585
+ }
2586
+ },
2587
+ "other": {
2588
+ "fact": {
2589
+ "fact:propulsion": "propulsion:power",
2590
+ "fact:activity": "activity:none",
2591
+ "fact:position": "position:underway",
2592
+ "fact:making_way": true,
2593
+ "fact:length_m": 30.0
2594
+ },
2595
+ "kin": {
2596
+ "kin:heading_deg": 302.5,
2597
+ "kin:sog_kn": 2.63,
2598
+ "kin:rot_deg_min": 0,
2599
+ "kin:dynamics": "dynamics:fishing"
2600
+ },
2601
+ "geo": {
2602
+ "geo:rel_bearing_deg": 247.5
2603
+ },
2604
+ "hist": {
2605
+ "hist:was_overtaking": false,
2606
+ "hist:latched_at_s": null
2607
+ }
2608
+ },
2609
+ "pair": {
2610
+ "geo": {
2611
+ "geo:range_m": 1200,
2612
+ "geo:bearing_change_deg_min": 0.0,
2613
+ "geo:cpa_m": 0,
2614
+ "geo:tcpa_s": 183,
2615
+ "geo:in_sight": true,
2616
+ "geo:risk_of_collision": true
2617
+ }
2618
+ }
2619
+ }
2620
+ },
2621
+ {
2622
+ "name": "13(b) edge: own bears 247.4 from the other, one tenth of a degree into the sector",
2623
+ "status": "binding",
2624
+ "narrative": "The mirror of the 112.6 case. Overtaking, and the give-way entry that applied a tenth of a degree away is gone -- the two sit either side of one number, which is the point of declaring it once.",
2625
+ "expect": [
2626
+ "4",
2627
+ "11",
2628
+ "7d1",
2629
+ "8f3",
2630
+ "13a",
2631
+ "13b-overtaking"
2632
+ ],
2633
+ "situation": {
2634
+ "own": {
2635
+ "fact": {
2636
+ "fact:propulsion": "propulsion:power",
2637
+ "fact:activity": "activity:none",
2638
+ "fact:position": "position:underway",
2639
+ "fact:making_way": true,
2640
+ "fact:length_m": 30.0
2641
+ },
2642
+ "kin": {
2643
+ "kin:heading_deg": 0,
2644
+ "kin:sog_kn": 14.0,
2645
+ "kin:rot_deg_min": 0,
2646
+ "kin:dynamics": "dynamics:cargo"
2647
+ },
2648
+ "geo": {
2649
+ "geo:rel_bearing_deg": 10.0
2650
+ },
2651
+ "hist": {
2652
+ "hist:was_overtaking": false,
2653
+ "hist:latched_at_s": null
2654
+ }
2655
+ },
2656
+ "other": {
2657
+ "fact": {
2658
+ "fact:propulsion": "propulsion:power",
2659
+ "fact:activity": "activity:none",
2660
+ "fact:position": "position:underway",
2661
+ "fact:making_way": true,
2662
+ "fact:length_m": 30.0
2663
+ },
2664
+ "kin": {
2665
+ "kin:heading_deg": 302.6,
2666
+ "kin:sog_kn": 2.63,
2667
+ "kin:rot_deg_min": 0,
2668
+ "kin:dynamics": "dynamics:fishing"
2669
+ },
2670
+ "geo": {
2671
+ "geo:rel_bearing_deg": 247.4
2672
+ },
2673
+ "hist": {
2674
+ "hist:was_overtaking": false,
2675
+ "hist:latched_at_s": null
2676
+ }
2677
+ },
2678
+ "pair": {
2679
+ "geo": {
2680
+ "geo:range_m": 1200,
2681
+ "geo:bearing_change_deg_min": 0.0,
2682
+ "geo:cpa_m": 0,
2683
+ "geo:tcpa_s": 183,
2684
+ "geo:in_sight": true,
2685
+ "geo:risk_of_collision": true
2686
+ }
2687
+ }
2688
+ }
2689
+ },
2690
+ {
2691
+ "name": "13(b): own is the vessel being overtaken, and the encounter is still an overtaking",
2692
+ "status": "binding",
2693
+ "narrative": "The other bears 200 relative from own and is coming up fast on own's port quarter. From own's side the aspect is 005 -- she is nearly ahead of the overtaking vessel -- and reading aspect alone would have made this a crossing on own's side and an overtaking on the other's, one encounter with two names. 13b-overtaken is the second half of 13(b) and is what stops that. 13a is correctly absent: own is not the vessel that keeps out of the way.",
2694
+ "expect": [
2695
+ "4",
2696
+ "11",
2697
+ "7d1",
2698
+ "8f3",
2699
+ "13b-overtaken"
2700
+ ],
2701
+ "situation": {
2702
+ "own": {
2703
+ "fact": {
2704
+ "fact:propulsion": "propulsion:power",
2705
+ "fact:activity": "activity:none",
2706
+ "fact:position": "position:underway",
2707
+ "fact:making_way": true,
2708
+ "fact:length_m": 30.0
2709
+ },
2710
+ "kin": {
2711
+ "kin:heading_deg": 0,
2712
+ "kin:sog_kn": 3.0,
2713
+ "kin:rot_deg_min": 0,
2714
+ "kin:dynamics": "dynamics:fishing"
2715
+ },
2716
+ "geo": {
2717
+ "geo:rel_bearing_deg": 200.0
2718
+ },
2719
+ "hist": {
2720
+ "hist:was_overtaking": false,
2721
+ "hist:latched_at_s": null
2722
+ }
2723
+ },
2724
+ "other": {
2725
+ "fact": {
2726
+ "fact:propulsion": "propulsion:power",
2727
+ "fact:activity": "activity:none",
2728
+ "fact:position": "position:underway",
2729
+ "fact:making_way": true,
2730
+ "fact:length_m": 30.0
2731
+ },
2732
+ "kin": {
2733
+ "kin:heading_deg": 15.0,
2734
+ "kin:sog_kn": 11.8,
2735
+ "kin:rot_deg_min": 0,
2736
+ "kin:dynamics": "dynamics:cargo"
2737
+ },
2738
+ "geo": {
2739
+ "geo:rel_bearing_deg": 5.0
2740
+ },
2741
+ "hist": {
2742
+ "hist:was_overtaking": false,
2743
+ "hist:latched_at_s": null
2744
+ }
2745
+ },
2746
+ "pair": {
2747
+ "geo": {
2748
+ "geo:range_m": 900,
2749
+ "geo:bearing_change_deg_min": 0.0,
2750
+ "geo:cpa_m": 0,
2751
+ "geo:tcpa_s": 196,
2752
+ "geo:in_sight": true,
2753
+ "geo:risk_of_collision": true
2754
+ }
2755
+ }
2756
+ }
2757
+ },
2758
+ {
2759
+ "name": "14 edge: both aspects exactly one point, the widest head-on the constant admits",
2760
+ "status": "binding",
2761
+ "narrative": "Own bears 348.75 relative from the other and the other bears 011.25 from own -- both exactly at `head_on_half_angle_deg`, one point of the compass. The cone is closed at the edge, so this is a head-on situation. Courses are 000 and 202.5, twenty-two and a half degrees off reciprocal, which is the widest pair the pencilled constant admits and the fixture that will change if the constant does.",
2762
+ "expect": [
2763
+ "4",
2764
+ "11",
2765
+ "7d1",
2766
+ "8f3",
2767
+ "14b"
2768
+ ],
2769
+ "situation": {
2770
+ "own": {
2771
+ "fact": {
2772
+ "fact:propulsion": "propulsion:power",
2773
+ "fact:activity": "activity:none",
2774
+ "fact:position": "position:underway",
2775
+ "fact:making_way": true,
2776
+ "fact:length_m": 30.0
2777
+ },
2778
+ "kin": {
2779
+ "kin:heading_deg": 0,
2780
+ "kin:sog_kn": 12.0,
2781
+ "kin:rot_deg_min": 0,
2782
+ "kin:dynamics": "dynamics:ferry"
2783
+ },
2784
+ "geo": {
2785
+ "geo:rel_bearing_deg": 11.25
2786
+ },
2787
+ "hist": {
2788
+ "hist:was_overtaking": false,
2789
+ "hist:latched_at_s": null
2790
+ }
2791
+ },
2792
+ "other": {
2793
+ "fact": {
2794
+ "fact:propulsion": "propulsion:power",
2795
+ "fact:activity": "activity:none",
2796
+ "fact:position": "position:underway",
2797
+ "fact:making_way": true,
2798
+ "fact:length_m": 30.0
2799
+ },
2800
+ "kin": {
2801
+ "kin:heading_deg": 202.5,
2802
+ "kin:sog_kn": 12.0,
2803
+ "kin:rot_deg_min": 0,
2804
+ "kin:dynamics": "dynamics:ferry"
2805
+ },
2806
+ "geo": {
2807
+ "geo:rel_bearing_deg": 348.75
2808
+ },
2809
+ "hist": {
2810
+ "hist:was_overtaking": false,
2811
+ "hist:latched_at_s": null
2812
+ }
2813
+ },
2814
+ "pair": {
2815
+ "geo": {
2816
+ "geo:range_m": 1500,
2817
+ "geo:bearing_change_deg_min": 0.0,
2818
+ "geo:cpa_m": 0,
2819
+ "geo:tcpa_s": 124,
2820
+ "geo:in_sight": true,
2821
+ "geo:risk_of_collision": true
2822
+ }
2823
+ }
2824
+ }
2825
+ },
2826
+ {
2827
+ "name": "14 edge: one twentieth of a degree wider, and the same situation is a crossing",
2828
+ "status": "binding",
2829
+ "narrative": "Own's bearing of the other moves from 11.25 to 11.3 and nothing else changes. The head-on cone no longer holds on both subjects, so 14b is gone and 15a-crossing takes it -- the residual, with no bearing left unclassified between the two fixtures. Own has the other on her starboard side, so she is give-way.",
2830
+ "expect": [
2831
+ "4",
2832
+ "11",
2833
+ "7d1",
2834
+ "8f3",
2835
+ "15a-crossing",
2836
+ "15a-give-way"
2837
+ ],
2838
+ "situation": {
2839
+ "own": {
2840
+ "fact": {
2841
+ "fact:propulsion": "propulsion:power",
2842
+ "fact:activity": "activity:none",
2843
+ "fact:position": "position:underway",
2844
+ "fact:making_way": true,
2845
+ "fact:length_m": 30.0
2846
+ },
2847
+ "kin": {
2848
+ "kin:heading_deg": 0,
2849
+ "kin:sog_kn": 12.0,
2850
+ "kin:rot_deg_min": 0,
2851
+ "kin:dynamics": "dynamics:ferry"
2852
+ },
2853
+ "geo": {
2854
+ "geo:rel_bearing_deg": 11.3
2855
+ },
2856
+ "hist": {
2857
+ "hist:was_overtaking": false,
2858
+ "hist:latched_at_s": null
2859
+ }
2860
+ },
2861
+ "other": {
2862
+ "fact": {
2863
+ "fact:propulsion": "propulsion:power",
2864
+ "fact:activity": "activity:none",
2865
+ "fact:position": "position:underway",
2866
+ "fact:making_way": true,
2867
+ "fact:length_m": 30.0
2868
+ },
2869
+ "kin": {
2870
+ "kin:heading_deg": 202.55,
2871
+ "kin:sog_kn": 12.05,
2872
+ "kin:rot_deg_min": 0,
2873
+ "kin:dynamics": "dynamics:ferry"
2874
+ },
2875
+ "geo": {
2876
+ "geo:rel_bearing_deg": 348.75
2877
+ },
2878
+ "hist": {
2879
+ "hist:was_overtaking": false,
2880
+ "hist:latched_at_s": null
2881
+ }
2882
+ },
2883
+ "pair": {
2884
+ "geo": {
2885
+ "geo:range_m": 1500,
2886
+ "geo:bearing_change_deg_min": 0.0,
2887
+ "geo:cpa_m": 0,
2888
+ "geo:tcpa_s": 124,
2889
+ "geo:in_sight": true,
2890
+ "geo:risk_of_collision": true
2891
+ }
2892
+ }
2893
+ }
2894
+ },
2895
+ {
2896
+ "name": "7(d)(i) does not apply: the bearing is drawing out at three degrees a minute",
2897
+ "status": "binding",
2898
+ "narrative": "The same crossing geometry as the first fixture with the bearing opening at 3 deg/min, comfortably outside `appreciable_bearing_change_deg_min`. 7d1 is absent and every other entry is unchanged: risk of collision is a supplied fact and 7(d)(i) is a second ground for it, never the only one, which is why 15a-crossing and 8f3 still apply.",
2899
+ "expect": [
2900
+ "4",
2901
+ "11",
2902
+ "8f3",
2903
+ "15a-crossing",
2904
+ "15a-give-way"
2905
+ ],
2906
+ "situation": {
2907
+ "own": {
2908
+ "fact": {
2909
+ "fact:propulsion": "propulsion:power",
2910
+ "fact:activity": "activity:none",
2911
+ "fact:position": "position:underway",
2912
+ "fact:making_way": true,
2913
+ "fact:length_m": 30.0
2914
+ },
2915
+ "kin": {
2916
+ "kin:heading_deg": 0,
2917
+ "kin:sog_kn": 12.0,
2918
+ "kin:rot_deg_min": 0,
2919
+ "kin:dynamics": "dynamics:cargo"
2920
+ },
2921
+ "geo": {
2922
+ "geo:rel_bearing_deg": 40.0
2923
+ },
2924
+ "hist": {
2925
+ "hist:was_overtaking": false,
2926
+ "hist:latched_at_s": null
2927
+ }
2928
+ },
2929
+ "other": {
2930
+ "fact": {
2931
+ "fact:propulsion": "propulsion:power",
2932
+ "fact:activity": "activity:none",
2933
+ "fact:position": "position:underway",
2934
+ "fact:making_way": true,
2935
+ "fact:length_m": 30.0
2936
+ },
2937
+ "kin": {
2938
+ "kin:heading_deg": 300.0,
2939
+ "kin:sog_kn": 18.2,
2940
+ "kin:rot_deg_min": 0,
2941
+ "kin:dynamics": "dynamics:cargo"
2942
+ },
2943
+ "geo": {
2944
+ "geo:rel_bearing_deg": 280.0
2945
+ },
2946
+ "hist": {
2947
+ "hist:was_overtaking": false,
2948
+ "hist:latched_at_s": null
2949
+ }
2950
+ },
2951
+ "pair": {
2952
+ "geo": {
2953
+ "geo:range_m": 6000,
2954
+ "geo:bearing_change_deg_min": -3.01,
2955
+ "geo:cpa_m": 3823,
2956
+ "geo:tcpa_s": 561,
2957
+ "geo:in_sight": true,
2958
+ "geo:risk_of_collision": true
2959
+ }
2960
+ }
2961
+ }
2962
+ },
2963
+ {
2964
+ "name": "no risk of collision: the geometry is a crossing and Section II classifies nothing",
2965
+ "status": "binding",
2966
+ "narrative": "The same bearings again with `geo:risk_of_collision` false. Rules 14 and 15 both open on risk of collision, so neither the encounter type nor the role survives its absence, and the pair selects only the two scope entries. Rule 13 would have survived it -- 13(b) says nothing about risk -- which is why this case is a crossing geometry and not an overtaking one.",
2967
+ "expect": [
2968
+ "4",
2969
+ "11"
2970
+ ],
2971
+ "situation": {
2972
+ "own": {
2973
+ "fact": {
2974
+ "fact:propulsion": "propulsion:power",
2975
+ "fact:activity": "activity:none",
2976
+ "fact:position": "position:underway",
2977
+ "fact:making_way": true,
2978
+ "fact:length_m": 30.0
2979
+ },
2980
+ "kin": {
2981
+ "kin:heading_deg": 0,
2982
+ "kin:sog_kn": 12.0,
2983
+ "kin:rot_deg_min": 0,
2984
+ "kin:dynamics": "dynamics:cargo"
2985
+ },
2986
+ "geo": {
2987
+ "geo:rel_bearing_deg": 40.0
2988
+ },
2989
+ "hist": {
2990
+ "hist:was_overtaking": false,
2991
+ "hist:latched_at_s": null
2992
+ }
2993
+ },
2994
+ "other": {
2995
+ "fact": {
2996
+ "fact:propulsion": "propulsion:power",
2997
+ "fact:activity": "activity:none",
2998
+ "fact:position": "position:underway",
2999
+ "fact:making_way": true,
3000
+ "fact:length_m": 30.0
3001
+ },
3002
+ "kin": {
3003
+ "kin:heading_deg": 300.0,
3004
+ "kin:sog_kn": 18.2,
3005
+ "kin:rot_deg_min": 0,
3006
+ "kin:dynamics": "dynamics:cargo"
3007
+ },
3008
+ "geo": {
3009
+ "geo:rel_bearing_deg": 280.0
3010
+ },
3011
+ "hist": {
3012
+ "hist:was_overtaking": false,
3013
+ "hist:latched_at_s": null
3014
+ }
3015
+ },
3016
+ "pair": {
3017
+ "geo": {
3018
+ "geo:range_m": 6000,
3019
+ "geo:bearing_change_deg_min": -3.01,
3020
+ "geo:cpa_m": 3823,
3021
+ "geo:tcpa_s": 561,
3022
+ "geo:in_sight": true,
3023
+ "geo:risk_of_collision": false
3024
+ }
3025
+ }
3026
+ }
3027
+ },
3028
+ {
3029
+ "name": "12(a)(i): own on the port tack, the other on the starboard tack",
3030
+ "status": "binding",
3031
+ "narrative": "Two sailing vessels approaching with the wind on different sides. Own has it on the port side and keeps out of the way. No encounter type is produced: Rules 14 and 15 are both gated on two power-driven vessels and Rule 12 has no deeming paragraph of its own, so the pair carries a role and no classification. That is a finding about the Rules rather than a gap in the data -- Q-43.",
3032
+ "expect": [
3033
+ "4",
3034
+ "11",
3035
+ "7d1",
3036
+ "8f3",
3037
+ "12a1"
3038
+ ],
3039
+ "situation": {
3040
+ "own": {
3041
+ "fact": {
3042
+ "fact:propulsion": "propulsion:sail",
3043
+ "fact:activity": "activity:none",
3044
+ "fact:position": "position:underway",
3045
+ "fact:making_way": true,
3046
+ "fact:length_m": 12.0
3047
+ },
3048
+ "kin": {
3049
+ "kin:heading_deg": 0,
3050
+ "kin:sog_kn": 6.0,
3051
+ "kin:rot_deg_min": 0,
3052
+ "kin:dynamics": "dynamics:yacht",
3053
+ "kin:wind_side": "wind_side:port"
3054
+ },
3055
+ "geo": {
3056
+ "geo:rel_bearing_deg": 45.0,
3057
+ "geo:windward": false
3058
+ },
3059
+ "hist": {
3060
+ "hist:was_overtaking": false,
3061
+ "hist:latched_at_s": null
3062
+ }
3063
+ },
3064
+ "other": {
3065
+ "fact": {
3066
+ "fact:propulsion": "propulsion:sail",
3067
+ "fact:activity": "activity:none",
3068
+ "fact:position": "position:underway",
3069
+ "fact:making_way": true,
3070
+ "fact:length_m": 11.0
3071
+ },
3072
+ "kin": {
3073
+ "kin:heading_deg": 285.0,
3074
+ "kin:sog_kn": 4.9,
3075
+ "kin:rot_deg_min": 0,
3076
+ "kin:dynamics": "dynamics:yacht",
3077
+ "kin:wind_side": "wind_side:starboard"
3078
+ },
3079
+ "geo": {
3080
+ "geo:rel_bearing_deg": 300.0,
3081
+ "geo:windward": true
3082
+ },
3083
+ "hist": {
3084
+ "hist:was_overtaking": false,
3085
+ "hist:latched_at_s": null
3086
+ }
3087
+ },
3088
+ "pair": {
3089
+ "geo": {
3090
+ "geo:range_m": 1500,
3091
+ "geo:bearing_change_deg_min": 0.0,
3092
+ "geo:cpa_m": 0,
3093
+ "geo:tcpa_s": 436,
3094
+ "geo:in_sight": true,
3095
+ "geo:risk_of_collision": true
3096
+ }
3097
+ }
3098
+ }
3099
+ },
3100
+ {
3101
+ "name": "12(a)(ii): both on the starboard tack, own to windward",
3102
+ "status": "binding",
3103
+ "narrative": "The wind on the same side for both, so the windward vessel keeps clear. `geo:windward` is antisymmetric and the fixture states both halves of it, which is what makes the swapped reading -- the other vessel is not give-way -- an assertion rather than an absence.",
3104
+ "expect": [
3105
+ "4",
3106
+ "11",
3107
+ "7d1",
3108
+ "8f3",
3109
+ "12a2"
3110
+ ],
3111
+ "situation": {
3112
+ "own": {
3113
+ "fact": {
3114
+ "fact:propulsion": "propulsion:sail",
3115
+ "fact:activity": "activity:none",
3116
+ "fact:position": "position:underway",
3117
+ "fact:making_way": true,
3118
+ "fact:length_m": 12.0
3119
+ },
3120
+ "kin": {
3121
+ "kin:heading_deg": 0,
3122
+ "kin:sog_kn": 6.0,
3123
+ "kin:rot_deg_min": 0,
3124
+ "kin:dynamics": "dynamics:yacht",
3125
+ "kin:wind_side": "wind_side:starboard"
3126
+ },
3127
+ "geo": {
3128
+ "geo:rel_bearing_deg": 45.0,
3129
+ "geo:windward": true
3130
+ },
3131
+ "hist": {
3132
+ "hist:was_overtaking": false,
3133
+ "hist:latched_at_s": null
3134
+ }
3135
+ },
3136
+ "other": {
3137
+ "fact": {
3138
+ "fact:propulsion": "propulsion:sail",
3139
+ "fact:activity": "activity:none",
3140
+ "fact:position": "position:underway",
3141
+ "fact:making_way": true,
3142
+ "fact:length_m": 11.0
3143
+ },
3144
+ "kin": {
3145
+ "kin:heading_deg": 285.0,
3146
+ "kin:sog_kn": 4.9,
3147
+ "kin:rot_deg_min": 0,
3148
+ "kin:dynamics": "dynamics:yacht",
3149
+ "kin:wind_side": "wind_side:starboard"
3150
+ },
3151
+ "geo": {
3152
+ "geo:rel_bearing_deg": 300.0,
3153
+ "geo:windward": false
3154
+ },
3155
+ "hist": {
3156
+ "hist:was_overtaking": false,
3157
+ "hist:latched_at_s": null
3158
+ }
3159
+ },
3160
+ "pair": {
3161
+ "geo": {
3162
+ "geo:range_m": 1500,
3163
+ "geo:bearing_change_deg_min": 0.0,
3164
+ "geo:cpa_m": 0,
3165
+ "geo:tcpa_s": 436,
3166
+ "geo:in_sight": true,
3167
+ "geo:risk_of_collision": true
3168
+ }
3169
+ }
3170
+ }
3171
+ },
3172
+ {
3173
+ "name": "12(a)(iii): own on the port tack and the other's tack cannot be determined",
3174
+ "status": "binding",
3175
+ "narrative": "Own has the wind on the port side, sees a vessel to windward, and cannot tell which side that vessel has the wind on. `wind_side:unknown` is a declared value and not an absent fact, which is the only reason this paragraph is expressible at all: an absent fact satisfies nothing, so silence would have relieved own of the duty the paragraph exists to impose.",
3176
+ "expect": [
3177
+ "4",
3178
+ "11",
3179
+ "7d1",
3180
+ "8f3",
3181
+ "12a3"
3182
+ ],
3183
+ "situation": {
3184
+ "own": {
3185
+ "fact": {
3186
+ "fact:propulsion": "propulsion:sail",
3187
+ "fact:activity": "activity:none",
3188
+ "fact:position": "position:underway",
3189
+ "fact:making_way": true,
3190
+ "fact:length_m": 12.0
3191
+ },
3192
+ "kin": {
3193
+ "kin:heading_deg": 0,
3194
+ "kin:sog_kn": 6.0,
3195
+ "kin:rot_deg_min": 0,
3196
+ "kin:dynamics": "dynamics:yacht",
3197
+ "kin:wind_side": "wind_side:port"
3198
+ },
3199
+ "geo": {
3200
+ "geo:rel_bearing_deg": 45.0,
3201
+ "geo:windward": false
3202
+ },
3203
+ "hist": {
3204
+ "hist:was_overtaking": false,
3205
+ "hist:latched_at_s": null
3206
+ }
3207
+ },
3208
+ "other": {
3209
+ "fact": {
3210
+ "fact:propulsion": "propulsion:sail",
3211
+ "fact:activity": "activity:none",
3212
+ "fact:position": "position:underway",
3213
+ "fact:making_way": true,
3214
+ "fact:length_m": 11.0
3215
+ },
3216
+ "kin": {
3217
+ "kin:heading_deg": 285.0,
3218
+ "kin:sog_kn": 4.9,
3219
+ "kin:rot_deg_min": 0,
3220
+ "kin:dynamics": "dynamics:yacht",
3221
+ "kin:wind_side": "wind_side:unknown"
3222
+ },
3223
+ "geo": {
3224
+ "geo:rel_bearing_deg": 300.0,
3225
+ "geo:windward": true
3226
+ },
3227
+ "hist": {
3228
+ "hist:was_overtaking": false,
3229
+ "hist:latched_at_s": null
3230
+ }
3231
+ },
3232
+ "pair": {
3233
+ "geo": {
3234
+ "geo:range_m": 1500,
3235
+ "geo:bearing_change_deg_min": 0.0,
3236
+ "geo:cpa_m": 0,
3237
+ "geo:tcpa_s": 436,
3238
+ "geo:in_sight": true,
3239
+ "geo:risk_of_collision": true
3240
+ }
3241
+ }
3242
+ }
3243
+ },
3244
+ {
3245
+ "name": "12 does not apply: both on the starboard tack and own to leeward",
3246
+ "status": "binding",
3247
+ "narrative": "The exclusion case for all three of Rule 12. Same tack rules out 12(a)(i), own to leeward rules out 12(a)(ii), and the other's tack being known rules out 12(a)(iii). The leeward vessel is stand-on and the entry that says so is 12a2 read on the swapped situation, which is why nothing appears here.",
3248
+ "expect": [
3249
+ "4",
3250
+ "11",
3251
+ "7d1",
3252
+ "8f3"
3253
+ ],
3254
+ "situation": {
3255
+ "own": {
3256
+ "fact": {
3257
+ "fact:propulsion": "propulsion:sail",
3258
+ "fact:activity": "activity:none",
3259
+ "fact:position": "position:underway",
3260
+ "fact:making_way": true,
3261
+ "fact:length_m": 12.0
3262
+ },
3263
+ "kin": {
3264
+ "kin:heading_deg": 0,
3265
+ "kin:sog_kn": 6.0,
3266
+ "kin:rot_deg_min": 0,
3267
+ "kin:dynamics": "dynamics:yacht",
3268
+ "kin:wind_side": "wind_side:starboard"
3269
+ },
3270
+ "geo": {
3271
+ "geo:rel_bearing_deg": 45.0,
3272
+ "geo:windward": false
3273
+ },
3274
+ "hist": {
3275
+ "hist:was_overtaking": false,
3276
+ "hist:latched_at_s": null
3277
+ }
3278
+ },
3279
+ "other": {
3280
+ "fact": {
3281
+ "fact:propulsion": "propulsion:sail",
3282
+ "fact:activity": "activity:none",
3283
+ "fact:position": "position:underway",
3284
+ "fact:making_way": true,
3285
+ "fact:length_m": 11.0
3286
+ },
3287
+ "kin": {
3288
+ "kin:heading_deg": 285.0,
3289
+ "kin:sog_kn": 4.9,
3290
+ "kin:rot_deg_min": 0,
3291
+ "kin:dynamics": "dynamics:yacht",
3292
+ "kin:wind_side": "wind_side:starboard"
3293
+ },
3294
+ "geo": {
3295
+ "geo:rel_bearing_deg": 300.0,
3296
+ "geo:windward": true
3297
+ },
3298
+ "hist": {
3299
+ "hist:was_overtaking": false,
3300
+ "hist:latched_at_s": null
3301
+ }
3302
+ },
3303
+ "pair": {
3304
+ "geo": {
3305
+ "geo:range_m": 1500,
3306
+ "geo:bearing_change_deg_min": 0.0,
3307
+ "geo:cpa_m": 0,
3308
+ "geo:tcpa_s": 436,
3309
+ "geo:in_sight": true,
3310
+ "geo:risk_of_collision": true
3311
+ }
3312
+ }
3313
+ }
3314
+ },
3315
+ {
3316
+ "name": "12 under 18(b)(iii): own fishing under sail on the port tack, the other a sailing vessel on the starboard tack",
3317
+ "status": "binding",
3318
+ "narrative": "The same crossing as the 12(a)(i) case, with own now engaged in fishing under sail. She is a sailing vessel by 3(c) -- her machinery is not in use -- so 12(a)(i) applies from her side and would make her give way, being on the port tack. She is also a vessel engaged in fishing by 3(d), so from the other vessel's side 18(b)(iii) applies and makes the other keep out of her way. Both are in force; Rule 18's opening words except Rules 9, 10 and 13 and not Rule 12, so 18b3 carries rel:overrides against 12a1 and own resolves to stand-on. This fixture asserts applicability from own's side, which is 12a1; the resolution is asserted by the pooled-roles tests, and before this PR own was simply outside Rule 12, which was Q-40's finding.",
3319
+ "expect": [
3320
+ "4",
3321
+ "11",
3322
+ "7d1",
3323
+ "8f3",
3324
+ "12a1"
3325
+ ],
3326
+ "situation": {
3327
+ "own": {
3328
+ "fact": {
3329
+ "fact:propulsion": "propulsion:sail",
3330
+ "fact:activity": "activity:fishing",
3331
+ "fact:position": "position:underway",
3332
+ "fact:making_way": true,
3333
+ "fact:length_m": 16.0
3334
+ },
3335
+ "kin": {
3336
+ "kin:heading_deg": 0,
3337
+ "kin:sog_kn": 6.0,
3338
+ "kin:rot_deg_min": 0,
3339
+ "kin:dynamics": "dynamics:fishing",
3340
+ "kin:wind_side": "wind_side:port"
3341
+ },
3342
+ "geo": {
3343
+ "geo:rel_bearing_deg": 45.0,
3344
+ "geo:windward": false
3345
+ },
3346
+ "hist": {
3347
+ "hist:was_overtaking": false,
3348
+ "hist:latched_at_s": null
3349
+ }
3350
+ },
3351
+ "other": {
3352
+ "fact": {
3353
+ "fact:propulsion": "propulsion:sail",
3354
+ "fact:activity": "activity:none",
3355
+ "fact:position": "position:underway",
3356
+ "fact:making_way": true,
3357
+ "fact:length_m": 11.0
3358
+ },
3359
+ "kin": {
3360
+ "kin:heading_deg": 285.0,
3361
+ "kin:sog_kn": 4.9,
3362
+ "kin:rot_deg_min": 0,
3363
+ "kin:dynamics": "dynamics:yacht",
3364
+ "kin:wind_side": "wind_side:starboard"
3365
+ },
3366
+ "geo": {
3367
+ "geo:rel_bearing_deg": 300.0,
3368
+ "geo:windward": true
3369
+ },
3370
+ "hist": {
3371
+ "hist:was_overtaking": false,
3372
+ "hist:latched_at_s": null
3373
+ }
3374
+ },
3375
+ "pair": {
3376
+ "geo": {
3377
+ "geo:range_m": 1500,
3378
+ "geo:cpa_m": 0,
3379
+ "geo:tcpa_s": 436,
3380
+ "geo:bearing_change_deg_min": 0.0,
3381
+ "geo:in_sight": true,
3382
+ "geo:risk_of_collision": true
3383
+ }
3384
+ }
3385
+ }
3386
+ },
3387
+ {
3388
+ "name": "13 over 12: own overtaking a windward vessel on the same tack from dead astern",
3389
+ "status": "binding",
3390
+ "narrative": "Two sailing vessels on the starboard tack, own to leeward and coming up from dead astern at twice the other's speed. From own's side 13(a) and 13(b) apply and 12(a)(ii) does not -- own is not the windward vessel. From the other's side 12(a)(ii) does apply and would make her, the windward vessel, keep out of the way of own. 13(a) is 'notwithstanding anything contained in' the Rules of Part B Sections I and II, which is Rule 12 among others, so 13a carries rel:overrides against the three Rule 12 entries and the overtaken vessel resolves to stand-on. Steady bearing: dead ahead and dead astern, closing at three knots.",
3391
+ "expect": [
3392
+ "4",
3393
+ "11",
3394
+ "7d1",
3395
+ "8f3",
3396
+ "13a",
3397
+ "13b-overtaking"
3398
+ ],
3399
+ "situation": {
3400
+ "own": {
3401
+ "fact": {
3402
+ "fact:propulsion": "propulsion:sail",
3403
+ "fact:activity": "activity:none",
3404
+ "fact:position": "position:underway",
3405
+ "fact:making_way": true,
3406
+ "fact:length_m": 12.0
3407
+ },
3408
+ "kin": {
3409
+ "kin:heading_deg": 0,
3410
+ "kin:sog_kn": 6.0,
3411
+ "kin:rot_deg_min": 0,
3412
+ "kin:dynamics": "dynamics:yacht",
3413
+ "kin:wind_side": "wind_side:starboard"
3414
+ },
3415
+ "geo": {
3416
+ "geo:rel_bearing_deg": 0.0,
3417
+ "geo:windward": false
3418
+ },
3419
+ "hist": {
3420
+ "hist:was_overtaking": false,
3421
+ "hist:latched_at_s": null
3422
+ }
3423
+ },
3424
+ "other": {
3425
+ "fact": {
3426
+ "fact:propulsion": "propulsion:sail",
3427
+ "fact:activity": "activity:none",
3428
+ "fact:position": "position:underway",
3429
+ "fact:making_way": true,
3430
+ "fact:length_m": 11.0
3431
+ },
3432
+ "kin": {
3433
+ "kin:heading_deg": 0,
3434
+ "kin:sog_kn": 3.0,
3435
+ "kin:rot_deg_min": 0,
3436
+ "kin:dynamics": "dynamics:yacht",
3437
+ "kin:wind_side": "wind_side:starboard"
3438
+ },
3439
+ "geo": {
3440
+ "geo:rel_bearing_deg": 180.0,
3441
+ "geo:windward": true
3442
+ },
3443
+ "hist": {
3444
+ "hist:was_overtaking": false,
3445
+ "hist:latched_at_s": null
3446
+ }
3447
+ },
3448
+ "pair": {
3449
+ "geo": {
3450
+ "geo:range_m": 500,
3451
+ "geo:cpa_m": 0,
3452
+ "geo:tcpa_s": 324,
3453
+ "geo:bearing_change_deg_min": 0.0,
3454
+ "geo:in_sight": true,
3455
+ "geo:risk_of_collision": true
3456
+ }
3457
+ }
3458
+ }
3459
+ },
3460
+ {
3461
+ "name": "15 between two fishing vessels: both under power, the other on own's starboard side",
3462
+ "status": "binding",
3463
+ "narrative": "Two vessels engaged in fishing, both propelled by machinery, crossing in sight on a steady bearing at 1500 m. Rule 18 orders neither of them: 18(a) speaks for a power-driven vessel that is not herself ranked by Rule 18, and 18(c) ranks a fishing vessel only against a vessel not under command and one restricted in her ability to manoeuvre. So no Rule 18 norm is in force between this pair. 15(a)'s \"two power-driven vessels\" is 3(b), and a vessel engaged in fishing whose machinery is in use is a power-driven vessel, so Rule 15 is the only norm that assigns a role here: own has the other on her own starboard side and keeps out of the way, the other stands on. Before this PR `15a-give-way` negated the four Rule 18 ranks on both subjects, so neither vessel took a helm role and the pair was ungoverned -- which is the finding this fixture was written to record.",
3464
+ "expect": [
3465
+ "4",
3466
+ "11",
3467
+ "7d1",
3468
+ "8f3",
3469
+ "15a-crossing",
3470
+ "15a-give-way"
3471
+ ],
3472
+ "situation": {
3473
+ "own": {
3474
+ "fact": {
3475
+ "fact:propulsion": "propulsion:power",
3476
+ "fact:activity": "activity:fishing",
3477
+ "fact:position": "position:underway",
3478
+ "fact:making_way": true,
3479
+ "fact:length_m": 26.0
3480
+ },
3481
+ "kin": {
3482
+ "kin:heading_deg": 0,
3483
+ "kin:sog_kn": 6.0,
3484
+ "kin:rot_deg_min": 0,
3485
+ "kin:dynamics": "dynamics:fishing"
3486
+ },
3487
+ "geo": {
3488
+ "geo:rel_bearing_deg": 45.0
3489
+ },
3490
+ "hist": {
3491
+ "hist:was_overtaking": false,
3492
+ "hist:latched_at_s": null
3493
+ }
3494
+ },
3495
+ "other": {
3496
+ "fact": {
3497
+ "fact:propulsion": "propulsion:power",
3498
+ "fact:activity": "activity:fishing",
3499
+ "fact:position": "position:underway",
3500
+ "fact:making_way": true,
3501
+ "fact:length_m": 22.0
3502
+ },
3503
+ "kin": {
3504
+ "kin:heading_deg": 285.0,
3505
+ "kin:sog_kn": 4.9,
3506
+ "kin:rot_deg_min": 0,
3507
+ "kin:dynamics": "dynamics:fishing"
3508
+ },
3509
+ "geo": {
3510
+ "geo:rel_bearing_deg": 300.0
3511
+ },
3512
+ "hist": {
3513
+ "hist:was_overtaking": false,
3514
+ "hist:latched_at_s": null
3515
+ }
3516
+ },
3517
+ "pair": {
3518
+ "geo": {
3519
+ "geo:range_m": 1500,
3520
+ "geo:cpa_m": 0,
3521
+ "geo:tcpa_s": 436,
3522
+ "geo:bearing_change_deg_min": 0.0,
3523
+ "geo:in_sight": true,
3524
+ "geo:risk_of_collision": true
3525
+ }
3526
+ }
3527
+ }
3528
+ },
3529
+ {
3530
+ "name": "15 between NUC and RAM: both under power, and Rule 18 does not order them",
3531
+ "status": "binding",
3532
+ "narrative": "The same crossing with own not under command and the other restricted in her ability to manoeuvre, both propelled by machinery. Rule 18 is a partial order and these two are its unordered pair -- neither 18(a), whose subject is a vessel Rule 18 does not rank, nor 18(c), whose subject is a fishing vessel, reaches them -- which the partial-order test already pins. Both are power-driven vessels by 3(b), so 15(a) applies and own, having the other on her own starboard side, is the give-way vessel. That lays a helm duty on a vessel which by 3(f) is unable to manoeuvre as the Rules require, and the model records it rather than gating it away: Rule 2 is what answers it (ADR 0005 sec. 5), the same position `12a1` takes for two sailing vessels Rule 18 leaves unordered. Q-40.",
3533
+ "expect": [
3534
+ "4",
3535
+ "11",
3536
+ "7d1",
3537
+ "8f3",
3538
+ "15a-crossing",
3539
+ "15a-give-way"
3540
+ ],
3541
+ "situation": {
3542
+ "own": {
3543
+ "fact": {
3544
+ "fact:propulsion": "propulsion:power",
3545
+ "fact:activity": "activity:nuc",
3546
+ "fact:position": "position:underway",
3547
+ "fact:making_way": true,
3548
+ "fact:length_m": 80.0
3549
+ },
3550
+ "kin": {
3551
+ "kin:heading_deg": 0,
3552
+ "kin:sog_kn": 6.0,
3553
+ "kin:rot_deg_min": 0,
3554
+ "kin:dynamics": "dynamics:cargo"
3555
+ },
3556
+ "geo": {
3557
+ "geo:rel_bearing_deg": 45.0
3558
+ },
3559
+ "hist": {
3560
+ "hist:was_overtaking": false,
3561
+ "hist:latched_at_s": null
3562
+ }
3563
+ },
3564
+ "other": {
3565
+ "fact": {
3566
+ "fact:propulsion": "propulsion:power",
3567
+ "fact:activity": "activity:ram",
3568
+ "fact:position": "position:underway",
3569
+ "fact:making_way": true,
3570
+ "fact:length_m": 65.0
3571
+ },
3572
+ "kin": {
3573
+ "kin:heading_deg": 285.0,
3574
+ "kin:sog_kn": 4.9,
3575
+ "kin:rot_deg_min": 0,
3576
+ "kin:dynamics": "dynamics:cargo"
3577
+ },
3578
+ "geo": {
3579
+ "geo:rel_bearing_deg": 300.0
3580
+ },
3581
+ "hist": {
3582
+ "hist:was_overtaking": false,
3583
+ "hist:latched_at_s": null
3584
+ }
3585
+ },
3586
+ "pair": {
3587
+ "geo": {
3588
+ "geo:range_m": 1500,
3589
+ "geo:cpa_m": 0,
3590
+ "geo:tcpa_s": 436,
3591
+ "geo:bearing_change_deg_min": 0.0,
3592
+ "geo:in_sight": true,
3593
+ "geo:risk_of_collision": true
3594
+ }
3595
+ }
3596
+ }
3597
+ }
3598
+ ],
3599
+ "override_note": "`expect` names every entry whose predicate the situation satisfies, including entries that a rel:overrides then displaces. Applicability and resolution are two steps: 18(a)(iv) really does apply to a WIG craft near the surface -- she is a power-driven vessel underway -- and 18(f)(i) overriding it is what the engine does next. A fixture that hid the overridden entry would make the override unobservable and the relation untestable.",
3600
+ "expect_scope": "`expect` names the non-`display` entries a situation selects -- `scope`, `precedence` and `classification`. Display entries are deliberately out of scope here: a situation carries `own.fact`, so every Part C entry that matches that vessel would otherwise have to be repeated in every Part B fixture, and fixtures/applicability-fixtures.json is already the contract for those. A situation fixture asserts what the pair produces, not what own shows.",
3601
+ "collapse_note": "Four expected ids changed in the PR that gave the predicate language `any_of` and `not`: `9b-small`/`9b-sail` collapsed to `9b` and `10j-small`/`10j-sail` to `10j`, because 9(b)'s and 10(j)'s disjunctive subjects no longer need an entry apiece. Every other expected id is unchanged. `18d1`'s expected modality moved from `shall-not-impede` to `shall-if-practicable`: the duty now lives in `effect.own` and the modality carries the 'if the circumstances of the case admit' caveat the entry used to drop.",
3602
+ "geometry_note": "The bearings, headings and speeds of every case that states its kinematics are a consistent set, and since the consistency check landed (Q-48, REQ-VERIFY-8) the suite enforces that rather than trusting the author. The two relative bearings are two readings of one line of sight, so own's bearing plus own's heading plus 180 equals the aspect plus the other's heading, modulo 360; where positions are stated they reproduce the range and both bearings; and the pair's cpa, tcpa and bearing rate are the ones the two headings and speeds produce, to the tolerances `data/facts.json` declares under `situation.geometry.consistency`. Positions are still omitted from the cases added with Rules 12-15: range and bearing are given directly, inventing a latitude to derive them from would assert more than the case knows, and the heading equation checks what the case does state. When the check landed every case that stated speeds failed the motion equations -- the pair numbers had been placeholders -- and they were re-derived; the head-on case was recast on a steady bearing and the 13(d) latch case lost `7d1`, both recorded in their narratives. Everything else, and every other expected id, is unchanged."
3603
+ }