colregs 0.3.1 → 0.3.2

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.
@@ -9,41 +9,41 @@
9
9
  "rel:overrides": "the superiority relation: the referencing norm's obligation displaces the referenced norm's when both apply"
10
10
  },
11
11
  "modalities": {
12
- "shall": "mandatory",
13
- "may": "permitted alternative",
14
- "shall-if-practicable": "mandatory where practicable, with a stated fallback",
15
- "conditional": "modality depends on facts; see modality_by",
16
- "exempt": "the entry relieves a requirement rather than imposing one",
17
- "shall-not": "mandatory prohibition",
18
- "shall-not-impede": "a distinct duty to avoid impeding another vessel, not a negated shall"
12
+ "modality:shall": "mandatory",
13
+ "modality:may": "permitted alternative",
14
+ "modality:shall-if-practicable": "mandatory where practicable, with a stated fallback",
15
+ "modality:conditional": "modality depends on facts; see modality_by",
16
+ "modality:exempt": "the entry relieves a requirement rather than imposing one",
17
+ "modality:shall-not": "mandatory prohibition",
18
+ "modality:shall-not-impede": "a distinct duty to avoid impeding another vessel, not a negated shall"
19
19
  },
20
20
  "categories": {
21
- "definition": "produces vocabulary; not evaluated",
22
- "standard": "produces technical values (ranges, heights); not evaluated",
23
- "scope": "reads visibility, in-sight, jurisdiction; the engine derives which sections apply",
24
- "display": "reads one vessel's facts; the engine derives signals and modality",
25
- "classification": "reads relative geometry and history; the engine derives encounter type and risk of collision",
26
- "precedence": "reads two vessels' facts plus encounter type; the engine derives give-way/stand-on/shall-not-impede/none",
27
- "conduct": "reads encounter, role, phase, kinematics and observations; monitored over a trace, not evaluated at a point",
28
- "care": "reads anything; produces residual responsibility; represented, never independently evaluated",
29
- "meta": "reads the region state; produces a banner and advisories; computed by a solver, reviewed by humans"
21
+ "category:definition": "produces vocabulary; not evaluated",
22
+ "category:standard": "produces technical values (ranges, heights); not evaluated",
23
+ "category:scope": "reads visibility, in-sight, jurisdiction; the engine derives which sections apply",
24
+ "category:display": "reads one vessel's facts; the engine derives signals and modality",
25
+ "category:classification": "reads relative geometry and history; the engine derives encounter type and risk of collision",
26
+ "category:precedence": "reads two vessels' facts plus encounter type; the engine derives give-way/stand-on/shall-not-impede/none",
27
+ "category:conduct": "reads encounter, role, phase, kinematics and observations; monitored over a trace, not evaluated at a point",
28
+ "category:care": "reads anything; produces residual responsibility; represented, never independently evaluated",
29
+ "category:meta": "reads the region state; produces a banner and advisories; computed by a solver, reviewed by humans"
30
30
  },
31
31
  "effects": {
32
- "note": "What a two-subject entry produces. `effect` is {\"own\": <role>, \"other\": <role>} for a `precedence` entry, {\"part\", \"section\", \"applies_rules\"} for a `scope` entry, and for a `classification` entry exactly one of {\"encounter\": <encounter>} or {\"risk_of_collision\": true}. A `display` entry has no `effect`; its output is `lights`. Roles and encounters are closed vocabularies and are not identifiers (docs/identifiers.md, 'What is not an identifier'). Pencil: ADR 0005 and docs/identifiers.md.",
32
+ "note": "What a two-subject entry produces. `effect` is {\"self\": <role>, \"other\": <role>} for a `category:precedence` entry, {\"part\", \"section\", \"applies_rules\"} for a `category:scope` entry, and for a `category:classification` entry exactly one of {\"encounter\": <encounter>} or {\"risk_of_collision\": true}. A `category:display` entry has no `effect`; its output is `lights`. Roles and encounters are closed vocabularies and are prefixed identifiers (`role:`, `encounter:`; docs/identifiers.md, 'The scheme'). Pencil: ADR 0005 and docs/identifiers.md.",
33
33
  "roles": {
34
- "give-way": "this subject shall keep out of the way of the other; Rule 16 governs the action",
35
- "stand-on": "this subject shall keep her course and speed; Rule 17 governs, including 17(a)(ii) and 17(b)",
36
- "shall-not-impede": "this subject shall not impede the other's passage or safe passage; Rule 8(f) governs, and by 8(f)(iii) it confers nothing on the other",
37
- "keep-clear": "this subject shall keep well clear of the other and avoid impeding her navigation, outside the give-way/stand-on pairing (18(e), 18(f)(i))",
38
- "none": "this paragraph confers no role on this subject. Recorded rather than omitted: `none` on the counterpart of a shall-not-impede duty is the content of 8(f)(iii), and `none` on both sides of a NUC/RAM pair is the content of Rule 18's partial order."
34
+ "role:give-way": "this subject shall keep out of the way of the other; Rule 16 governs the action",
35
+ "role:stand-on": "this subject shall keep her course and speed; Rule 17 governs, including 17(a)(ii) and 17(b)",
36
+ "role:shall-not-impede": "this subject shall not impede the other's passage or safe passage; Rule 8(f) governs, and by 8(f)(iii) it confers nothing on the other",
37
+ "role:keep-clear": "this subject shall keep well clear of the other and avoid impeding her navigation, outside the give-way/stand-on pairing (18(e), 18(f)(i))",
38
+ "role:none": "this paragraph confers no role on this subject. Recorded rather than omitted: `role:none` on the counterpart of a shall-not-impede duty is the content of 8(f)(iii), and `role:none` on both sides of a NUC/RAM pair is the content of Rule 18's partial order."
39
39
  },
40
40
  "encounters": {
41
- "head-on": "Rule 14: two power-driven vessels meeting on reciprocal or nearly reciprocal courses",
42
- "crossing": "Rule 15: two power-driven vessels crossing. The residual of the other three, derived with `not` rather than written as its own sector, so the four cannot drift apart",
43
- "overtaking": "Rule 13: one vessel coming up with another from more than 22.5 degrees abaft her beam, or latched there by 13(d)",
44
- "none": "no encounter of Section II's three types. Declared for completeness of the vocabulary; no entry produces it, because an encounter type is asserted by a paragraph and the absence of one is the absence of an entry, not an entry with a null value"
41
+ "encounter:head-on": "Rule 14: two power-driven vessels meeting on reciprocal or nearly reciprocal courses",
42
+ "encounter:crossing": "Rule 15: two power-driven vessels crossing. The residual of the other three, derived with `not` rather than written as its own sector, so the four cannot drift apart",
43
+ "encounter:overtaking": "Rule 13: one vessel coming up with another from more than 22.5 degrees abaft her beam, or held there by 13(d)'s overtaking history",
44
+ "encounter:none": "no encounter of Section II's three types. Declared for completeness of the vocabulary; no entry produces it, because an encounter type is asserted by a paragraph and the absence of one is the absence of an entry, not an entry with a null value"
45
45
  },
46
- "classification_shape": "A classification effect carries exactly one key: `encounter`, whose value is one of `encounters` above, or `risk_of_collision`, whose value is `true`. Two shapes rather than one because Rule 7(d) and Rules 13-15 answer two different questions -- does risk exist, and what kind of encounter is this -- and ADR 0005 gives both to `classification`. A single merged shape would have made every encounter entry state a risk it does not decide."
46
+ "classification_shape": "A classification effect carries exactly one key: `encounter`, whose value is one of `encounters` above, or `risk_of_collision`, whose value is `true`. Two shapes rather than one because Rule 7(d) and Rules 13-15 answer two different questions -- does risk exist, and what kind of encounter is this -- and ADR 0005 gives both to `category:classification`. A single merged shape would have made every encounter entry state a risk it does not decide."
47
47
  },
48
48
  "known_omissions": [
49
49
  {
@@ -74,17 +74,17 @@
74
74
  {
75
75
  "cite": "9(d)",
76
76
  "what": "A vessel shall not cross a narrow channel or fairway if such crossing impedes the passage of a vessel which can safely navigate only within that channel.",
77
- "why": "The duty is conditioned on own crossing the channel, which is a relation between own's heading and the channel's axis. Neither the channel's axis nor 'crossing it' is a fact this package carries, and `pair:env:narrow_channel` is a boolean about the place, not a geometry. No entry rather than an entry whose predicate is not the paragraph's."
77
+ "why": "The duty is conditioned on self crossing the channel, which is a relation between self's heading and the channel's axis. Neither the channel's axis nor 'crossing it' is a fact this package carries, and `pair:env:narrow_channel` is a boolean about the place, not a geometry. No entry rather than an entry whose predicate is not the paragraph's."
78
78
  },
79
79
  {
80
80
  "cite": "18(d)(ii)",
81
81
  "what": "A vessel constrained by her draft shall navigate with particular caution having full regard to her special condition.",
82
- "why": "`conduct`, not `precedence`: it prescribes a manner of navigating rather than a role in a pair, and conduct is monitored over a trace rather than evaluated at a point (ADR 0005 sec. 1). No conduct entry shape exists yet."
82
+ "why": "`category:conduct`, not `category:precedence`: it prescribes a manner of navigating rather than a role in a pair, and conduct is monitored over a trace rather than evaluated at a point (ADR 0005 sec. 1). No conduct entry shape exists yet."
83
83
  },
84
84
  {
85
85
  "cite": "18(e)",
86
86
  "what": "A seaplane on the water shall in general keep well clear of all vessels and avoid impeding their navigation; where risk of collision exists she shall comply with Rules 4-19.",
87
- "why": "There is no fact for being a seaplane. `fact:propulsion` has power, sail and oars, and Rule 3(a) makes a seaplane a vessel without giving the fact record anywhere to say so. The effect vocabulary has `keep-clear` for it; the predicate does not exist."
87
+ "why": "There is no fact for being a seaplane. `fact:propulsion` has power, sail and oars, and Rule 3(a) makes a seaplane a vessel without giving the fact record anywhere to say so. The effect vocabulary has `role:keep-clear` for it; the predicate does not exist."
88
88
  },
89
89
  {
90
90
  "cite": "18(f)(ii)",
@@ -93,7 +93,7 @@
93
93
  },
94
94
  {
95
95
  "cite": "1(a), 1(b), 1(c), 1(d), 1(e), 20(b), 20(c)",
96
- "what": "The remaining `scope` paragraphs: the waters the Rules apply to, special rules made by an authority, the adoption of traffic separation schemes, the special-construction determination, and the sunset-to-sunrise and restricted-visibility gates on the light rules.",
96
+ "what": "The remaining `category:scope` paragraphs: the waters the Rules apply to, special rules made by an authority, the adoption of traffic separation schemes, the special-construction determination, and the sunset-to-sunrise and restricted-visibility gates on the light rules.",
97
97
  "why": "None of them reads a fact this package declares. 1(a) needs a fact about the waters; 1(b)/(c)/(e) are about an authority's determination, which is closer to the jurisdiction dimension of ADR 0001 than to a predicate; 1(d) is not addressed to a vessel at all; 20(b)/(c) need time of day and visibility, and applicability.json's `conditions` note already records that night is assumed rather than gated. Deferred to a later PR with 4, 11 and 19(a) landing first."
98
98
  },
99
99
  {
@@ -109,7 +109,7 @@
109
109
  {
110
110
  "cite": "14(a)",
111
111
  "what": "When two power-driven vessels are meeting on reciprocal or nearly reciprocal courses so as to involve risk of collision each shall alter her course to starboard so that each shall pass on the port side of the other.",
112
- "why": "`conduct`, not `classification`: the paragraph states the situation in words and prescribes the action, and 14(b) is the paragraph that deems the situation to exist -- entry rule:14b cites it. The action is monitored over a trace rather than evaluated at a point (ADR 0005 sec. 1), and no conduct entry shape exists yet. Q-45."
112
+ "why": "`category:conduct`, not `category:classification`: the paragraph states the situation in words and prescribes the action, and 14(b) is the paragraph that deems the situation to exist -- entry rule:14b cites it. The action is monitored over a trace rather than evaluated at a point (ADR 0005 sec. 1), and no conduct entry shape exists yet. Q-45."
113
113
  }
114
114
  ],
115
115
  "represented_paragraphs": [
@@ -117,14 +117,14 @@
117
117
  "id": "rule:2a",
118
118
  "jurisdiction": "intl",
119
119
  "cite": "2(a)",
120
- "category": "care",
120
+ "category": "category:care",
121
121
  "note": "Residual responsibility for every other paragraph; nothing in this package discharges it, so it is recorded rather than dropped from the model."
122
122
  },
123
123
  {
124
124
  "id": "rule:2b",
125
125
  "jurisdiction": "intl",
126
126
  "cite": "2(b)",
127
- "category": "meta",
127
+ "category": "category:meta",
128
128
  "note": "Names the region where a departure from the Rules may be necessary; scoped to level-1/2 invariant violations and computed offline by a solver as a region of situation space, never evaluated here as a predicate."
129
129
  }
130
130
  ],
@@ -145,7 +145,7 @@
145
145
  "count": 1
146
146
  }
