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.
- package/README.md +22 -14
- package/data/applicability.json +295 -276
- package/data/facts.json +19 -19
- package/data/i18n/en.json +73 -7
- package/data/i18n/fi.json +5 -5
- package/data/lights.json +10 -20
- package/data/version.json +1 -1
- package/docs/adr/0010-text-withheld-jurisdictions.md +2 -0
- package/docs/adr/0011-api-shape.md +7 -7
- package/docs/adr/0012-trace-and-rule2-departure-api.md +2 -2
- package/docs/adr/0016-encounter-roles-are-pooled-across-frames.md +82 -0
- package/docs/adr/0017-closed-vocabularies-are-prefixed-identifiers.md +105 -0
- package/docs/adr/0018-jurisdiction-delta-is-a-merge-patch.md +102 -0
- package/docs/adr/0019-relation-reach-and-import-reads.md +106 -0
- package/docs/budgets.json +6 -1
- package/docs/decisions.md +8 -0
- package/docs/identifiers.md +77 -60
- package/docs/part-b-invariants.md +41 -38
- package/docs/requirements.md +137 -137
- package/fixtures/applicability-fixtures.json +42 -0
- package/fixtures/situation-fixtures.json +600 -329
- package/package.json +4 -1
- package/schema/applicability.schema.json +74 -59
- package/schema/conduct-evaluation.schema.json +1 -1
- package/schema/encounter-evaluation.schema.json +6 -6
- package/schema/evaluation.schema.json +2 -2
- package/schema/facts.schema.json +4 -4
- package/schema/i18n-catalog.schema.json +26 -5
- package/schema/lights.schema.json +2 -3
- package/schema/situation-fixtures.schema.json +39 -0
- package/schema/situation.schema.json +3 -3
|
@@ -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
|
-
`
|
|
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
|
-
|
|
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,
|
|
78
|
-
|
|
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
|
|
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 —
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
144
|
-
model's is its segmentation, and no bearing or range is
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
|
157
|
-
finally past and clear,
|
|
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, `
|
|
165
|
-
asserted from the
|
|
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
|
|
178
|
-
head-on situation is deemed to exist exactly when each sees
|
|
179
|
-
nearly ahead: `
|
|
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
|
|
223
|
-
encounter type is `crossing` exactly when it is neither
|
|
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 `
|
|
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:
|
|
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
|
|
466
|
-
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
vessel still leaves stand-on
|
|
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)
|
|
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 — `
|
|
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 — `
|
|
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
|