colregs 0.3.1 → 0.3.3

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.
@@ -46,7 +46,7 @@ suffix naming what distinguishes them.
46
46
  A **situation** is the record of `REQ-CAT-4` and `REQ-CAT-6`: two per-vessel
47
47
  fact records, a kinematic state each, relative geometry, history and the
48
48
  environment, addressed as `<subject>:<class>:<key>`, subject in
49
- `own`/`other`/`pair`. A **trace** is a sequence of situations for one ordered
49
+ `self`/`other`/`pair`. A **trace** is a sequence of situations for one ordered
50
50
  pair, sampled at *t*₀ < *t*₁ < … . Each invariant is a property of one state
51
51
  ("at every state") or relates two or more ("at every state after", "from the
52
52
  first state at which") — the whole content of §4.1's `conduct` category, and
@@ -67,15 +67,15 @@ is Rules 11–18, III is Rule 19; which governs a pair is `INV-19a-scope`.
67
67
  # Rule 13 — Overtaking
68
68
 
69
69
  13(a) assigns a role, 13(b) deems the encounter, 13(c) resolves doubt, 13(d)
70
- latches the result against the geometry that follows.
70
+ persists the result against the geometry that follows.
71
71
 
72
72
  ### INV-13b — the overtaking deeming test
73
73
 
74
74
  `13(b)` under 11 · classification · single-state · `✎`
75
75
 
76
76
  **Invariant.** At any state at which the two vessels are in sight of one
77
- another and both underway, own is deemed to be overtaking other exactly when
78
- own is coming up with other and own bears, from other, more than 22.5° abaft
77
+ another and both underway, self is deemed to be overtaking other exactly when
78
+ self is coming up with other and self bears, from other, more than 22.5° abaft
79
79
  other's beam — `other:geo:rel_bearing_deg` strictly inside (112.5°, 247.5°).
80
80
  The sector is open at both ends (*more than* 22.5°: a vessel on the edge is
81
81
  not overtaking); its edges are the forward edges of Rule 21(c)'s sternlight
@@ -93,7 +93,7 @@ arc, which 13(b)'s second limb states in light terms.
93
93
 
94
94
  `13(b)` · classification, derived · single-state · `✎`
95
95
 
96
- **Invariant.** Where `INV-13b` holds of own with respect to other, the
96
+ **Invariant.** Where `INV-13b` holds of self with respect to other, the
97
97
  encounter type of the pair is `overtaking` read from *either* subject: the
98
98
  vessel being overtaken is in an overtaking, not a crossing, though the
99
99
  overtaking vessel bears forward of her beam.
@@ -122,29 +122,30 @@ well as Rules 14 and 15.
122
122
  Settled by P4.2's role assignment: the override is or is not needed to keep
123
123
  "never both give-way" true.
124
124
 
125
- ### INV-13d — the latch: the classification survives the geometry
125
+ ### INV-13d — overtaking history: the classification survives the geometry
126
126
 
127
127
  `13(d)` · classification · temporal, a state to every later state of the
128
128
  encounter · `✎`
129
129
 
130
- **Invariant.** Let *s* be the first state of an encounter at which own is
130
+ **Invariant.** Let *s* be the first state of an encounter at which self is
131
131
  deemed to be overtaking other. At every state of that encounter after *s*,
132
- until own is finally past and clear, the encounter type of the pair is
132
+ until self is finally past and clear, the encounter type of the pair is
133
133
  `overtaking` whatever the relative bearings then are; in particular it is not
134
134
  `crossing`, and the tests of Rules 14 and 15 do not apply to the pair.
135
135
 
136
- - **State remembered.** One directional boolean per subject per encounter (own
136
+ - **State remembered.** One directional boolean per subject per encounter (self
137
137
  was, earlier in this encounter, the overtaking vessel), plus the time of *s*
138
138
  for a monitor that says when the duty attached; window *s* to finally past and
139
139
  clear. Reading only the current state is wrong in the direction the paragraph
140
140
  forbids: an overtaking drawn out on the bow reads *crossing*, and hands
141
141
  give-way to the wrong vessel.
142
142
  - **Undetermined term.** "Finally past and clear" has no fact and no threshold;
143
- the data's latch is consumer-cleared and never self-clears (`Q-47`), a trace
144
- model's is its segmentation, and no bearing or range is invented here.
145
- - **Readings in doubt.** Two: what arms the latch, `Q-51`; what it forbids,
146
- `Q-52`.
147
- - Entries: `rule:13d`, reading `own`/`other:hist:was_overtaking` and no geometry; the
143
+ the data's overtaking history is consumer-cleared and never self-clears
144
+ (`Q-47`), a trace model's is its segmentation, and no bearing or range is
145
+ invented here.
146
+ - **Readings in doubt.** Two: what arms the overtaking history, `Q-51`; what it
147
+ forbids, `Q-52`.
148
+ - Entries: `rule:13d`, reading `self`/`other:hist:was_overtaking` and no geometry; the
148
149
  `was_overtaking: false` gates on `rule:14b`, `rule:15a:crossing`, `rule:15a:keep_out_of_the_way`
149
150
  implement `Q-52`'s *broad* reading. Settled by `Q-51`, `Q-52`, then TLC on a
150
151
  three-state trace of an overtaking drawing out onto the bow.
@@ -153,17 +154,17 @@ until own is finally past and clear, the encounter type of the pair is
153
154
 
154
155
  `13(d)` second limb · precedence · temporal, as `INV-13d` · `✎`
155
156
 
156
- **Invariant.** With *s* as in `INV-13d`, at every state after *s* until own is
157
- finally past and clear, own holds `give-way` and other `stand-on`, whatever the
157
+ **Invariant.** With *s* as in `INV-13d`, at every state after *s* until self is
158
+ finally past and clear, self holds `give-way` and other `stand-on`, whatever the
158
159
  bearings. Separate from `INV-13d` because the two limbs come apart: a reading
159
160
  on which 13(d) forbids only the *crossing* reclassification still preserves
160
161
  the duty by its second clause, and a formalisation deriving role from encounter
161
162
  type alone cannot distinguish `Q-52`'s readings.
162
163
 
163
164
  - **State remembered.** As `INV-13d`.
164
- - Entries: `rule:13a`'s `any_of` second limb, `own:hist:was_overtaking: true` — role
165
- asserted from the latch directly, keeping the limbs separable. Settled by
166
- `Q-52`.
165
+ - Entries: `rule:13a`'s `any_of` second limb, `self:hist:was_overtaking: true` — role
166
+ asserted from the overtaking history directly, keeping the limbs separable.
167
+ Settled by `Q-52`.
167
168
 
168
169
  ---
169
170
 
@@ -174,10 +175,10 @@ type alone cannot distinguish `Q-52`'s readings.
174
175
  `14(b)` reading 14(a)'s conditions · classification · single-state · `✎`
175
176
 
176
177
  **Invariant.** At any state at which two power-driven vessels are in sight,
177
- both underway, with risk of collision, and neither latched under `INV-13d`, a
178
- head-on situation is deemed to exist exactly when each sees the other ahead or
179
- nearly ahead: `own:geo:rel_bearing_deg` and `other:geo:rel_bearing_deg` each
180
- in [0°, 11.25°] ∪ [348.75°, 360°).
178
+ both underway, with risk of collision, and neither carrying overtaking history
179
+ under `INV-13d`, a head-on situation is deemed to exist exactly when each sees
180
+ the other ahead or nearly ahead: `self:geo:rel_bearing_deg` and
181
+ `other:geo:rel_bearing_deg` each in [0°, 11.25°] ∪ [348.75°, 360°).
181
182
 
182
183
  - **Both bearings, not one.** 14(b)'s lights limb is a statement about the
183
184
  *other* vessel's aspect; one bearing alone swallows part of the crossing
@@ -219,9 +220,9 @@ way; both are directed to act, and the duty is symmetric.
219
220
  `15(a)` · classification · single-state · `✎`
220
221
 
221
222
  **Invariant.** At any state at which two power-driven vessels are in sight,
222
- both underway, with risk of collision, and neither latched under `INV-13d`, the
223
- encounter type is `crossing` exactly when it is neither `overtaking` under
224
- `INV-13b` nor `head-on` under `INV-14b`.
223
+ both underway, with risk of collision, and neither carrying overtaking history
224
+ under `INV-13d`, the encounter type is `crossing` exactly when it is neither
225
+ `overtaking` under `INV-13b` nor `head-on` under `INV-14b`.
225
226
 
226
227
  - **Derived, not enumerated.** Enumerating the sector gives two statements of
227
228
  one boundary, and the partition's only failure mode is editing one;
@@ -241,7 +242,7 @@ vessel which has the other on her own starboard side holds `give-way` and the
241
242
  other holds `stand-on`.
242
243
 
243
244
  - **Undetermined term.** "On her own starboard side" has no sector in the
244
- paragraph; the data reads `own:geo:rel_bearing_deg` in (0°, 112.5°], its upper
245
+ paragraph; the data reads `self:geo:rel_bearing_deg` in (0°, 112.5°], its upper
245
246
  edge 13(b)'s constant, so it is checkable against the partition.
246
247
  - Entries: `rule:15a:keep_out_of_the_way`, plus six `rel:overrides` from Rule 18 entries, since
247
248
  Rule 18's chapeau excepts Rules 9, 10 and 13 and no others.
@@ -255,7 +256,7 @@ bearings only
255
256
  under `INV-15a-give-way`.
256
257
 
257
258
  - **Why it is not free.** Both-starboard is a consistent *record* and an
258
- impossible *situation* on a steady bearing: own's speed times the sine of her
259
+ impossible *situation* on a steady bearing: self's speed times the sine of her
259
260
  relative bearing equals minus other's speed times the sine of the aspect, so
260
261
  the bearings lie on opposite sides. A theorem at zero bearing rate, an
261
262
  observation elsewhere.
@@ -462,11 +463,12 @@ is at each state in exactly one of three phases:
462
463
 
463
464
  Phase 3 dominates phase 2: an obligation is not qualified by a permission.
464
465
 
465
- - **Reading in doubt.** Monotone or not: `Q-54`.
466
- - **State remembered.** If monotone, one three-valued latch per stand-on vessel
467
- per encounter; if not, no latch but `INV-17c` still needs the phase of each
468
- action. TLC distinguishes them: under monotone a late-complying give-way
469
- vessel still leaves stand-on action permitted; under reversible it does not.
466
+ - **Reading ruled.** Monotone (`Q-54`): once phase 2 or 3 is reached for the
467
+ stand-on vessel in an encounter, it does not fall back on belated give-way
468
+ compliance.
469
+ - **State remembered.** One three-valued marker per stand-on vessel per
470
+ encounter, monotone: a late-complying give-way vessel still leaves stand-on
471
+ action permitted.
470
472
 
471
473
  ---
472
474
 
@@ -601,7 +603,7 @@ not jointly exhaustive (`INV-19a-third-state`); Rule 19 supplements Section I
601
603
 
602
604
  - **Temporal note.** The switch is a function of the current state; a pair may
603
605
  cross it and back inside one encounter, and no paragraph says what becomes of
604
- a 13(d) latch or a Rule 17 phase: `Q-55`.
606
+ a 13(d) overtaking history or a Rule 17 phase: `Q-55`.
605
607
  - **Undetermined term.** "In or near an area of restricted visibility" has no
606
608
  fact (3(l)'s atmospheric condition is nowhere in `data/facts.json`), so `rule:19a`
607
609
  selects Section III for any pair not in sight — wider — and records a gap.
@@ -703,7 +705,7 @@ action in ample time.
703
705
 
704
706
  **Invariant.** Where `INV-19d-action`'s action is an alteration of course,
705
707
  then so far as possible the vessel shall not alter course to port for a vessel
706
- forward of her beam — `own:geo:rel_bearing_deg` in (270°, 360°) ∪ [0°, 90°) —
708
+ forward of her beam — `self:geo:rel_bearing_deg` in (270°, 360°) ∪ [0°, 90°) —
707
709
  other than for a vessel being overtaken.
708
710
 
709
711
  - **The exception reaches across the switch.** "A vessel being overtaken" is
@@ -718,7 +720,7 @@ other than for a vessel being overtaken.
718
720
 
719
721
  **Invariant.** Where `INV-19d-action`'s action is an alteration of course,
720
722
  then so far as possible the vessel shall not alter course toward a vessel
721
- abeam or abaft her beam — `own:geo:rel_bearing_deg` in [90°, 270°].
723
+ abeam or abaft her beam — `self:geo:rel_bearing_deg` in [90°, 270°].
722
724
 
723
725
  - **"Toward"** is the sign of the alteration against the other's bearing, not
724
726
  the resulting heading: toward when it reduces her relative bearing off the bow
@@ -760,7 +762,7 @@ paragraph of its own.
760
762
 
761
763
  `13(a)`, `15(a)`, `12(a)`, `18(a)–(c)` with 18's chapeau · precedence, derived
762
764
  · single-state · `✎`, asserted over consistent steady bearings only
763
- (`REQ-VERIFY-8`)
765
+ (`REQ-VERIFY-8`), over the pooled two-frame read of ADR 0016
764
766
 
765
767
  **Invariant.** At every state, after every `rel:overrides` is applied, no pair
766
768
  holds `give-way` on both subjects, and none holds `stand-on` on both.
@@ -786,7 +788,8 @@ P2.2.
786
788
 
787
789
  ### INV-PB-one-role-source — a vessel holds one helm role at a time
788
790
 
789
- `13(a)`, `18` chapeau, with 16 and 17 · precedence, derived · single-state · `✎`
791
+ `13(a)`, `18` chapeau, with 16 and 17 · precedence, derived · single-state · `✎`,
792
+ over the pooled two-frame read of ADR 0016
790
793
 
791
794
  **Invariant.** After every `rel:overrides` is applied, no vessel holds both
792
795
  `give-way` and `stand-on` with respect to the same other vessel at the same