147
147
  ],
148
- "modality": "shall",
148
+ "modality": "modality:shall",
149
149
  "images": [
150
150
  "NRHB_23_a.png"
151
151
  ]
@@ -166,7 +166,7 @@
166
166
  "count": 1
167
167
  }
168
168
  ],
169
- "modality": "conditional",
169
+ "modality": "modality:conditional",
170
170
  "modality_by": [
171
171
  {
172
172
  "when": {
@@ -174,7 +174,7 @@
174
174
  "gte": 50
175
175
  }
176
176
  },
177
- "modality": "shall"
177
+ "modality": "modality:shall"
178
178
  },
179
179
  {
180
180
  "when": {
@@ -182,7 +182,7 @@
182
182
  "lt": 50
183
183
  }
184
184
  },
185
- "modality": "may"
185
+ "modality": "modality:may"
186
186
  }
187
187
  ],
188
188
  "images": [
@@ -207,7 +207,7 @@
207
207
  "light": "light:sternlight"
208
208
  }
209
209
  ],
210
- "modality": "shall"
210
+ "modality": "modality:shall"
211
211
  },
212
212
  {
213
213
  "id": "rule:23b",
@@ -232,7 +232,7 @@
232
232
  "rule:23a_ii",
233
233
  "rule:23a_iii_iv"
234
234
  ],
235
- "modality": "shall",
235
+ "modality": "modality:shall",
236
236
  "images": [
237
237
  "NRHB_23_b.png"
238
238
  ],
@@ -263,7 +263,7 @@
263
263
  "rule:23a_ii",
264
264
  "rule:23a_iii_iv"
265
265
  ],
266
- "modality": "shall",
266
+ "modality": "modality:shall",
267
267
  "notes": "Only when taking off, landing and in flight near the surface."
268
268
  },
269
269
  {
@@ -293,7 +293,7 @@
293
293
  "rule:23a_ii",
294
294
  "rule:23a_iii_iv"
295
295
  ],
296
- "modality": "may",
296
+ "modality": "modality:may",
297
297
  "images": [
298
298
  "NRHB_23_di.png"
299
299
  ]
@@ -321,7 +321,7 @@
321
321
  },
322
322
  {
323
323
  "light": "light:sidelights",
324
- "modality": "shall-if-practicable"
324
+ "modality": "modality:shall-if-practicable"
325
325
  }
326
326
  ],
327
327
  "rel:in_lieu_of": [
@@ -329,7 +329,7 @@
329
329
  "rule:23a_ii",
330
330
  "rule:23a_iii_iv"
331
331
  ],
332
- "modality": "may",
332
+ "modality": "modality:may",
333
333
  "images": [
334
334
  "NRHB_23_Intl_dii.png"
335
335
  ],
@@ -356,7 +356,7 @@
356
356
  "rule:23a_i",
357
357
  "rule:23a_ii"
358
358
  ],
359
- "modality": "shall",
359
+ "modality": "modality:shall",
360
360
  "images": [
361
361
  "NRHB_24_a.png"
362
362
  ]
@@ -382,7 +382,7 @@
382
382
  "rule:23a_i",
383
383
  "rule:23a_ii"
384
384
  ],
385
- "modality": "shall",
385
+ "modality": "modality:shall",
386
386
  "images": [
387
387
  "NRHB_24_av.png"
388
388
  ]
@@ -411,7 +411,7 @@
411
411
  ]
412
412
  }
413
413
  ],
414
- "modality": "shall",
414
+ "modality": "modality:shall",
415
415
  "images": [
416
416
  "NRHB_24_a.png"
417
417
  ]
@@ -437,7 +437,7 @@
437
437
  ]
438
438
  }
439
439
  ],
440
- "modality": "shall",
440
+ "modality": "modality:shall",
441
441
  "images": [
442
442
  "NRHB_23_a.png"
443
443
  ],
@@ -472,7 +472,7 @@
472
472
  "rule:23a_i",
473
473
  "rule:23a_ii"
474
474
  ],
475
- "modality": "shall",
475
+ "modality": "modality:shall",
476
476
  "notes": "Also covers towing alongside (towed_alongside=true)."
477
477
  },
478
478
  {
@@ -490,7 +490,7 @@
490
490
  "light": "light:sternlight"
491
491
  }
492
492
  ],
493
- "modality": "shall",
493
+ "modality": "modality:shall",
494
494
  "images": [
495
495
  "NRHB_24_e.png"
496
496
  ],
@@ -513,7 +513,7 @@
513
513
  "light": "light:sternlight"
514
514
  }
515
515
  ],
516
- "modality": "shall",
516
+ "modality": "modality:shall",
517
517
  "images": [
518
518
  "NRHB_25_a.png"
519
519
  ]
@@ -548,7 +548,7 @@
548
548
  "rel:excludes": [
549
549
  "rule:25c"
550
550
  ],
551
- "modality": "may",
551
+ "modality": "modality:may",
552
552
  "images": [
553
553
  "NRHB_25_b.png"
554
554
  ],
@@ -583,7 +583,7 @@
583
583
  "rel:excludes": [
584
584
  "rule:25b"
585
585
  ],
586
- "modality": "may",
586
+ "modality": "modality:may",
587
587
  "images": [
588
588
  "NRHB_25_c.png"
589
589
  ]
@@ -612,7 +612,7 @@
612
612
  "rule:25a",
613
613
  "rule:25b"
614
614
  ],
615
- "modality": "shall-if-practicable",
615
+ "modality": "modality:shall-if-practicable",
616
616
  "images": [
617
617
  "NRHB_25_d.png"
618
618
  ],
@@ -641,7 +641,7 @@
641
641
  ]
642
642
  }
643
643
  ],
644
- "modality": "may",
644
+ "modality": "modality:may",
645
645
  "images": [
646
646
  "NRHB_25_dii.png"
647
647
  ],
@@ -675,7 +675,7 @@
675
675
  "rule:30a",
676
676
  "rule:30b"
677
677
  ],
678
- "modality": "shall",
678
+ "modality": "modality:shall",
679
679
  "images": [
680
680
  "NRHB_26_b.png"
681
681
  ],
@@ -698,7 +698,7 @@
698
698
  "count": 1
699
699
  }
700
700
  ],
701
- "modality": "conditional",
701
+ "modality": "modality:conditional",
702
702
  "modality_by": [
703
703
  {
704
704
  "when": {
@@ -706,7 +706,7 @@
706
706
  "gte": 50
707
707
  }
708
708
  },
709
- "modality": "shall"
709
+ "modality": "modality:shall"
710
710
  },
711
711
  {
712
712
  "when": {
@@ -714,7 +714,7 @@
714
714
  "lt": 50
715
715
  }
716
716
  },
717
- "modality": "may"
717
+ "modality": "modality:may"
718
718
  }
719
719
  ]
720
720
  },
@@ -730,7 +730,7 @@
730
730
  "rel:includes": [
731
731
  "rule:23a_iii_iv"
732
732
  ],
733
- "modality": "shall",
733
+ "modality": "modality:shall",
734
734
  "images": [
735
735
  "NRHB_26_biii.png"
736
736
  ]
@@ -763,7 +763,7 @@
763
763
  "rule:30a",
764
764
  "rule:30b"
765
765
  ],
766
- "modality": "shall"
766
+ "modality": "modality:shall"
767
767
  },
768
768
  {
769
769
  "id": "rule:26c_ii",
@@ -786,7 +786,7 @@
786
786
  "position": "in the direction of the gear"
787
787
  }
788
788
  ],
789
- "modality": "shall"
789
+ "modality": "modality:shall"
790
790
  },
791
791
  {
792
792
  "id": "rule:26c_iii",
@@ -800,7 +800,7 @@
800
800
  "rel:includes": [
801
801
  "rule:23a_iii_iv"
802
802
  ],
803
- "modality": "shall",
803
+ "modality": "modality:shall",
804
804
  "images": [
805
805
  "NRHB_26_ciii.png"
806
806
  ]
@@ -821,7 +821,7 @@
821
821
  "arrangement": "vertical"
822
822
  }
823
823
  ],
824
- "modality": "shall",
824
+ "modality": "modality:shall",
825
825
  "images": [
826
826
  "NRHB_27_a.png"
827
827
  ]
@@ -838,7 +838,7 @@
838
838
  "rel:includes": [
839
839
  "rule:23a_iii_iv"
840
840
  ],
841
- "modality": "shall",
841
+ "modality": "modality:shall",
842
842
  "images": [
843
843
  "NRHB_27_aiii.png"
844
844
  ]
@@ -870,7 +870,7 @@
870
870
  "position": "lower"
871
871
  }
872
872
  ],
873
- "modality": "shall",
873
+ "modality": "modality:shall",
874
874
  "notes": "Except a vessel engaged in mine clearance operations (27(f))."
875
875
  },
876
876
  {
@@ -887,7 +887,7 @@
887
887
  "rule:23a_ii",
888
888
  "rule:23a_iii_iv"
889
889
  ],
890
- "modality": "shall",
890
+ "modality": "modality:shall",
891
891
  "images": [
892
892
  "NRHB_27_biii.png"
893
893
  ]
@@ -909,7 +909,7 @@
909
909
  ]
910
910
  }
911
911
  ],
912
- "modality": "shall",
912
+ "modality": "modality:shall",
913
913
  "images": [
914
914
  "NRHB_27_biv.png"
915
915
  ]
@@ -941,7 +941,7 @@
941
941
  "rel:includes": [
942
942
  "rule:27b_i"
943
943
  ],
