colregs 0.3.3 → 0.3.4

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 CHANGED
@@ -26,7 +26,7 @@ See a [live demo](https://mark-brannan.github.io/searoom/) of searoom and the co
26
26
  > by the published rules.
27
27
 
28
28
  ```text
29
- data/rules.json the skeleton: paragraph paths, rule numbers, jurisdictions -- no text
29
+ data/rules.json the skeleton: paragraph paths, rule numbers, jurisdictions -- no text; non-intl jurisdictions as deltas
30
30
  data/editions.json which edition of which instrument each jurisdiction is on
31
31
  data/text/ rule text, one corpus per edition x language x source
32
32
  data/corpora.json index of those corpora and how much each covers
@@ -58,8 +58,15 @@ all of it. One case the Convention cannot state, a vessel made fast to a
58
58
  mooring buoy, lives only under `us/inland`
59
59
  ([ADR 0008](docs/adr/0008-mooring-buoy-modifier.md)); two the Inland Rules
60
60
  deliberately lack, Rule 28 and 23(d)(ii), are tombstoned there
61
- ([ADR 0018](docs/adr/0018-jurisdiction-delta-is-a-merge-patch.md)). That is
62
- the whole of `us/inland` today: four records, not a model of the Inland Rules.
61
+ ([ADR 0018](docs/adr/0018-jurisdiction-delta-is-a-merge-patch.md)); one it
62
+ spells differently, 23(d), replaces the international entry, and one it
63
+ states differently, the towing lights that replace 24(c)'s sternlight, is
64
+ tombstoned and replaced under its own id. Its Part C skeleton is a delta of
65
+ the same kind: the paths whose text differs, the paths only it has, the
66
+ three it lacks
67
+ ([ADR 0020](docs/adr/0020-skeleton-is-a-delta.md)). That is the whole of
68
+ `us/inland` today: seven records and a skeleton, not yet a model of the
69
+ Inland Rules; its text and the entries for its own paths are the next work.
63
70
 
64
71
  ## The layers
65
72
 
@@ -115,6 +115,11 @@
115
115
  "cite": "28",
116
116
  "what": "Under us/inland a record carrying activity:cbd selects nothing: rule:28 is suppressed and the Rule 23(a) entries it imported read activity:none.",
117
117
  "why": "'Constrained by her draft' is not an Inland status, so the record is out of vocabulary there and the package does not pick a reading for it; a consumer that decodes SignalK for inland waters maps it to activity:none (ADR 0018)."
118
+ },
119
+ {
120
+ "cite": "24(j)",
121
+ "what": "On the Western Rivers (and waters the Secretary specifies), a vessel pushing ahead or towing alongside shows sidelights and two towing lights only -- no masthead lights -- displacing the 24(c) chapeau this package otherwise models for all of us/inland.",
122
+ "why": "No `fact:waters` exists yet (REQ-SCOPE-5), so the Western Rivers carve-out can't be expressed as a predicate today. `rule:24c:towing_lights` therefore asserts masthead lights across all of us/inland, over-broad on those waters the same way the inherited rule:24c was before this PR replaced it -- not a regression, but the first entry sourced to 83.24(c) itself, so the gap is worth declaring rather than leaving implicit."
118
123
  }
119
124
  ],
120
125
  "represented_paragraphs": [
@@ -1348,7 +1353,8 @@
1348
1353
  "rel:overrides": [
1349
1354
  "rule:15a:keep_out_of_the_way"
1350
1355
  ],
1351
- "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."
1356
+ "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.",
1357
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1352
1358
  },
1353
1359
  {
1354
1360
  "id": "rule:18a_ii",
@@ -1378,7 +1384,8 @@
1378
1384
  "rel:overrides": [
1379
1385
  "rule:15a:keep_out_of_the_way"
1380
1386
  ],
1381
- "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."
1387
+ "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.",
1388
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1382
1389
  },
1383
1390
  {
1384
1391
  "id": "rule:18a_iii",
@@ -1408,7 +1415,8 @@
1408
1415
  "rel:overrides": [
1409
1416
  "rule:15a:keep_out_of_the_way"
1410
1417
  ],
1411
- "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."
1418
+ "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.",
1419
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1412
1420
  },
1413
1421
  {
1414
1422
  "id": "rule:18a_iv",
@@ -1435,7 +1443,8 @@
1435
1443
  "self": "role:give-way",
1436
1444
  "other": "role:stand-on"
1437
1445
  },
1438
- "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."
1446
+ "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.",
1447
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1439
1448
  },
1440
1449
  {
1441
1450
  "id": "rule:18b_i",
@@ -1460,7 +1469,8 @@
1460
1469
  "rule:12a_ii",
1461
1470
  "rule:12a_iii"
1462
1471
  ],
1463
- "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."
1472
+ "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.",
1473
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1464
1474
  },
1465
1475
  {
1466
1476
  "id": "rule:18b_ii",
@@ -1485,7 +1495,8 @@
1485
1495
  "rule:12a_ii",
1486
1496
  "rule:12a_iii"
1487
1497
  ],
1488
- "note": "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."
1498
+ "note": "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.",
1499
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1489
1500
  },
1490
1501
  {
1491
1502
  "id": "rule:18b_iii",
@@ -1510,7 +1521,8 @@
1510
1521
  "rule:12a_ii",
1511
1522
  "rule:12a_iii"
1512
1523
  ],
1513
- "note": "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."
1524
+ "note": "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.",
1525
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1514
1526
  },
1515
1527
  {
1516
1528
  "id": "rule:18c_i",
@@ -1536,7 +1548,8 @@
1536
1548
  "rule:12a_iii",
1537
1549
  "rule:15a:keep_out_of_the_way"
1538
1550
  ],
1539
- "note": "'so far as possible' is the practicability qualifier, so the modality is shall-if-practicable. 18(c) does not distinguish propulsion, and `rule18_class:fishing` does not either: a fishing vessel under sail is ranked here. Overrides the three Rule 12 entries (Q-40): a vessel engaged in fishing under sail is a sailing vessel by 3(c), and if the vessel she must keep out of the way of is under sail as well, Rule 12 is in force between them; Rule 18's chapeau excepts only Rules 9, 10 and 13. It overrides `rule:15a:keep_out_of_the_way` on the same ground (Q-40): a fishing vessel under power and a vessel not under command under power are two power-driven vessels by 3(b), so Rule 15 is in force between them too."
1551
+ "note": "'so far as possible' is the practicability qualifier, so the modality is shall-if-practicable. 18(c) does not distinguish propulsion, and `rule18_class:fishing` does not either: a fishing vessel under sail is ranked here. Overrides the three Rule 12 entries (Q-40): a vessel engaged in fishing under sail is a sailing vessel by 3(c), and if the vessel she must keep out of the way of is under sail as well, Rule 12 is in force between them; Rule 18's chapeau excepts only Rules 9, 10 and 13. It overrides `rule:15a:keep_out_of_the_way` on the same ground (Q-40): a fishing vessel under power and a vessel not under command under power are two power-driven vessels by 3(b), so Rule 15 is in force between them too.",
1552
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1540
1553
  },
1541
1554
  {
1542
1555
  "id": "rule:18c_ii",
@@ -1562,7 +1575,8 @@
1562
1575
  "rule:12a_iii",
1563
1576
  "rule:15a:keep_out_of_the_way"
1564
1577
  ],
1565
- "note": "Overrides the three Rule 12 entries (Q-40): a vessel engaged in fishing under sail is a sailing vessel by 3(c), and if the vessel she must keep out of the way of is under sail as well, Rule 12 is in force between them; Rule 18's chapeau excepts only Rules 9, 10 and 13. It overrides `rule:15a:keep_out_of_the_way` on the same ground (Q-40): a fishing vessel under power and a vessel restricted in her ability to manoeuvre under power are two power-driven vessels by 3(b), so Rule 15 is in force between them too."
1578
+ "note": "Overrides the three Rule 12 entries (Q-40): a vessel engaged in fishing under sail is a sailing vessel by 3(c), and if the vessel she must keep out of the way of is under sail as well, Rule 12 is in force between them; Rule 18's chapeau excepts only Rules 9, 10 and 13. It overrides `rule:15a:keep_out_of_the_way` on the same ground (Q-40): a fishing vessel under power and a vessel restricted in her ability to manoeuvre under power are two power-driven vessels by 3(b), so Rule 15 is in force between them too.",
1579
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1566
1580
  },
1567
1581
  {
1568
1582
  "id": "rule:18d_i",
@@ -1840,7 +1854,8 @@
1840
1854
  "self": "role:give-way",
1841
1855
  "other": "role:stand-on"
1842
1856
  },
1843
- "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."
1857
+ "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.",
1858
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1844
1859
  },
1845
1860
  {
1846
1861
  "id": "rule:12a_ii",
@@ -1872,7 +1887,8 @@
1872
1887
  "self": "role:give-way",
1873
1888
  "other": "role:stand-on"
1874
1889
  },
1875
- "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."
1890
+ "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.",
1891
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1876
1892
  },
1877
1893
  {
1878
1894
  "id": "rule:12a_iii",
@@ -1896,7 +1912,8 @@
1896
1912
  "self": "role:give-way",
1897
1913
  "other": "role:stand-on"
1898
1914
  },
1899
- "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."
1915
+ "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.",
1916
+ "gap": "Unlike `rule:13a`/`rule:15a:keep_out_of_the_way`, this entry does not gate on `other:hist:was_overtaking`, so it still names self give-way when the other vessel holds 13(d)'s overtaking history. Q-58."
1900
1917
  },
1901
1918
  {
1902
1919
  "id": "rule:13b",
@@ -2180,9 +2197,92 @@
2180
2197
  ],
2181
2198
  "modality": "modality:may",
2182
2199
  "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."
2200
+ },
2201
+ {
2202
+ "id": "rule:23d",
2203
+ "jurisdiction": "us/inland",
2204
+ "cite": "23(d)",
2205
+ "when": {
2206
+ "fact:propulsion": "propulsion:power",
2207
+ "fact:activity": "activity:none",
2208
+ "fact:position": "position:underway",
2209
+ "fact:length_m": {
2210
+ "lt": 12
2211
+ }
2212
+ },
2213
+ "lights": [
2214
+ {
2215
+ "light": "light:all_round",
2216
+ "color": "white",
2217
+ "count": 1
2218
+ },
2219
+ {
2220
+ "light": "light:sidelights"
2221
+ }
2222
+ ],
2223
+ "rel:in_lieu_of": [
2224
+ "rule:23a_i",
2225
+ "rule:23a_ii",
2226
+ "rule:23a_iii_iv"
2227
+ ],
2228
+ "modality": "modality:may",
2229
+ "images": [
2230
+ "NRHB_23_di.png"
2231
+ ],
2232
+ "note": "33 CFR 83.23(d) is the under-12 m provision as a single paragraph, not (d)(i): the norm is intl 23(d)(i), the path is not, so the intl entry is tombstoned and this one replaces it (ADR 0018 point 3, ADR 0020)."
2233
+ },
2234
+ {
2235
+ "id": "rule:24c:towing_lights",
2236
+ "jurisdiction": "us/inland",
2237
+ "cite": "24(c)",
2238
+ "when": {
2239
+ "fact:activity": "activity:pushing",
2240
+ "fact:composite_unit": false
2241
+ },
2242
+ "lights": [
2243
+ {
2244
+ "light": "light:masthead",
2245
+ "count": 2,
2246
+ "arrangement": "vertical"
2247
+ }
2248
+ ],
2249
+ "rel:in_lieu_of": [
2250
+ "rule:23a_i",
2251
+ "rule:23a_ii"
2252
+ ],
2253
+ "modality": "modality:shall",
2254
+ "note": "33 CFR 83.24(c)(iii) replaces the international sternlight with two towing lights for a vessel pushing ahead or towing alongside; masthead is unconditional like rule:24c, sidelights and towing lights join only once underway as the sibling entry rule:24c:underway_lights (own predicate, no import, so nothing double-counts), and rule:24c is suppressed and replaced here rather than edited (REQ-SCOPE-4, Q-11, ADR 0018 point 3)."
2255
+ },
2256
+ {
2257
+ "id": "rule:24c:underway_lights",
2258
+ "jurisdiction": "us/inland",
2259
+ "cite": "24(c)",
2260
+ "when": {
2261
+ "fact:activity": "activity:pushing",
2262
+ "fact:composite_unit": false,
2263
+ "fact:position": "position:underway"
2264
+ },
2265
+ "lights": [
2266
+ {
2267
+ "light": "light:sidelights"
2268
+ },
2269
+ {
2270
+ "light": "light:towing",
2271
+ "count": 2,
2272
+ "arrangement": "vertical"
2273
+ }
2274
+ ],
2275
+ "modality": "modality:shall",
2276
+ "note": "The underway-gated half of rule:24c:towing_lights's display, split out so the import reads only sidelights and towing lights, never the sternlight rule:23a_iii_iv still carries for the unreplaced intl paragraph (ADR 0019 point 3: an import reads a referenced entry's lights, never its axes, so the two must stay separate entries rather than one gated by activity elsewhere)."
2183
2277
  }
2184
2278
  ],
2185
2279
  "suppressions": [
2280
+ {
2281
+ "jurisdiction": "us/inland",
2282
+ "suppresses": "rule:23d_i",
2283
+ "cite": "23(d)(i)",
2284
+ "why": "33 CFR 83.23(d) has no (i); the same norm is rule:23d at bare 23(d), so this is a replace, not an absence (ADR 0018, ADR 0020)."
2285
+ },
2186
2286
  {
2187
2287
  "jurisdiction": "us/inland",
2188
2288
  "suppresses": "rule:28",
@@ -2194,6 +2294,12 @@
2194
2294
  "suppresses": "rule:23d_ii",
2195
2295
  "cite": "23(d)(ii)",
2196
2296
  "why": "33 CFR 83.23(d) is a single paragraph with no counterpart to the under-7 m, 7 kn exception of 23(d)(ii); the exception is deliberately absent under us/inland (Q-11, ADR 0018)."
2297
+ },
2298
+ {
2299
+ "jurisdiction": "us/inland",
2300
+ "suppresses": "rule:24c",
2301
+ "cite": "24(c)",
2302
+ "why": "33 CFR 83.24(c)(iii) replaces the international sternlight with two towing lights in a vertical line, so rule:24c does not hold as stated under us/inland; rule:24c:towing_lights is the replacement (Q-11, ADR 0018 point 3)."
2197
2303
  }
2198
2304
  ]
2199
2305
  }
package/data/corpora.json CHANGED
@@ -10,14 +10,14 @@
10
10
  "tier": "national",
11
11
  "paragraphs": 212
12
12
  },
13
- "intl@2016.fi.finlex": {
14
- "file": "text/intl/2016/fi.finlex.json",
15
- "edition": "intl@2016",
16
- "edition_status": "claimed",
13
+ "intl@1977.fi.finlex": {
14
+ "file": "text/intl/1977/fi.finlex.json",
15
+ "edition": "intl@1977",
16
+ "edition_status": "verified",
17
17
  "language": "fi",
18
18
  "source_id": "finlex",
19
19
  "tier": "national",
20
- "paragraphs": 0
20
+ "paragraphs": 194
21
21
  },
22
22
  "intl@2016.es.boe": {
23
23
  "file": "text/intl/2016/es.boe.json",
@@ -9,17 +9,22 @@
9
9
  "amended_through": "A.1085(28)",
10
10
  "in_force": "2016-01-01",
11
11
  "note": "2013 amendment (Part F) verified on imo.org; the resolution number and date are recalled, not yet verified against the resolution text -- REQ-LANG-10."
12
+ },
13
+ "intl@1977": {
14
+ "amended_through": "none (original 1972 text as promulgated)",
15
+ "in_force": "1977-07-15",
16
+ "note": "The 1972 Convention as promulgated in Finland (SopS 30/1977), before any IMO amendment. Verified against the Finlex text itself (REQ-LANG-10): it lacks Rule 3(m), 8(f), 10(d)(ii)/(k)/(l), 18(f), 22(d), 23(c), 23(d)(i)/(iii), 24(g)-(i), 27(e)(i) and 30(f); its own 23(c) is the paragraph now numbered 23(d)(ii) and its 24(g) the one now numbered 24(h). The corpus gaps say which amendment each belongs to."
12
17
  }
13
18
  }
14
19
  },
15
20
  "us/inland": {
16
21
  "instrument": "33 CFR Part 83, Inland Navigation Rules",
17
- "skeleton": null,
22
+ "skeleton": "us/inland@2014",
18
23
  "editions": {
19
24
  "us/inland@2014": {
20
25
  "amended_through": "79 FR 37898 (2014 final rule)",
21
26
  "in_force": "2014-08-01",
22
- "note": "Recalled, not verified; a stub edition so the second jurisdiction has one to name -- REQ-LANG-10."
27
+ "note": "Provisional edition id: the Part C skeleton delta was verified against current eCFR text, not the 2014 final rule. Cornell's own source credit on 83.24 runs through 84 FR 30878 (June 28, 2019); this id and amended_through are unverified against the Federal Register and will be corrected or renamed once the corpus fetch settles which amendment the text reflects -- REQ-LANG-10, ADR 0020."
23
28
  }
24
29
  }
25
30
  }
package/data/images.json CHANGED
@@ -157,10 +157,12 @@
157
157
  "Power Driven Vessel less than 12m"
158
158
  ],
159
159
  "paragraphs": [
160
- "23(d)(i)"
160
+ "23(d)(i)",
161
+ "23(d)"
161
162
  ],
162
163
  "entries": [
163
- "rule:23d_i"
164
+ "rule:23d_i",
165
+ "rule:23d"
164
166
  ],
165
167
  "depicts": "provision",
166
168
  "transcript": [
@@ -196,7 +198,10 @@
196
198
  ],
197
199
  "description": "Twenty-odd flat hatch covers fill a long straight-sided cargo deck between a forward deckhouse with bridge windows and an after machinery house with a squat funnel: a Great Lakes bulk carrier. She is drawn from above and off the starboard bow, stem to the right, the hull closed by a dashed waterline and no sea beneath. A white lobe caps the short mast on the after house, a second sits on the mast above the forward bridge, and red and green lobes stand either side of that bridge front. No day shapes or inset panels appear.",
198
200
  "shapes": [],
199
- "unmapped_reason": "illustrates a paragraph outside this release's scope (inland-only, or a rule family not in the table)"
201
+ "paragraphs": [
202
+ "23(e)"
203
+ ],
204
+ "depicts": "provision"
200
205
  },
201
206
  "NRHB_24_a.png": {
202
207
  "file": "NRHB_24_a.png",
@@ -416,7 +421,10 @@
416
421
  ],
417
422
  "description": "Square push knees on a small tug are set hard against the flat end of a long box barge, the two drawn as one unit running from upper left to lower right. The view is from above and off the port quarter, with a dashed waterline and no sea. On the tug two white lobes stand in a line on the mast, a green strip runs along the near side of her bridge and a red lobe shows beyond, and two yellow lobes burn one above the other on a staff at her stern. At the head of the tow two yellow lobes sit together with a red lobe outboard and a green lobe on the near side.",
418
423
  "shapes": [],
419
- "unmapped_reason": "illustrates a paragraph outside this release's scope (inland-only, or a rule family not in the table)"
424
+ "paragraphs": [
425
+ "24(j)"
426
+ ],
427
+ "depicts": "provision"
420
428
  },
421
429
  "NRHB_25_a.png": {
422
430
  "file": "NRHB_25_a.png",
package/data/rules.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "note": "Language-neutral skeleton: paragraph paths, rule numbers, jurisdictions and figures, keyed by paragraph path. The edition each jurisdiction consolidates is declared in data/editions.json; the words live in data/text/ corpora, one per edition x language x source -- ADR 0003, ADR 0013.",
2
+ "note": "Language-neutral skeleton: paragraph paths, rule numbers, jurisdictions and figures, keyed by paragraph path; a non-intl jurisdiction is a merge patch under `deltas` -- own paragraphs, suppressed paths, silence inherits (ADR 0020).",
3
3
  "paragraphs": {
4
4
  "1(a)": {
5
5
  "path": "1(a)",
@@ -1219,5 +1219,220 @@
1219
1219
  "rule": "31",
1220
1220
  "jurisdiction": "intl"
1221
1221
  }
1222
+ },
1223
+ "deltas": {
1224
+ "us/inland": {
1225
+ "note": "33 CFR Part 83 Subpart C as a delta on intl: a path is here when its text differs from intl or has no intl counterpart; a suppressed path is one the CFR does not spell; every other Part C path is inherited. Rows from the diff in docs/verification/2026-08-30-q6-q8.md; text lands with the corpus -- ADR 0020.",
1226
+ "paragraphs": {
1227
+ "21(a)": {
1228
+ "path": "21(a)",
1229
+ "rule": "21",
1230
+ "jurisdiction": "us/inland"
1231
+ },
1232
+ "21(b)": {
1233
+ "path": "21(b)",
1234
+ "rule": "21",
1235
+ "jurisdiction": "us/inland"
1236
+ },
1237
+ "21(g)": {
1238
+ "path": "21(g)",
1239
+ "rule": "21",
1240
+ "jurisdiction": "us/inland"
1241
+ },
1242
+ "22(a)": {
1243
+ "path": "22(a)",
1244
+ "rule": "22",
1245
+ "jurisdiction": "us/inland"
1246
+ },
1247
+ "22(b)": {
1248
+ "path": "22(b)",
1249
+ "rule": "22",
1250
+ "jurisdiction": "us/inland"
1251
+ },
1252
+ "22(c)": {
1253
+ "path": "22(c)",
1254
+ "rule": "22",
1255
+ "jurisdiction": "us/inland"
1256
+ },
1257
+ "23(b)": {
1258
+ "path": "23(b)",
1259
+ "rule": "23",
1260
+ "jurisdiction": "us/inland"
1261
+ },
1262
+ "23(d)": {
1263
+ "path": "23(d)",
1264
+ "rule": "23",
1265
+ "jurisdiction": "us/inland",
1266
+ "images": [
1267
+ "NRHB_23_di.png"
1268
+ ]
1269
+ },
1270
+ "23(e)": {
1271
+ "path": "23(e)",
1272
+ "rule": "23",
1273
+ "jurisdiction": "us/inland",
1274
+ "images": [
1275
+ "NRHB_23_e.png"
1276
+ ]
1277
+ },
1278
+ "24(c)": {
1279
+ "path": "24(c)",
1280
+ "rule": "24",
1281
+ "jurisdiction": "us/inland"
1282
+ },
1283
+ "24(d)": {
1284
+ "path": "24(d)",
1285
+ "rule": "24",
1286
+ "jurisdiction": "us/inland"
1287
+ },
1288
+ "24(f)": {
1289
+ "path": "24(f)",
1290
+ "rule": "24",
1291
+ "jurisdiction": "us/inland"
1292
+ },
1293
+ "24(g)": {
1294
+ "path": "24(g)",
1295
+ "rule": "24",
1296
+ "jurisdiction": "us/inland"
1297
+ },
1298
+ "24(g)(v)": {
1299
+ "path": "24(g)(v)",
1300
+ "rule": "24",
1301
+ "jurisdiction": "us/inland"
1302
+ },
1303
+ "24(i)": {
1304
+ "path": "24(i)",
1305
+ "rule": "24",
1306
+ "jurisdiction": "us/inland"
1307
+ },
1308
+ "24(j)": {
1309
+ "path": "24(j)",
1310
+ "rule": "24",
1311
+ "jurisdiction": "us/inland",
1312
+ "images": [
1313
+ "NRHB_24_j.png"
1314
+ ]
1315
+ },
1316
+ "24(j)(i)": {
1317
+ "path": "24(j)(i)",
1318
+ "rule": "24",
1319
+ "jurisdiction": "us/inland"
1320
+ },
1321
+ "24(j)(ii)": {
1322
+ "path": "24(j)(ii)",
1323
+ "rule": "24",
1324
+ "jurisdiction": "us/inland"
1325
+ },
1326
+ "25(d)(i)": {
1327
+ "path": "25(d)(i)",
1328
+ "rule": "25",
1329
+ "jurisdiction": "us/inland"
1330
+ },
1331
+ "25(d)(ii)": {
1332
+ "path": "25(d)(ii)",
1333
+ "rule": "25",
1334
+ "jurisdiction": "us/inland"
1335
+ },
1336
+ "25(e)": {
1337
+ "path": "25(e)",
1338
+ "rule": "25",
1339
+ "jurisdiction": "us/inland"
1340
+ },
1341
+ "26(d)": {
1342
+ "path": "26(d)",
1343
+ "rule": "26",
1344
+ "jurisdiction": "us/inland"
1345
+ },
1346
+ "26(f)": {
1347
+ "path": "26(f)",
1348
+ "rule": "26",
1349
+ "jurisdiction": "us/inland"
1350
+ },
1351
+ "26(f)(i)": {
1352
+ "path": "26(f)(i)",
1353
+ "rule": "26",
1354
+ "jurisdiction": "us/inland"
1355
+ },
1356
+ "26(f)(ii)": {
1357
+ "path": "26(f)(ii)",
1358
+ "rule": "26",
1359
+ "jurisdiction": "us/inland"
1360
+ },
1361
+ "26(f)(iii)": {
1362
+ "path": "26(f)(iii)",
1363
+ "rule": "26",
1364
+ "jurisdiction": "us/inland"
1365
+ },
1366
+ "27(c)": {
1367
+ "path": "27(c)",
1368
+ "rule": "27",
1369
+ "jurisdiction": "us/inland"
1370
+ },
1371
+ "27(d)(iv)": {
1372
+ "path": "27(d)(iv)",
1373
+ "rule": "27",
1374
+ "jurisdiction": "us/inland"
1375
+ },
1376
+ "28": {
1377
+ "path": "28",
1378
+ "rule": "28",
1379
+ "jurisdiction": "us/inland"
1380
+ },
1381
+ "29(b)": {
1382
+ "path": "29(b)",
1383
+ "rule": "29",
1384
+ "jurisdiction": "us/inland"
1385
+ },
1386
+ "30(e)": {
1387
+ "path": "30(e)",
1388
+ "rule": "30",
1389
+ "jurisdiction": "us/inland"
1390
+ },
1391
+ "30(g)": {
1392
+ "path": "30(g)",
1393
+ "rule": "30",
1394
+ "jurisdiction": "us/inland"
1395
+ },
1396
+ "30(h)": {
1397
+ "path": "30(h)",
1398
+ "rule": "30",
1399
+ "jurisdiction": "us/inland"
1400
+ },
1401
+ "30(i)": {
1402
+ "path": "30(i)",
1403
+ "rule": "30",
1404
+ "jurisdiction": "us/inland"
1405
+ },
1406
+ "30(j)": {
1407
+ "path": "30(j)",
1408
+ "rule": "30",
1409
+ "jurisdiction": "us/inland"
1410
+ },
1411
+ "30(k)": {
1412
+ "path": "30(k)",
1413
+ "rule": "30",
1414
+ "jurisdiction": "us/inland"
1415
+ },
1416
+ "30(l)": {
1417
+ "path": "30(l)",
1418
+ "rule": "30",
1419
+ "jurisdiction": "us/inland"
1420
+ }
1421
+ },
1422
+ "suppressions": [
1423
+ {
1424
+ "path": "23(d)(i)",
1425
+ "why": "33 CFR 83.23(d) has no lettered subparagraphs; the under-12 m content sits at bare 23(d), which this delta carries (ADR 0020)."
1426
+ },
1427
+ {
1428
+ "path": "23(d)(ii)",
1429
+ "why": "No CFR counterpart to the under-7 m, 7 kn exception (ADR 0018)."
1430
+ },
1431
+ {
1432
+ "path": "23(d)(iii)",
1433
+ "why": "No CFR counterpart to the off-centreline masthead-light provision; the CFR states it inside 21(a) and 21(b) instead (ADR 0020)."
1434
+ }
1435
+ ]
1436
+ }
1222
1437
  }
1223
1438
  }