944
- "modality": "shall",
944
+ "modality": "modality:shall",
945
945
  "images": [
946
946
  "NRHB_27_d.png",
947
947
  "NRHB_27_diii.png"
@@ -978,7 +978,7 @@
978
978
  "rel:in_lieu_of": [
979
979
  "rule:27d"
980
980
  ],
981
- "modality": "shall",
981
+ "modality": "modality:shall",
982
982
  "notes": "Only when the vessel's size makes the full 27(d) display impracticable."
983
983
  },
984
984
  {
@@ -1019,7 +1019,7 @@
1019
1019
  "cite": "27(f)"
1020
1020
  }
1021
1021
  ],
1022
- "modality": "shall",
1022
+ "modality": "modality:shall",
1023
1023
  "images": [
1024
1024
  "NRHB_27_f.png"
1025
1025
  ],
@@ -1046,7 +1046,7 @@
1046
1046
  "rule:23a_ii",
1047
1047
  "rule:23a_iii_iv"
1048
1048
  ],
1049
- "modality": "may",
1049
+ "modality": "modality:may",
1050
1050
  "images": [
1051
1051
  "NRHB_28.png"
1052
1052
  ],
@@ -1094,7 +1094,7 @@
1094
1094
  "cite": "29(a)(iii)"
1095
1095
  }
1096
1096
  ],
1097
- "modality": "shall",
1097
+ "modality": "modality:shall",
1098
1098
  "images": [
1099
1099
  "NRHB_29_a.png",
1100
1100
  "NRHB_29_aiii.png"
@@ -1121,7 +1121,7 @@
1121
1121
  "position": "at or near the stern, at a lower level than the fore one"
1122
1122
  }
1123
1123
  ],
1124
- "modality": "shall",
1124
+ "modality": "modality:shall",
1125
1125
  "images": [
1126
1126
  "NRHB_30_d.png"
1127
1127
  ]
@@ -1147,7 +1147,7 @@
1147
1147
  "rel:in_lieu_of": [
1148
1148
  "rule:30a"
1149
1149
  ],
1150
- "modality": "may",
1150
+ "modality": "modality:may",
1151
1151
  "images": [
1152
1152
  "NRHB_30_a.png"
1153
1153
  ]
@@ -1165,7 +1165,7 @@
1165
1165
  "note": "available working or equivalent lights to illuminate her decks"
1166
1166
  }
1167
1167
  ],
1168
- "modality": "conditional",
1168
+ "modality": "modality:conditional",
1169
1169
  "modality_by": [
1170
1170
  {
1171
1171
  "when": {
@@ -1173,7 +1173,7 @@
1173
1173
  "gte": 100
1174
1174
  }
1175
1175
  },
1176
- "modality": "shall"
1176
+ "modality": "modality:shall"
1177
1177
  },
1178
1178
  {
1179
1179
  "when": {
@@ -1181,7 +1181,7 @@
1181
1181
  "lt": 100
1182
1182
  }
1183
1183
  },
1184
- "modality": "may"
1184
+ "modality": "modality:may"
1185
1185
  }
1186
1186
  ]
1187
1187
  },
@@ -1201,7 +1201,7 @@
1201
1201
  ]
1202
1202
  }
1203
1203
  ],
1204
- "modality": "shall",
1204
+ "modality": "modality:shall",
1205
1205
  "notes": "30(d)'s lead-in requires the 30(a)/(b) anchor lights unconditionally, with no length gate; only the two red lights below (30(d)(i)-(ii)) are subject to the 30(f) exemption."
1206
1206
  },
1207
1207
  {
@@ -1222,7 +1222,7 @@
1222
1222
  "arrangement": "vertical"
1223
1223
  }
1224
1224
  ],
1225
- "modality": "shall-if-practicable",
1225
+ "modality": "modality:shall-if-practicable",
1226
1226
  "images": [
1227
1227
  "NRHB_30_dii.png"
1228
1228
  ],
@@ -1244,16 +1244,16 @@
1244
1244
  "rule:30a",
1245
1245
  "rule:30b"
1246
1246
  ],
1247
- "modality": "exempt"
1247
+ "modality": "modality:exempt"
1248
1248
  },
1249
1249
  {
1250
1250
  "id": "rule:4",
1251
1251
  "jurisdiction": "intl",
1252
1252
  "cite": "4",
1253
- "category": "scope",
1253
+ "category": "category:scope",
1254
1254
  "subjects": 2,
1255
1255
  "when": {},
1256
- "modality": "shall",
1256
+ "modality": "modality:shall",
1257
1257
  "effect": {
1258
1258
  "part": "B",
1259
1259
  "section": "I",
@@ -1273,12 +1273,12 @@
1273
1273
  "id": "rule:11",
1274
1274
  "jurisdiction": "intl",
1275
1275
  "cite": "11",
1276
- "category": "scope",
1276
+ "category": "category:scope",
1277
1277
  "subjects": 2,
1278
1278
  "when": {
1279
1279
  "pair:geo:in_sight": true
1280
1280
  },
1281
- "modality": "shall",
1281
+ "modality": "modality:shall",
1282
1282
  "effect": {
1283
1283
  "part": "B",
1284
1284
  "section": "II",
@@ -1299,12 +1299,12 @@
1299
1299
  "id": "rule:19a",
1300
1300
  "jurisdiction": "intl",
1301
1301
  "cite": "19(a)",
1302
- "category": "scope",
1302
+ "category": "category:scope",
1303
1303
  "subjects": 2,
1304
1304
  "when": {
1305
1305
  "pair:geo:in_sight": false
1306
1306
  },
1307
- "modality": "shall",
1307
+ "modality": "modality:shall",
1308
1308
  "effect": {
1309
1309
  "part": "B",
1310
1310
  "section": "III",
@@ -1319,116 +1319,116 @@
1319
1319
  "id": "rule:18a_i",
1320
1320
  "jurisdiction": "intl",
1321
1321
  "cite": "18(a)(i)",
1322
- "category": "precedence",
1322
+ "category": "category:precedence",
1323
1323
  "subjects": 2,
1324
1324
  "when": {
1325
- "own:fact:propulsion": "propulsion:power",
1326
- "own:fact:rule18_class": {
1325
+ "self:fact:propulsion": "propulsion:power",
1326
+ "self:fact:rule18_class": {
1327
1327
  "not": [
1328
1328
  "rule18_class:nuc",
1329
1329
  "rule18_class:ram",
1330
1330
  "rule18_class:fishing"
1331
1331
  ]
1332
1332
  },
1333
- "own:fact:position": "position:underway",
1333
+ "self:fact:position": "position:underway",
1334
1334
  "other:fact:rule18_class": "rule18_class:nuc",
1335
1335
  "other:fact:position": "position:underway",
1336
1336
  "pair:geo:in_sight": true
1337
1337
  },
1338
- "modality": "shall",
1338
+ "modality": "modality:shall",
1339
1339
  "effect": {
1340
- "own": "give-way",
1341
- "other": "stand-on"
1340
+ "self": "role:give-way",
1341
+ "other": "role:stand-on"
1342
1342
  },
1343
1343
  "rel:overrides": [
1344
1344
  "rule:15a:keep_out_of_the_way"
1345
1345
  ],
1346
- "note": "Own is 'a power-driven vessel underway' (18(a)) that is not herself ranked by Rule 18 -- written as the negation the paragraph implies rather than as an enumeration of activity values that had to be edited every time the axis grew (Q-33). A vessel constrained by her draught and a WIG craft on the surface are both power-driven and both stay inside it, which is why the gate is `fact:propulsion` plus the negated rank and not `rule18_class:power`: 18(d) protects a CBD vessel, it does not exempt her from 18(a). Overrides `rule:15a:keep_out_of_the_way` (Q-40): own and a vessel not under command are both power-driven vessels by 3(b) whenever her machinery is in use, so 15(a) is in force between them as well and would hand the give-way role to whichever has the other on her starboard side, rank or no rank. Rule 18's opening words except Rules 9, 10 and 13 and no others, so this paragraph displaces it."
1346
+ "note": "Self is 'a power-driven vessel underway' (18(a)) that is not herself ranked by Rule 18 -- written as the negation the paragraph implies rather than as an enumeration of activity values that had to be edited every time the axis grew (Q-33). A vessel constrained by her draught and a WIG craft on the surface are both power-driven and both stay inside it, which is why the gate is `fact:propulsion` plus the negated rank and not `rule18_class:power`: 18(d) protects a CBD vessel, it does not exempt her from 18(a). Overrides `rule:15a:keep_out_of_the_way` (Q-40): self and a vessel not under command are both power-driven vessels by 3(b) whenever her machinery is in use, so 15(a) is in force between them as well and would hand the give-way role to whichever has the other on her starboard side, rank or no rank. Rule 18's opening words except Rules 9, 10 and 13 and no others, so this paragraph displaces it."
1347
1347
  },
1348
1348
  {
1349
1349
  "id": "rule:18a_ii",
1350
1350
  "jurisdiction": "intl",
1351
1351
  "cite": "18(a)(ii)",
1352
- "category": "precedence",
1352
+ "category": "category:precedence",
1353
1353
  "subjects": 2,
1354
1354
  "when": {
1355
- "own:fact:propulsion": "propulsion:power",
1356
- "own:fact:rule18_class": {
1355
+ "self:fact:propulsion": "propulsion:power",
1356
+ "self:fact:rule18_class": {
1357
1357
  "not": [
1358
1358
  "rule18_class:nuc",
1359
1359
  "rule18_class:ram",
1360
1360
  "rule18_class:fishing"
1361
1361
  ]
1362
1362
  },
1363
- "own:fact:position": "position:underway",
1363
+ "self:fact:position": "position:underway",
1364
1364
  "other:fact:rule18_class": "rule18_class:ram",
1365
1365
  "other:fact:position": "position:underway",
1366
1366
  "pair:geo:in_sight": true
1367
1367
  },
1368
- "modality": "shall",
1368
+ "modality": "modality:shall",
1369
1369
  "effect": {
1370
- "own": "give-way",
1371
- "other": "stand-on"
1370
+ "self": "role:give-way",
1371
+ "other": "role:stand-on"
1372
1372
  },
1373
1373
  "rel:overrides": [
1374
1374
  "rule:15a:keep_out_of_the_way"
1375
1375
  ],
1376
- "note": "Mine clearance (27(f)) and diving (27(e)) reach this entry through `rule18_class:ram`, which decodes them by 3(g), instead of being listed here by hand. That is the display/rank divergence Q-32 named, moved into facts.json. Overrides `rule:15a:keep_out_of_the_way` (Q-40): own and a vessel restricted in her ability to manoeuvre are both power-driven vessels by 3(b) whenever her machinery is in use, so 15(a) is in force between them as well and would hand the give-way role to whichever has the other on her starboard side, rank or no rank. Rule 18's opening words except Rules 9, 10 and 13 and no others, so this paragraph displaces it."
1376
+ "note": "Mine clearance (27(f)) and diving (27(e)) reach this entry through `rule18_class:ram`, which decodes them by 3(g), instead of being listed here by hand. That is the display/rank divergence Q-32 named, moved into facts.json. Overrides `rule:15a:keep_out_of_the_way` (Q-40): self and a vessel restricted in her ability to manoeuvre are both power-driven vessels by 3(b) whenever her machinery is in use, so 15(a) is in force between them as well and would hand the give-way role to whichever has the other on her starboard side, rank or no rank. Rule 18's opening words except Rules 9, 10 and 13 and no others, so this paragraph displaces it."
1377
1377
  },
1378
1378
  {
1379
1379
  "id": "rule:18a_iii",
1380
1380
  "jurisdiction": "intl",
1381
1381
  "cite": "18(a)(iii)",
1382
- "category": "precedence",
1382
+ "category": "category:precedence",
1383
1383
  "subjects": 2,
1384
1384
  "when": {
1385
- "own:fact:propulsion": "propulsion:power",
1386
- "own:fact:rule18_class": {
1385
+ "self:fact:propulsion": "propulsion:power",
1386
+ "self:fact:rule18_class": {
1387
1387
  "not": [
1388
1388
  "rule18_class:nuc",
1389
1389
  "rule18_class:ram",
1390
1390
  "rule18_class:fishing"
1391
1391
  ]
1392
1392
  },
1393
- "own:fact:position": "position:underway",
1393
+ "self:fact:position": "position:underway",
1394
1394
  "other:fact:rule18_class": "rule18_class:fishing",
1395
1395
  "other:fact:position": "position:underway",
1396
1396
  "pair:geo:in_sight": true
1397
1397
  },
1398
- "modality": "shall",
1398
+ "modality": "modality:shall",
1399
1399
  "effect": {
1400
- "own": "give-way",
1401
- "other": "stand-on"
1400
+ "self": "role:give-way",
1401
+ "other": "role:stand-on"
1402
1402
  },
1403
1403
  "rel:overrides": [
1404
1404
  "rule:15a:keep_out_of_the_way"
1405
1405
  ],
1406
- "note": "`activity:trawling` reaches this entry through the class decode rather than by being listed beside `activity:fishing`; a fishing vessel under sail is `rule18_class:fishing` too, which is 18(c)'s reading of the axis. Overrides `rule:15a:keep_out_of_the_way` (Q-40): own and a vessel engaged in fishing are both power-driven vessels by 3(b) whenever her machinery is in use, so 15(a) is in force between them as well and would hand the give-way role to whichever has the other on her starboard side, rank or no rank. Rule 18's opening words except Rules 9, 10 and 13 and no others, so this paragraph displaces it."
1406
+ "note": "`activity:trawling` reaches this entry through the class decode rather than by being listed beside `activity:fishing`; a fishing vessel under sail is `rule18_class:fishing` too, which is 18(c)'s reading of the axis. Overrides `rule:15a:keep_out_of_the_way` (Q-40): self and a vessel engaged in fishing are both power-driven vessels by 3(b) whenever her machinery is in use, so 15(a) is in force between them as well and would hand the give-way role to whichever has the other on her starboard side, rank or no rank. Rule 18's opening words except Rules 9, 10 and 13 and no others, so this paragraph displaces it."
1407
1407
  },
1408
1408
  {
1409
1409
  "id": "rule:18a_iv",
1410
1410
  "jurisdiction": "intl",
1411
1411
  "cite": "18(a)(iv)",
1412
- "category": "precedence",
1412
+ "category": "category:precedence",
1413
1413
  "subjects": 2,
1414
1414
  "when": {
1415
- "own:fact:propulsion": "propulsion:power",
1416
- "own:fact:rule18_class": {
1415
+ "self:fact:propulsion": "propulsion:power",
1416
+ "self:fact:rule18_class": {
1417
1417
  "not": [
1418
1418
  "rule18_class:nuc",
1419
1419
  "rule18_class:ram",
1420
1420
  "rule18_class:fishing"
1421
1421
  ]
1422
1422
  },
1423
- "own:fact:position": "position:underway",
1423
+ "self:fact:position": "position:underway",
1424
1424
  "other:fact:rule18_class": "rule18_class:sail",
1425
1425
  "other:fact:position": "position:underway",
1426
1426
  "pair:geo:in_sight": true
1427
1427
  },
1428
- "modality": "shall",
1428
+ "modality": "modality:shall",
1429
1429
  "effect": {
1430
- "own": "give-way",
1431
- "other": "stand-on"
1430
+ "self": "role:give-way",
1431
+ "other": "role:stand-on"
1432
1432
  },
1433
1433
  "note": "A sailing vessel that is also fishing decodes to `rule18_class:fishing` and is ranked by 18(a)(iii), so the class alone carries what the old predicate needed a propulsion gate and an activity list to say."
1434
1434
  },
@@ -1436,44 +1436,44 @@
1436
1436
  "id": "rule:18b_i",
1437
1437
  "jurisdiction": "intl",
1438
1438
  "cite": "18(b)(i)",
1439
- "category": "precedence",
1439
+ "category": "category:precedence",
1440
1440
  "subjects": 2,
1441
1441
  "when": {
1442
- "own:fact:rule18_class": "rule18_class:sail",
1443
- "own:fact:position": "position:underway",
1442
+ "self:fact:rule18_class": "rule18_class:sail",
1443
+ "self:fact:position": "position:underway",
1444
1444
  "other:fact:rule18_class": "rule18_class:nuc",
1445
1445
  "other:fact:position": "position:underway",
1446
1446
  "pair:geo:in_sight": true
1447
1447
  },
1448
- "modality": "shall",
1448
+ "modality": "modality:shall",
1449
1449
  "effect": {
1450
- "own": "give-way",
1451
- "other": "stand-on"
1450
+ "self": "role:give-way",
1451
+ "other": "role:stand-on"
1452
1452
  },
1453
1453
  "rel:overrides": [
1454
1454
  "rule:12a_i",
1455
1455
  "rule:12a_ii",
1456
1456
  "rule:12a_iii"
1457
1457
  ],
1458
- "note": "Own is `rule18_class:sail`, which is 3(c)'s sailing vessel and not a fishing vessel under sail -- the class carries both halves of what the propulsion gate and the activity list used to say between them. Overrides the three Rule 12 entries (Q-40): both subjects can be sailing vessels by 3(c) -- the other under sail and not under command, restricted in her ability to manoeuvre, or engaged in fishing -- so Rule 12 is in force between them too, and Rule 18's chapeau excepts only Rules 9, 10 and 13."
1458
+ "note": "Self is `rule18_class:sail`, which is 3(c)'s sailing vessel and not a fishing vessel under sail -- the class carries both halves of what the propulsion gate and the activity list used to say between them. Overrides the three Rule 12 entries (Q-40): both subjects can be sailing vessels by 3(c) -- the other under sail and not under command, restricted in her ability to manoeuvre, or engaged in fishing -- so Rule 12 is in force between them too, and Rule 18's chapeau excepts only Rules 9, 10 and 13."
1459
1459
  },
1460
1460
  {
1461
1461
  "id": "rule:18b_ii",
1462
1462
  "jurisdiction": "intl",
1463
1463
  "cite": "18(b)(ii)",
1464
- "category": "precedence",
1464
+ "category": "category:precedence",
1465
1465
  "subjects": 2,
1466
1466
  "when": {
1467
- "own:fact:rule18_class": "rule18_class:sail",
1468
- "own:fact:position": "position:underway",
1467
+ "self:fact:rule18_class": "rule18_class:sail",
1468
+ "self:fact:position": "position:underway",
1469
1469
  "other:fact:rule18_class": "rule18_class:ram",
1470
1470
  "other:fact:position": "position:underway",
1471
1471
  "pair:geo:in_sight": true
1472
1472
  },
1473
- "modality": "shall",
1473
+ "modality": "modality:shall",
1474
1474
  "effect": {
1475
- "own": "give-way",
1476
- "other": "stand-on"
1475
+ "self": "role:give-way",
1476
+ "other": "role:stand-on"
1477
1477
  },
1478
1478
  "rel:overrides": [
1479
1479
  "rule:12a_i",
@@ -1486,19 +1486,19 @@
1486
1486
  "id": "rule:18b_iii",
1487
1487
  "jurisdiction": "intl",
1488
1488
  "cite": "18(b)(iii)",
1489
- "category": "precedence",
1489
+ "category": "category:precedence",
1490
1490
  "subjects": 2,
1491
1491
  "when": {
1492
- "own:fact:rule18_class": "rule18_class:sail",
1493
- "own:fact:position": "position:underway",
1492
+ "self:fact:rule18_class": "rule18_class:sail",
1493
+ "self:fact:position": "position:underway",
1494
1494
  "other:fact:rule18_class": "rule18_class:fishing",
1495
1495
  "other:fact:position": "position:underway",
1496
1496
  "pair:geo:in_sight": true
1497
1497
  },
1498
- "modality": "shall",
1498
+ "modality": "modality:shall",
1499
1499
  "effect": {
1500
- "own": "give-way",
1501
- "other": "stand-on"
1500
+ "self": "role:give-way",
1501
+ "other": "role:stand-on"
1502
1502
  },
1503
1503
  "rel:overrides": [
1504
1504
  "rule:12a_i",
@@ -1511,19 +1511,19 @@
1511
1511
  "id": "rule:18c_i",
1512
1512
  "jurisdiction": "intl",
1513
1513
  "cite": "18(c)(i)",
1514
- "category": "precedence",
1514
+ "category": "category:precedence",
1515
1515
  "subjects": 2,
1516
1516
  "when": {
1517
- "own:fact:rule18_class": "rule18_class:fishing",
1518
- "own:fact:position": "position:underway",
1517
+ "self:fact:rule18_class": "rule18_class:fishing",
1518
+ "self:fact:position": "position:underway",
1519
1519
  "other:fact:rule18_class": "rule18_class:nuc",
1520
1520
  "other:fact:position": "position:underway",
1521
1521
  "pair:geo:in_sight": true
1522
1522
  },
1523
- "modality": "shall-if-practicable",
1523
+ "modality": "modality:shall-if-practicable",
1524
1524
  "effect": {
1525
- "own": "give-way",
1526
- "other": "stand-on"
1525
+ "self": "role:give-way",
1526
+ "other": "role:stand-on"
1527
1527
  },
1528
1528
  "rel:overrides": [
1529
1529
  "rule:12a_i",
@@ -1537,19 +1537,19 @@
1537
1537
  "id": "rule:18c_ii",
1538
1538
  "jurisdiction": "intl",
1539
1539
  "cite": "18(c)(ii)",
1540
- "category": "precedence",
1540
+ "category": "category:precedence",
1541
1541
  "subjects": 2,
1542
1542
  "when": {
1543
- "own:fact:rule18_class": "rule18_class:fishing",
1544
- "own:fact:position": "position:underway",
1543
+ "self:fact:rule18_class": "rule18_class:fishing",
1544
+ "self:fact:position": "position:underway",
1545
1545
  "other:fact:rule18_class": "rule18_class:ram",
1546
1546
  "other:fact:position": "position:underway",
1547
1547
  "pair:geo:in_sight": true
1548
1548
  },
1549
- "modality": "shall-if-practicable",
1549
+ "modality": "modality:shall-if-practicable",
1550
1550
  "effect": {
1551
- "own": "give-way",
1552
- "other": "stand-on"
1551
+ "self": "role:give-way",
1552
+ "other": "role:stand-on"
1553
1553
  },
1554
1554
  "rel:overrides": [
1555
1555
  "rule:12a_i",
@@ -1563,44 +1563,44 @@
1563
1563
  "id": "rule:18d_i",
1564
1564
  "jurisdiction": "intl",
1565
1565
  "cite": "18(d)(i)",
1566
- "category": "precedence",
1566
+ "category": "category:precedence",
1567
1567
  "subjects": 2,
1568
1568
  "when": {
1569
- "own:fact:rule18_class": {
1569
+ "self:fact:rule18_class": {
1570
1570
  "not": [
1571
1571
  "rule18_class:nuc",
1572
1572
  "rule18_class:ram"
1573
1573
  ]
1574
1574
  },
1575
- "own:fact:position": "position:underway",
1575
+ "self:fact:position": "position:underway",
1576
1576
  "other:fact:rule18_class": "rule18_class:cbd",
1577
1577
  "other:fact:position": "position:underway",
1578
1578
  "pair:geo:in_sight": true
1579
1579
  },
1580
- "modality": "shall-if-practicable",
1580
+ "modality": "modality:shall-if-practicable",
1581
1581
  "effect": {
1582
- "own": "shall-not-impede",
1583
- "other": "none"
1582
+ "self": "role:shall-not-impede",
1583
+ "other": "role:none"
1584
1584
  },
1585
- "note": "Own is the paragraph's own subject, verbatim: 'any vessel other than a vessel not under command or a vessel restricted in her ability to manoeuvre'. That is a negation, and it is now written as one (Q-33) instead of as the eight-value positive list it took before. `other` is `none` and not `stand-on`: 18(d) confers no stand-on role, which is the point 8(f)(iii) makes explicit. The modality is `shall-if-practicable` because the duty itself now lives in `effect.own` -- 'shall, if the circumstances of the case admit' is the deontic qualification and `shall-not-impede` is the role, so the two halves the paragraph carries at once are held in two fields rather than fought over in one. That closes 18(d)(i)'s half of Q-31 and leaves the general question open.",
1585
+ "note": "Self is the paragraph's self subject, verbatim: 'any vessel other than a vessel not under command or a vessel restricted in her ability to manoeuvre'. That is a negation, and it is now written as one (Q-33) instead of as the eight-value positive list it took before. `other` is `role:none` and not `role:stand-on`: 18(d) confers no stand-on role, which is the point 8(f)(iii) makes explicit. The modality is `modality:shall-if-practicable` because the duty itself now lives in `effect.self` -- 'shall, if the circumstances of the case admit' is the deontic qualification and `role:shall-not-impede` is the role, so the two halves the paragraph carries at once are held in two fields rather than fought over in one. That closes 18(d)(i)'s half of Q-31 and leaves the general question open.",
1586
1586
  "gap": "18(d)(i) conditions on the CBD vessel 'exhibiting the signals in Rule 28', which is a display fact of the other vessel and is not read here; the entry is that much wider than the paragraph. Q-34."
1587
1587
  },
1588
1588
  {
1589
1589
  "id": "rule:18f_i",
1590
1590
  "jurisdiction": "intl",
1591
1591
  "cite": "18(f)(i)",
1592
- "category": "precedence",
1592
+ "category": "category:precedence",
1593
1593
  "subjects": 2,
1594
1594
  "when": {
1595
- "own:fact:rule18_class": "rule18_class:wig",
1596
- "own:fact:position": "position:underway",
1595
+ "self:fact:rule18_class": "rule18_class:wig",
1596
+ "self:fact:position": "position:underway",
1597
1597
  "other:fact:position": "position:underway",
1598
1598
  "pair:geo:in_sight": true
1599
1599
  },
1600
- "modality": "shall",
1600
+ "modality": "modality:shall",
1601
1601
  "effect": {
1602
- "own": "keep-clear",
1603
- "other": "none"
1602
+ "self": "role:keep-clear",
1603
+ "other": "role:none"
1604
1604
  },
1605
1605
  "rel:overrides": [
1606
1606
  "rule:18a_i",
@@ -1610,23 +1610,23 @@
1610
1610
  "rule:18d_i",
1611
1611
  "rule:15a:keep_out_of_the_way"
1612
1612
  ],
1613
- "note": "`rule18_class:wig` is the decode of `fact:wig` and `fact:wig_near_surface` together, so the phase gate 18(f)(i) is scoped to is stated once in facts.json rather than as a pair of booleans in every entry that needs it. A WIG craft near the surface still satisfies 18(a)'s predicate -- she is a power-driven vessel underway and the negated rank does not exclude her -- so the rel:overrides against the 18(a) family and 18(d)(i) still carries. `keep-clear` is one effect for the paragraph's two duties, which the effect vocabulary cannot separate. It overrides `rule:15a:keep_out_of_the_way` as well (Q-40): a WIG craft operating on the water surface is a power-driven vessel by 3(m), so 15(a) would give her a give-way or stand-on role beside 18(f)(i)'s keep-clear duty -- two helm roles at once, which is the conflict the rank negation on `rule:15a:keep_out_of_the_way` used to avoid by keeping her out of Rule 15 altogether."
1613
+ "note": "`rule18_class:wig` is the decode of `fact:wig` and `fact:wig_near_surface` together, so the phase gate 18(f)(i) is scoped to is stated once in facts.json rather than as a pair of booleans in every entry that needs it. A WIG craft near the surface still satisfies 18(a)'s predicate -- she is a power-driven vessel underway and the negated rank does not exclude her -- so the rel:overrides against the 18(a) family and 18(d)(i) still carries. `role:keep-clear` is one effect for the paragraph's two duties, which the effect vocabulary cannot separate. It overrides `rule:15a:keep_out_of_the_way` as well (Q-40): a WIG craft operating on the water surface is a power-driven vessel by 3(m), so 15(a) would give her a give-way or stand-on role beside 18(f)(i)'s keep-clear duty -- two helm roles at once, which is the conflict the rank negation on `rule:15a:keep_out_of_the_way` used to avoid by keeping her out of Rule 15 altogether."
1614
1614
  },
1615
1615
  {
1616
1616
  "id": "rule:8f_iii",
1617
1617
  "jurisdiction": "intl",
1618
1618
  "cite": "8(f)(iii)",
1619
- "category": "precedence",
1619
+ "category": "category:precedence",
1620
1620
  "subjects": 2,
1621
1621
  "when": {
1622
1622
  "pair:geo:risk_of_collision": true
1623
1623
  },
1624
- "modality": "shall",
1624
+ "modality": "modality:shall",
1625
1625
  "effect": {
1626
- "own": "none",
1627
- "other": "none"
1626
+ "self": "role:none",
1627
+ "other": "role:none"
1628
1628
  },
1629
- "note": "Recorded as a precedence norm rather than as a rel:overrides. It is not a superiority relation: 8(f)(ii) keeps the impeding vessel's duty alive, so nothing is displaced. What 8(f)(iii) does is deny the not-to-be-impeded vessel any role -- `none` on both sides -- so that shall-not-impede is never read as conferring stand-on.",
1629
+ "note": "Recorded as a precedence norm rather than as a rel:overrides. It is not a superiority relation: 8(f)(ii) keeps the impeding vessel's duty alive, so nothing is displaced. What 8(f)(iii) does is deny the not-to-be-impeded vessel any role -- `role:none` on both sides -- so that shall-not-impede is never read as conferring stand-on.",
1630
1630
  "gap": "The paragraph's antecedent is 'a vessel, the passage of which is not to be impeded'. That is the output of another norm, not a fact, and a precedence predicate reads only facts. The `when` is therefore the risk-of-collision half alone, which makes this entry wider than the paragraph: it applies to any pair with risk of collision. Kept wide and recorded rather than narrowed by inventing a fact.",
1631
1631
  "no_gate_note": "No in-sight gate: Rule 4 puts Rules 4-10 in any condition of visibility."
1632
1632
  },
@@ -1634,7 +1634,7 @@
1634
1634
  "id": "rule:13a",
1635
1635
  "jurisdiction": "intl",
1636
1636
  "cite": "13(a)",
1637
- "category": "precedence",
1637
+ "category": "category:precedence",
1638
1638
  "subjects": 2,
1639
1639
  "when": {
1640
1640
  "pair:geo:in_sight": true,
@@ -1650,15 +1650,15 @@
1650
1650
  "other:hist:was_overtaking": false
1651
1651
  },
1652
1652
  {
1653
- "own:hist:was_overtaking": true
1653
+ "self:hist:was_overtaking": true
1654
1654
  }
1655
1655
  ],
1656
1656
  "other:fact:position": "position:underway"
1657
1657
  },
1658
- "modality": "shall",
1658
+ "modality": "modality:shall",
1659
1659
  "effect": {
1660
- "own": "give-way",
1661
- "other": "stand-on"
1660
+ "self": "role:give-way",
1661
+ "other": "role:stand-on"
1662
1662
  },
1663
1663
  "rel:overrides": [
1664
1664
  "rule:18a_i",
@@ -1676,35 +1676,35 @@
1676
1676
  "rule:12a_ii",
1677
1677
  "rule:12a_iii"
1678
1678
  ],
1679
- "note": "Categorised `precedence`, not `classification` as ADR 0005 sec. 1 and the proposal's first-cut table have it. 13(a) is the one paragraph of Rule 13 that assigns a role, and a `classification` entry has no field to put a role in; 13(b)'s sector test is the classification and is what sets the latch. Q-14 settles membership paragraph by paragraph and this is one of them. The predicate now carries both halves of 'any vessel overtaking any other': the 13(b) sector, which rule:13b classifies, and the 13(d) latch, which rule:13d classifies. They are a disjunction, which is what the entry could not write before the predicate language grew `any_of` (Q-33). Now also overrides the three Rule 12 entries: 'notwithstanding anything contained in' the Rules of Part B Sections I and II includes Rule 12, and two sailing vessels in an overtaking would otherwise hold 13(a)'s and 12(a)'s roles at once (Q-40). The sector branch now also reads `other:hist:was_overtaking: false`, so it cannot newly name a second give-way vessel while the other side already holds 13(d)'s latch -- once overtaking, always overtaking, on whichever vessel history says holds the role (Q-47).",
1680
- "gap": "Only own's side. 13(a) lays the duty on the overtaking vessel, so this entry is directional and the overtaken vessel's stand-on role comes from the same entry read on the swapped situation. What it still cannot say is 13(c) -- a vessel in any doubt as to whether she is overtaking shall assume that she is -- because doubt is a state of the observer and no fact carries it; and it inherits rule:13b's speed-comparison gap. Q-41, Q-46."
1679
+ "note": "Categorised `category:precedence`, not `category:classification` as ADR 0005 sec. 1 and the proposal's first-cut table have it. 13(a) is the one paragraph of Rule 13 that assigns a role, and a `category:classification` entry has no field to put a role in; 13(b)'s sector test is the classification and is what starts the overtaking history. Q-14 settles membership paragraph by paragraph and this is one of them. The predicate now carries both halves of 'any vessel overtaking any other': the 13(b) sector, which rule:13b classifies, and 13(d)'s overtaking history, which rule:13d classifies. They are a disjunction, which is what the entry could not write before the predicate language grew `any_of` (Q-33). Now also overrides the three Rule 12 entries: 'notwithstanding anything contained in' the Rules of Part B Sections I and II includes Rule 12, and two sailing vessels in an overtaking would otherwise hold 13(a)'s and 12(a)'s roles at once (Q-40). The sector branch now also reads `other:hist:was_overtaking: false`, so it cannot newly name a second give-way vessel while the other side already holds 13(d)'s overtaking history -- once overtaking, always overtaking, on whichever vessel history says holds the role (Q-47).",
1680
+ "gap": "Only self's side, directional by design -- but not, as once claimed here, recoverable by reading this entry with the vessels swapped: Q-47's `other:hist:was_overtaking: false` guard blocks that swapped read once the overtaking history is set, so nothing today names the overtaken vessel stand-on from this entry. Also cannot say 13(c) (doubt is not a fact) and inherits rule:13b's speed-comparison gap. Q-41, Q-46."
1681
1681
  },
1682
1682
  {
1683
1683
  "id": "rule:9b",
1684
1684
  "jurisdiction": "intl",
1685
1685
  "cite": "9(b)",
1686
- "category": "precedence",
1686
+ "category": "category:precedence",
1687
1687
  "subjects": 2,
1688
1688
  "when": {
1689
1689
  "pair:env:narrow_channel": true,
1690
1690
  "any_of": [
1691
1691
  {
1692
- "own:fact:length_m": {
1692
+ "self:fact:length_m": {
1693
1693
  "lt": 20
1694
1694
  }
1695
1695
  },
1696
1696
  {
1697
- "own:fact:propulsion": "propulsion:sail"
1697
+ "self:fact:propulsion": "propulsion:sail"
1698
1698
  }
1699
1699
  ],
1700
- "own:fact:position": "position:underway",
1700
+ "self:fact:position": "position:underway",
1701
1701
  "other:fact:position": "position:underway",
1702
1702
  "other:fact:confined_to_channel": true
1703
1703
  },
1704
- "modality": "shall-not-impede",
1704
+ "modality": "modality:shall-not-impede",
1705
1705
  "effect": {
1706
- "own": "shall-not-impede",
1707
- "other": "none"
1706
+ "self": "role:shall-not-impede",
1707
+ "other": "role:none"
1708
1708
  },
1709
1709
  "rel:overrides": [
1710
1710
  "rule:18a_iv"
@@ -1715,18 +1715,18 @@
1715
1715
  "id": "rule:9c",
1716
1716
  "jurisdiction": "intl",
1717
1717
  "cite": "9(c)",
1718
- "category": "precedence",
1718
+ "category": "category:precedence",
1719
1719
  "subjects": 2,
1720
1720
  "when": {
1721
1721
  "pair:env:narrow_channel": true,
1722
- "own:fact:rule18_class": "rule18_class:fishing",
1723
- "own:fact:position": "position:underway",
1722
+ "self:fact:rule18_class": "rule18_class:fishing",
1723
+ "self:fact:position": "position:underway",
1724
1724
  "other:fact:position": "position:underway"
1725
1725
  },
1726
- "modality": "shall-not-impede",
1726
+ "modality": "modality:shall-not-impede",
1727
1727
  "effect": {
1728
- "own": "shall-not-impede",
1729
- "other": "none"
1728
+ "self": "role:shall-not-impede",
1729
+ "other": "role:none"
1730
1730
  },
1731
1731
  "rel:overrides": [
1732
1732
  "rule:18a_iii",
@@ -1738,19 +1738,19 @@
1738
1738
  "id": "rule:10i",
1739
1739
  "jurisdiction": "intl",
1740
1740
  "cite": "10(i)",
1741
- "category": "precedence",
1741
+ "category": "category:precedence",
1742
1742
  "subjects": 2,
1743
1743
  "when": {
1744
1744
  "pair:env:traffic_lane": true,
1745
- "own:fact:rule18_class": "rule18_class:fishing",
1746
- "own:fact:position": "position:underway",
1745
+ "self:fact:rule18_class": "rule18_class:fishing",
1746
+ "self:fact:position": "position:underway",
1747
1747
  "other:fact:position": "position:underway",
1748
1748
  "other:fact:following_traffic_lane": true
1749
1749
  },
1750
- "modality": "shall-not-impede",
1750
+ "modality": "modality:shall-not-impede",
1751
1751
  "effect": {
1752
- "own": "shall-not-impede",
1753
- "other": "none"
1752
+ "self": "role:shall-not-impede",
1753
+ "other": "role:none"
1754
1754
  },
1755
1755
  "rel:overrides": [
1756
1756
  "rule:18a_iii",
@@ -1762,29 +1762,29 @@
1762
1762
  "id": "rule:10j",
1763
1763
  "jurisdiction": "intl",
1764
1764
  "cite": "10(j)",
1765
- "category": "precedence",
1765
+ "category": "category:precedence",
1766
1766
  "subjects": 2,
1767
1767
  "when": {
1768
1768
  "pair:env:traffic_lane": true,
1769
1769
  "any_of": [
1770
1770
  {
1771
- "own:fact:length_m": {
1771
+ "self:fact:length_m": {
1772
1772
  "lt": 20
1773
1773
  }
1774
1774
  },
1775
1775
  {
1776
- "own:fact:propulsion": "propulsion:sail"
1776
+ "self:fact:propulsion": "propulsion:sail"
1777
1777
  }
1778
1778
  ],
1779
- "own:fact:position": "position:underway",
1779
+ "self:fact:position": "position:underway",
1780
1780
  "other:fact:propulsion": "propulsion:power",
1781
1781
  "other:fact:position": "position:underway",
1782
1782
  "other:fact:following_traffic_lane": true
1783
1783
  },
1784
- "modality": "shall-not-impede",
1784
+ "modality": "modality:shall-not-impede",
1785
1785
  "effect": {
1786
- "own": "shall-not-impede",
1787
- "other": "none"
1786
+ "self": "role:shall-not-impede",
1787
+ "other": "role:none"
1788
1788
  },
1789
1789
  "rel:overrides": [
1790
1790
  "rule:18a_iv"
@@ -1795,7 +1795,7 @@
1795
1795
  "id": "rule:7d_i",
1796
1796
  "jurisdiction": "intl",
1797
1797
  "cite": "7(d)(i)",
1798
- "category": "classification",
1798
+ "category": "category:classification",
1799
1799
  "subjects": 2,
1800
1800
  "when": {
1801
1801
  "pair:geo:bearing_change_deg_min": {
@@ -1806,7 +1806,7 @@
1806
1806
  "gt": 0
1807
1807
  }
1808
1808
  },
1809
- "modality": "shall",
1809
+ "modality": "modality:shall",
1810
1810
  "effect": {
1811
1811
  "risk_of_collision": true
1812
1812
  },
@@ -1818,54 +1818,54 @@
1818
1818
  "id": "rule:12a_i",
1819
1819
  "jurisdiction": "intl",
1820
1820
  "cite": "12(a)(i)",
1821
- "category": "precedence",
1821
+ "category": "category:precedence",
1822
1822
  "subjects": 2,
1823
1823
  "when": {
1824
1824
  "pair:geo:in_sight": true,
1825
1825
  "pair:geo:risk_of_collision": true,
1826
- "own:fact:propulsion": "propulsion:sail",
1826
+ "self:fact:propulsion": "propulsion:sail",
1827
1827
  "other:fact:propulsion": "propulsion:sail",
1828
- "own:fact:position": "position:underway",
1828
+ "self:fact:position": "position:underway",
1829
1829
  "other:fact:position": "position:underway",
1830
- "own:kin:wind_side": "wind_side:port",
1830
+ "self:kin:wind_side": "wind_side:port",
1831
1831
  "other:kin:wind_side": "wind_side:starboard"
1832
1832
  },
1833
- "modality": "shall",
1833
+ "modality": "modality:shall",
1834
1834
  "effect": {
1835
- "own": "give-way",
1836
- "other": "stand-on"
1835
+ "self": "role:give-way",
1836
+ "other": "role:stand-on"
1837
1837
  },
1838
- "note": "Each has the wind on a different side, so the vessel with the wind on the port side keeps out of the way. Evaluated from own's side, so the mirror case -- own on starboard, other on port -- is this same entry read on the swapped situation, and it is what makes the other vessel stand-on. 'Two sailing vessels' is 3(c), so both subjects are gated on `fact:propulsion: propulsion:sail` and not on `rule18_class:sail` (Q-40): a vessel engaged in fishing under sail, or not under command under sail, is a sailing vessel by 3(c) and is inside Rule 12. Where Rule 18 also ranks the pair -- 18(b) from the ordinary sailing vessel's side, 18(c) from the fishing vessel's -- that entry carries `rel:overrides` against this one, because Rule 18's opening words except Rules 9, 10 and 13 and no others; 13(a)'s 'notwithstanding' overrides it the same way. Between two sailing vessels Rule 18 leaves unordered -- one not under command and one restricted in her ability to manoeuvre -- this entry is the only norm in force, and it lays a helm duty on a vessel that may be unable to discharge it; that is Rule 2's region and is recorded in Q-40 rather than gated away."
1838
+ "note": "Each has the wind on a different side, so the vessel with the wind on the port side keeps out of the way. Evaluated from self's side, so the mirror case -- self on starboard, other on port -- is this same entry read on the swapped situation, and it is what makes the other vessel stand-on. 'Two sailing vessels' is 3(c), so both subjects are gated on `fact:propulsion: propulsion:sail` and not on `rule18_class:sail` (Q-40): a vessel engaged in fishing under sail, or not under command under sail, is a sailing vessel by 3(c) and is inside Rule 12. Where Rule 18 also ranks the pair -- 18(b) from the ordinary sailing vessel's side, 18(c) from the fishing vessel's -- that entry carries `rel:overrides` against this one, because Rule 18's opening words except Rules 9, 10 and 13 and no others; 13(a)'s 'notwithstanding' overrides it the same way. Between two sailing vessels Rule 18 leaves unordered -- one not under command and one restricted in her ability to manoeuvre -- this entry is the only norm in force, and it lays a helm duty on a vessel that may be unable to discharge it; that is Rule 2's region and is recorded in Q-40 rather than gated away."
1839
1839
  },
1840
1840
  {
1841
1841
  "id": "rule:12a_ii",
1842
1842
  "jurisdiction": "intl",
1843
1843
  "cite": "12(a)(ii)",
1844
- "category": "precedence",
1844
+ "category": "category:precedence",
1845
1845
  "subjects": 2,
1846
1846
  "when": {
1847
1847
  "pair:geo:in_sight": true,
1848
1848
  "pair:geo:risk_of_collision": true,
1849
- "own:fact:propulsion": "propulsion:sail",
1849
+ "self:fact:propulsion": "propulsion:sail",
1850
1850
  "other:fact:propulsion": "propulsion:sail",
1851
- "own:fact:position": "position:underway",
1851
+ "self:fact:position": "position:underway",
1852
1852
  "other:fact:position": "position:underway",
1853
- "own:geo:windward": true,
1853
+ "self:geo:windward": true,
1854
1854
  "any_of": [
1855
1855
  {
1856
- "own:kin:wind_side": "wind_side:port",
1856
+ "self:kin:wind_side": "wind_side:port",
1857
1857
  "other:kin:wind_side": "wind_side:port"
1858
1858
  },
1859
1859
  {
1860
- "own:kin:wind_side": "wind_side:starboard",
1860
+ "self:kin:wind_side": "wind_side:starboard",
1861
1861
  "other:kin:wind_side": "wind_side:starboard"
1862
1862
  }
1863
1863
  ]
1864
1864
  },
1865
- "modality": "shall",
1865
+ "modality": "modality:shall",
1866
1866
  "effect": {
1867
- "own": "give-way",
1868
- "other": "stand-on"
1867
+ "self": "role:give-way",
1868
+ "other": "role:stand-on"
1869
1869
  },
1870
1870
  "note": "Both have the wind on the same side, so the windward vessel keeps clear. 'The same side' is a comparison between two facts and the predicate language compares a fact to a constant, so the disjunction is written out over the two values the comparison can take -- which is why `wind_side:unknown` on either subject falls through to 12(a)(iii) rather than into this entry. 'Two sailing vessels' is 3(c), so both subjects are gated on `fact:propulsion: propulsion:sail` and not on `rule18_class:sail` (Q-40): a vessel engaged in fishing under sail, or not under command under sail, is a sailing vessel by 3(c) and is inside Rule 12. Where Rule 18 also ranks the pair -- 18(b) from the ordinary sailing vessel's side, 18(c) from the fishing vessel's -- that entry carries `rel:overrides` against this one, because Rule 18's opening words except Rules 9, 10 and 13 and no others; 13(a)'s 'notwithstanding' overrides it the same way. Between two sailing vessels Rule 18 leaves unordered -- one not under command and one restricted in her ability to manoeuvre -- this entry is the only norm in force, and it lays a helm duty on a vessel that may be unable to discharge it; that is Rule 2's region and is recorded in Q-40 rather than gated away."
1871
1871
  },
@@ -1873,31 +1873,31 @@
1873
1873
  "id": "rule:12a_iii",
1874
1874
  "jurisdiction": "intl",
1875
1875
  "cite": "12(a)(iii)",
1876
- "category": "precedence",
1876
+ "category": "category:precedence",
1877
1877
  "subjects": 2,
1878
1878
  "when": {
1879
1879
  "pair:geo:in_sight": true,
1880
1880
  "pair:geo:risk_of_collision": true,
1881
- "own:fact:propulsion": "propulsion:sail",
1881
+ "self:fact:propulsion": "propulsion:sail",
1882
1882
  "other:fact:propulsion": "propulsion:sail",
1883
- "own:fact:position": "position:underway",
1883
+ "self:fact:position": "position:underway",
1884
1884
  "other:fact:position": "position:underway",
1885
- "own:kin:wind_side": "wind_side:port",
1885
+ "self:kin:wind_side": "wind_side:port",
1886
1886
  "other:kin:wind_side": "wind_side:unknown",
1887
1887
  "other:geo:windward": true
1888
1888
  },
1889
- "modality": "shall",
1889
+ "modality": "modality:shall",
1890
1890
  "effect": {
1891
- "own": "give-way",
1892
- "other": "stand-on"
1891
+ "self": "role:give-way",
1892
+ "other": "role:stand-on"
1893
1893
  },
1894
- "note": "The doubt case, and the one paragraph of Rule 12 that is expressible only because uncertainty is a declared value of the fact rather than the fact's absence. `wind_side:unknown` on the other subject is 'cannot determine with certainty', and an absent fact would have been the wrong model for it: absent satisfies nothing, so silence would have relieved own of a duty the paragraph imposes. This is the shape 13(c) and 14(c) would need and do not have -- Q-41. 'Two sailing vessels' is 3(c), so both subjects are gated on `fact:propulsion: propulsion:sail` and not on `rule18_class:sail` (Q-40): a vessel engaged in fishing under sail, or not under command under sail, is a sailing vessel by 3(c) and is inside Rule 12. Where Rule 18 also ranks the pair -- 18(b) from the ordinary sailing vessel's side, 18(c) from the fishing vessel's -- that entry carries `rel:overrides` against this one, because Rule 18's opening words except Rules 9, 10 and 13 and no others; 13(a)'s 'notwithstanding' overrides it the same way. Between two sailing vessels Rule 18 leaves unordered -- one not under command and one restricted in her ability to manoeuvre -- this entry is the only norm in force, and it lays a helm duty on a vessel that may be unable to discharge it; that is Rule 2's region and is recorded in Q-40 rather than gated away."
1894
+ "note": "The doubt case, and the one paragraph of Rule 12 that is expressible only because uncertainty is a declared value of the fact rather than the fact's absence. `wind_side:unknown` on the other subject is 'cannot determine with certainty', and an absent fact would have been the wrong model for it: absent satisfies nothing, so silence would have relieved self of a duty the paragraph imposes. This is the shape 13(c) and 14(c) would need and do not have -- Q-41. 'Two sailing vessels' is 3(c), so both subjects are gated on `fact:propulsion: propulsion:sail` and not on `rule18_class:sail` (Q-40): a vessel engaged in fishing under sail, or not under command under sail, is a sailing vessel by 3(c) and is inside Rule 12. Where Rule 18 also ranks the pair -- 18(b) from the ordinary sailing vessel's side, 18(c) from the fishing vessel's -- that entry carries `rel:overrides` against this one, because Rule 18's opening words except Rules 9, 10 and 13 and no others; 13(a)'s 'notwithstanding' overrides it the same way. Between two sailing vessels Rule 18 leaves unordered -- one not under command and one restricted in her ability to manoeuvre -- this entry is the only norm in force, and it lays a helm duty on a vessel that may be unable to discharge it; that is Rule 2's region and is recorded in Q-40 rather than gated away."
1895
1895
  },
1896
1896
  {
1897
1897
  "id": "rule:13b",
1898
1898
  "jurisdiction": "intl",
1899
1899
  "cite": "13(b)",
1900
- "category": "classification",
1900
+ "category": "category:classification",
1901
1901
  "subjects": 2,
1902
1902
  "when": {
1903
1903
  "pair:geo:in_sight": true,
@@ -1909,7 +1909,7 @@
1909
1909
  }
1910
1910
  },
1911
1911
  {
1912
- "own:geo:rel_bearing_deg": {
1912
+ "self:geo:rel_bearing_deg": {
1913
1913
  "gt": 112.5,
1914
1914
  "lt": 247.5
1915
1915
  }
@@ -1918,58 +1918,58 @@
1918
1918
  "pair:geo:tcpa_s": {
1919
1919
  "gt": 0
1920
1920
  },
1921
- "own:fact:position": "position:underway",
1921
+ "self:fact:position": "position:underway",
1922
1922
  "other:fact:position": "position:underway"
1923
1923
  },
1924
- "modality": "shall",
1924
+ "modality": "modality:shall",
1925
1925
  "effect": {
1926
- "encounter": "overtaking"
1926
+ "encounter": "encounter:overtaking"
1927
1927
  },
1928
- "note": "The deeming paragraph, and therefore the classification -- the half of Q-37 left open when 13(a) took the role. One symmetric entry: the encounter type belongs to the pair, so the sector is read on either subject under `any_of` -- own is in an overtaking whether she is coming up with the other or being come up with. Reading aspect alone would classify the overtaken vessel's side of the same encounter as a crossing. Which vessel carries the duty is 13(a)'s question.",
1928
+ "note": "The deeming paragraph, and therefore the classification -- the half of Q-37 left open when 13(a) took the role. One symmetric entry: the encounter type belongs to the pair, so the sector is read on either subject under `any_of` -- self is in an overtaking whether she is coming up with the other or being come up with. Reading aspect alone would classify the overtaken vessel's side of the same encounter as a crossing. Which vessel carries the duty is 13(a)'s question.",
1929
1929
  "gap": "'Coming up with' is a comparison of the two vessels' speeds, and a predicate compares a fact to a constant, never one fact to another. `pair:geo:tcpa_s` positive stands in: the closest point of approach is still ahead, so the pair is closing, and closing from abaft the beam is coming up. A vessel drawing away astern is excluded, which is the case that mattered; a pair closing because the vessel ahead has stopped is not. Q-46."
1930
1930
  },
1931
1931
  {
1932
1932
  "id": "rule:13d",
1933
1933
  "jurisdiction": "intl",
1934
1934
  "cite": "13(d)",
1935
- "category": "classification",
1935
+ "category": "category:classification",
1936
1936
  "subjects": 2,
1937
1937
  "when": {
1938
1938
  "pair:geo:in_sight": true,
1939
1939
  "any_of": [
1940
1940
  {
1941
- "own:hist:was_overtaking": true
1941
+ "self:hist:was_overtaking": true
1942
1942
  },
1943
1943
  {
1944
1944
  "other:hist:was_overtaking": true
1945
1945
  }
1946
1946
  ],
1947
- "own:fact:position": "position:underway",
1947
+ "self:fact:position": "position:underway",
1948
1948
  "other:fact:position": "position:underway"
1949
1949
  },
1950
- "modality": "shall",
1950
+ "modality": "modality:shall",
1951
1951
  "effect": {
1952
- "encounter": "overtaking"
1952
+ "encounter": "encounter:overtaking"
1953
1953
  },
1954
- "note": "The latch, and the reason `hist` is a fact class rather than a note. Once either vessel has been the overtaking vessel the encounter stays an overtaking whatever the bearing does next, so this entry reads history alone and no geometry at all. It is the counterpart of the `hist:was_overtaking: false` gate on rule:14b and rule:15a:crossing: without both halves the drawn-out bearing would produce a head-on or a crossing beside the overtaking, which is exactly the reclassification 13(d) forbids. `pair:geo:in_sight` stays in the gate; a Rule 19(d)(i) entry reads `hist:was_overtaking` directly (Q-49).",
1955
- "gap": "'Until she is finally past and clear' is the paragraph's own end condition and nothing in the fact vocabulary carries it, so in this model the latch never clears. A consumer sets and clears `hist:was_overtaking` itself. Recorded rather than approximated with a range or a bearing: past and clear is a seamanship judgement, and inventing a threshold for it would be the kind of number Q-40's neighbours are about. Q-47."
1954
+ "note": "Overtaking history, and the reason `hist` is a fact class rather than a note. Once either vessel has been the overtaking vessel the encounter stays an overtaking whatever the bearing does next, so this entry reads history alone and no geometry at all. It is the counterpart of the `hist:was_overtaking: false` gate on rule:14b and rule:15a:crossing: without both halves the drawn-out bearing would produce a head-on or a crossing beside the overtaking, which is exactly the reclassification 13(d) forbids. `pair:geo:in_sight` stays in the gate; a Rule 19(d)(i) entry reads `hist:was_overtaking` directly (Q-49).",
1955
+ "gap": "'Until she is finally past and clear' is the paragraph's self end condition and nothing in the fact vocabulary carries it, so in this model overtaking history never clears. A consumer sets and clears `hist:was_overtaking` itself. Recorded rather than approximated with a range or a bearing: past and clear is a seamanship judgement, and inventing a threshold for it would be the kind of number Q-40's neighbours are about. Q-47."
1956
1956
  },
1957
1957
  {
1958
1958
  "id": "rule:14b",
1959
1959
  "jurisdiction": "intl",
1960
1960
  "cite": "14(b)",
1961
- "category": "classification",
1961
+ "category": "category:classification",
1962
1962
  "subjects": 2,
1963
1963
  "when": {
1964
1964
  "pair:geo:in_sight": true,
1965
1965
  "pair:geo:risk_of_collision": true,
1966
- "own:fact:propulsion": "propulsion:power",
1966
+ "self:fact:propulsion": "propulsion:power",
1967
1967
  "other:fact:propulsion": "propulsion:power",
1968
- "own:fact:position": "position:underway",
1968
+ "self:fact:position": "position:underway",
1969
1969
  "other:fact:position": "position:underway",
1970
- "own:hist:was_overtaking": false,
1970
+ "self:hist:was_overtaking": false,
1971
1971
  "other:hist:was_overtaking": false,
1972
- "own:geo:rel_bearing_deg": {
1972
+ "self:geo:rel_bearing_deg": {
1973
1973
  "any_of": [
1974
1974
  {
1975
1975
  "lte": 11.25
@@ -1990,29 +1990,29 @@
1990
1990
  ]
1991
1991
  }
1992
1992
  },
1993
- "modality": "shall",
1993
+ "modality": "modality:shall",
1994
1994
  "effect": {
1995
- "encounter": "head-on"
1995
+ "encounter": "encounter:head-on"
1996
1996
  },
1997
- "note": "14(b)'s deeming test: both vessels see the other ahead or nearly ahead. Both bearings are read, not one: a single vessel with the other fine on the bow is not a head-on situation unless she is also fine on the other's bow, and reading one bearing alone would have swallowed part of the crossing sector. The half-angle is declared once in facts.json `situation.constants.head_on_half_angle_deg`. Cites 14(b) and not 14(a) because the deeming paragraph is the classification, exactly as rule:13b and rule:13b cite 13(b): 14(a) states the situation in words -- 'reciprocal or nearly reciprocal courses' -- and imposes the duty, each shall alter her course to starboard, which is `conduct`, is not modelled, and is in known_omissions. Q-45.",
1997
+ "note": "14(b)'s deeming test: both vessels see the other ahead or nearly ahead. Both bearings are read, not one: a single vessel with the other fine on the bow is not a head-on situation unless she is also fine on the other's bow, and reading one bearing alone would have swallowed part of the crossing sector. The half-angle is declared once in facts.json `situation.constants.head_on_half_angle_deg`. Cites 14(b) and not 14(a) because the deeming paragraph is the classification, exactly as rule:13b and rule:13b cite 13(b): 14(a) states the situation in words -- 'reciprocal or nearly reciprocal courses' -- and imposes the duty, each shall alter her course to starboard, which is `category:conduct`, is not modelled, and is in known_omissions. Q-45.",
1998
1998
  "gap": "The history gates are 13(d)'s, not Rule 14's, and they are what keeps the three encounter types a partition -- their price is that a situation which omits `hist:was_overtaking` is classified as no encounter at all rather than as a head-on. Q-43."
1999
1999
  },
2000
2000
  {
2001
2001
  "id": "rule:15a:crossing",
2002
2002
  "jurisdiction": "intl",
2003
2003
  "cite": "15(a)",
2004
- "category": "classification",
2004
+ "category": "category:classification",
2005
2005
  "subjects": 2,
2006
2006
  "when": {
2007
2007
  "pair:geo:in_sight": true,
2008
2008
  "pair:geo:risk_of_collision": true,
2009
- "own:fact:propulsion": "propulsion:power",
2009
+ "self:fact:propulsion": "propulsion:power",
2010
2010
  "other:fact:propulsion": "propulsion:power",
2011
- "own:fact:position": "position:underway",
2011
+ "self:fact:position": "position:underway",
2012
2012
  "other:fact:position": "position:underway",
2013
- "own:hist:was_overtaking": false,
2013
+ "self:hist:was_overtaking": false,
2014
2014
  "other:hist:was_overtaking": false,
2015
- "own:geo:rel_bearing_deg": {
2015
+ "self:geo:rel_bearing_deg": {
2016
2016
  "not": {
2017
2017
  "gt": 112.5,
2018
2018
  "lt": 247.5
@@ -2026,7 +2026,7 @@
2026
2026
  },
2027
2027
  "any_of": [
2028
2028
  {
2029
- "own:geo:rel_bearing_deg": {
2029
+ "self:geo:rel_bearing_deg": {
2030
2030
  "not": {
2031
2031
  "any_of": [
2032
2032
  {
@@ -2055,9 +2055,9 @@
2055
2055
  }
2056
2056
  ]
2057
2057
  },
2058
- "modality": "shall",
2058
+ "modality": "modality:shall",
2059
2059
  "effect": {
2060
- "encounter": "crossing"
2060
+ "encounter": "encounter:crossing"
2061
2061
  },
2062
2062
  "note": "The residual, and derived rather than written as its own sector. Not overtaking is `not` over the very constraint rule:13b uses, on both subjects, so the sector and its complement cannot drift apart and the 112.5 edge lands in exactly one of them. Not head-on is `not` over rule:14b's cone, on either subject -- the negation of a conjunction, which is why it is an `any_of` and not two constraints. Nothing here enumerates a crossing sector, and that is the point: the only way for the three encounter types to overlap or to leave a bearing unclassified is for someone to edit one of the two constraints without editing the other, and there is only one of each.",
2063
2063
  "gap": "15(a) says 'two power-driven vessels', which this reads as 3(b)'s definition and nothing more, so a vessel not under command is inside it -- she is power-driven. That is deliberate for the classification: the encounter really is a crossing. `rule:15a:keep_out_of_the_way` reads 3(b) the same way and no longer gates on rank either (Q-40): where Rule 18 ranks the pair it is that entry's `rel:overrides` that displaces the role."
@@ -2066,18 +2066,18 @@
2066
2066
  "id": "rule:15a:keep_out_of_the_way",
2067
2067
  "jurisdiction": "intl",
2068
2068
  "cite": "15(a)",
2069
- "category": "precedence",
2069
+ "category": "category:precedence",
2070
2070
  "subjects": 2,
2071
2071
  "when": {
2072
2072
  "pair:geo:in_sight": true,
2073
2073
  "pair:geo:risk_of_collision": true,
2074
- "own:fact:propulsion": "propulsion:power",
2074
+ "self:fact:propulsion": "propulsion:power",
2075
2075
  "other:fact:propulsion": "propulsion:power",
2076
- "own:fact:position": "position:underway",
2076
+ "self:fact:position": "position:underway",
2077
2077
  "other:fact:position": "position:underway",
2078
- "own:hist:was_overtaking": false,
2078
+ "self:hist:was_overtaking": false,
2079
2079
  "other:hist:was_overtaking": false,
2080
- "own:geo:rel_bearing_deg": {
2080
+ "self:geo:rel_bearing_deg": {
2081
2081
  "gt": 0,
2082
2082
  "lte": 112.5
2083
2083
  },
@@ -2089,7 +2089,7 @@
2089
2089
  },
2090
2090
  "any_of": [
2091
2091
  {
2092
- "own:geo:rel_bearing_deg": {
2092
+ "self:geo:rel_bearing_deg": {
2093
2093
  "not": {
2094
2094
  "any_of": [
2095
2095
  {
@@ -2118,13 +2118,13 @@
2118
2118
  }
2119
2119
  ]
2120
2120
  },
2121
- "modality": "shall",
2121
+ "modality": "modality:shall",
2122
2122
  "effect": {
2123
- "own": "give-way",
2124
- "other": "stand-on"
2123
+ "self": "role:give-way",
2124
+ "other": "role:stand-on"
2125
2125
  },
2126
- "note": "The role half of 15(a): the vessel which has the other on her own starboard side keeps out of the way. Own's bearing constraint is the starboard half of the non-overtaking sector, and its upper edge is the same declared constant 13b reads, so it is not a hand-listed sector either; the partition test asserts that this entry selects exactly the crossings in which the other bears between 0 and 180 relative, which is what makes the shorthand checkable rather than trusted. 'Two power-driven vessels' is 3(b) and nothing more, so both subjects are gated on `fact:propulsion: propulsion:power` and on no Rule 18 rank (Q-40): a vessel engaged in fishing, not under command, restricted in her ability to manoeuvre or constrained by her draught is a power-driven vessel whenever her machinery is in use, and is inside Rule 15. Where Rule 18 also ranks the pair, that entry carries `rel:overrides` against this one -- 18(a)(i)-(iii) from the unranked vessel's side, 18(c)(i)-(ii) from the fishing vessel's, 18(f)(i) from the WIG craft's -- because Rule 18's opening words except Rules 9, 10 and 13 and no others; 13(a)'s 'notwithstanding' would override it the same way, and does not need to, because this entry's bearing gates and its `hist:was_overtaking: false` already exclude every overtaking. Where Rule 18 leaves the pair unordered -- two vessels engaged in fishing, or one not under command and one restricted in her ability to manoeuvre -- this entry is the only norm in force, and it lays a helm duty on a vessel that may be unable to discharge it; that is Rule 2's region and is recorded in Q-40 rather than gated away.",
2127
- "gap": "15(a)'s second duty -- 'shall, if the circumstances of the case admit, avoid crossing ahead of the other vessel' -- is `conduct` with a practicability caveat, and neither half fits a precedence entry. It is dropped here, which is Q-31's shape again: the caveat has no field to move into unless the duty happens to be a role, and this one is an action."
2126
+ "note": "The role half of 15(a): the vessel which has the other on her own starboard side keeps out of the way. Self's bearing constraint is the starboard half of the non-overtaking sector, and its upper edge is the same declared constant 13b reads, so it is not a hand-listed sector either; the partition test asserts that this entry selects exactly the crossings in which the other bears between 0 and 180 relative, which is what makes the shorthand checkable rather than trusted. 'Two power-driven vessels' is 3(b) and nothing more, so both subjects are gated on `fact:propulsion: propulsion:power` and on no Rule 18 rank (Q-40): a vessel engaged in fishing, not under command, restricted in her ability to manoeuvre or constrained by her draught is a power-driven vessel whenever her machinery is in use, and is inside Rule 15. Where Rule 18 also ranks the pair, that entry carries `rel:overrides` against this one -- 18(a)(i)-(iii) from the unranked vessel's side, 18(c)(i)-(ii) from the fishing vessel's, 18(f)(i) from the WIG craft's -- because Rule 18's opening words except Rules 9, 10 and 13 and no others; 13(a)'s 'notwithstanding' would override it the same way, and does not need to, because this entry's bearing gates and its `hist:was_overtaking: false` already exclude every overtaking. Where Rule 18 leaves the pair unordered -- two vessels engaged in fishing, or one not under command and one restricted in her ability to manoeuvre -- this entry is the only norm in force, and it lays a helm duty on a vessel that may be unable to discharge it; that is Rule 2's region and is recorded in Q-40 rather than gated away.",
2127
+ "gap": "15(a)'s second duty -- 'shall, if the circumstances of the case admit, avoid crossing ahead of the other vessel' -- is `category:conduct` with a practicability caveat, and neither half fits a precedence entry. It is dropped here, which is Q-31's shape again: the caveat has no field to move into unless the duty happens to be a role, and this one is an action."
2128
2128
  },
2129
2129
  {
2130
2130
  "id": "rule:30a:mooring_buoy",
@@ -2148,7 +2148,7 @@
2148
2148
  "position": "at or near the stern, at a lower level than the fore one"
2149
2149
  }
2150
2150
  ],
2151
- "modality": "shall",
2151
+ "modality": "modality:shall",
2152
2152
  "note": "33 CFR 90.5 deems a vessel made fast to a mooring buoy to be a vessel at anchor, so Inland Rule 30(a) reaches her. The Convention has no such deeming provision: under intl she is 'moored' by Rule 3(i) and no paragraph prescribes lights for her."
2153
2153
  },
2154
2154
  {
@@ -2173,7 +2173,7 @@
2173
2173
  "rel:in_lieu_of": [
2174
2174
  "rule:30a:mooring_buoy"
2175
2175
  ],
2176
- "modality": "may",
2176
+ "modality": "modality:may",
2177
2177
  "note": "The under-50 m alternative, on the same 33 CFR 90.5 deeming that brings rule:30a:mooring_buoy in. It is a separate entry because widening rule:30b's predicate would edit an intl entry to carry a national delta, which REQ-SCOPE-4 forbids."
2178
2178
  }
2179
2179
  ]