diff --git a/WATCHDOG.md b/WATCHDOG.md
index cbc905d..14993f1 100644
--- a/WATCHDOG.md
+++ b/WATCHDOG.md
@@ -121,7 +121,7 @@ identical to the register.
| Decision | Status | Accepted on the same line (any one; case does not matter) |
|---|---|---|
-| BOM-ISSUE-IN-FORCE | recorded | *BOM Issue 7.8 is the canonical hardware BOM*: `supersed (superseded, supersedes)`, `replaced`, `previous`, `earlier`
*B-01 is superseded*: `supersed (superseded, supersedes)`
*BOM Issue 7.8 is the canonical hardware BOM*: `supersed (superseded, supersedes)`, `replaced`, `previous`, `earlier`, `historical`
*superseded source still cited (P-03-rev18.1 line 7); cite P-03-rev19.2*: no label; correct the line or add a decision-allow marker |
+| BOM-ISSUE-IN-FORCE | recorded | *BOM Issue 7.10 is the canonical hardware BOM*: `supersed (superseded, supersedes)`, `replaced`, `previous`, `earlier`
*B-01 is superseded*: `supersed (superseded, supersedes)`
*BOM Issue 7.10 is the canonical hardware BOM*: `supersed (superseded, supersedes)`, `replaced`, `previous`, `earlier`, `historical`
*superseded source still cited (P-03-rev18.1 line 7); cite P-03-rev19.6*: no label; correct the line or add a decision-allow marker |
| MAST-INSTALL-HEIGHT | superseded | `supersed (superseded, supersedes)`, `legacy`, `historical`, `earlier`, `previous`, `rev 18.1 to rev 18.6`, `lift`, `L1350`, `extended`, `full stroke` |
| MAST-POSITIONS | superseded | `supersed (superseded, supersedes)`, `legacy`, `historical`, `earlier`, `previous`, `rev 18.1 to rev 18.6` |
| MAST-TOP-HEIGHT | superseded | `supersed (superseded, supersedes)`, `legacy`, `historical`, `earlier`, `previous`, `rev 18.1 to rev 18.6` |
@@ -142,7 +142,8 @@ identical to the register.
| DOCK-NO-CONTACTS | recorded | *2.0 docking has no dock contacts*: `no`, `not`, `without`, `3.0`, `never`
*no dock or charge pilot in 2.0*: `no`
*wireless charging belongs to 2.0, not 3.0*: `supersed (superseded, supersedes)`, `legacy`, `historical`, `removed`, `dropped`, `no longer`, `earlier`, `previous`, `v0.0.1` |
| DOCKING-NOT-CHARGING | recorded | *2.0 docking is positioning only*: `not`, `never`, `instead`, `non-charging`, `legacy`
*never report charging from a docking pose*: no label; correct the line or add a decision-allow marker
*docking success never establishes charging*: `not`, `never`, `does not` |
| TELEMETRY-NOT-SAFETY-EVIDENCE | recorded | `not`, `never`, `functional`, `no substitute` |
-| SAFETY-PROCUREMENT | recorded | *the EDM variant is not selected; it is gate EDM-STOP before ordering*: `not`, `unselected`, `open`, `EDM-STOP`
*no single-channel or uncertified E-stop recommendation*: no label; correct the line or add a decision-allow marker
*CTL-004 is bench-only*: `bench-only`, `until`
*K1 and K2 are TE KILOVAC LEV100H contactors; automotive relays are not the 2.0 E-stop*: `supersed (superseded, supersedes)`, `legacy`, `historical`, `removed`, `dropped`, `no longer`, `earlier`, `previous`, `v0.0.1`, `not`, `never`, `Gate A` |
+| SAFETY-PROCUREMENT | recorded | *the linked-auxiliary contactor is the Gigavac GX11CAC; ordering (BUY-32) is gated on the datasheet checks*: `not`, `unselected`, `open`, `EDM-STOP`, `GX11CAC`, `BUY-32`
*no single-channel or uncertified E-stop recommendation*: no label; correct the line or add a decision-allow marker
*CTL-004 is bench-only*: `bench-only`, `until`
*K1 and K2 are Gigavac GX11CAC contactors; automotive relays are not the 2.0 E-stop*: `supersed (superseded, supersedes)`, `legacy`, `historical`, `removed`, `dropped`, `no longer`, `earlier`, `previous`, `v0.0.1`, `not`, `never`, `Gate A`
*K1 and K2 are Gigavac GX11CAC contactors; label LEV100H material as superseded*: `supersed (superseded, supersedes)`, `legacy`, `historical`, `replaced`, `removed`, `dropped`, `no longer`, `earlier`, `previous`, `v0.0.1` |
+| SAFETY-CHAIN-IO | recorded | `supersed (superseded, supersedes)`, `legacy`, `historical`, `replaced`, `removed`, `dropped`, `no longer`, `earlier`, `previous`, `v0.0.1`, `no`, `not`, `never`, `without`, `PNOZ` |
| ESTOP-SCOPE | recorded | `supersed (superseded, supersedes)`, `legacy`, `historical`, `removed`, `dropped`, `no longer`, `earlier`, `previous`, `v0.0.1`, `not`, `never`, `actuator` |
| RESET-BUTTON | recorded | `supersed (superseded, supersedes)`, `legacy`, `historical`, `removed`, `dropped`, `no longer`, `earlier`, `previous`, `v0.0.1`, `no`, `not`, `never`, `without` |
| CHARGING | recorded | *the plug-presence switch PWR-020 is removed; charging is the TZBOT wireless path*: `supersed (superseded, supersedes)`, `legacy`, `historical`, `removed`, `dropped`, `no longer`, `earlier`, `previous`, `v0.0.1`, `no`, `not`, `without`
*the wired inlet PWR-019 and plug-presence switch PWR-020 are removed*: `supersed (superseded, supersedes)`, `legacy`, `historical`, `removed`, `dropped`, `no longer`, `earlier`, `previous`, `v0.0.1` |
diff --git a/decisions.yaml b/decisions.yaml
index 1e5b87b..6dd5c37 100644
--- a/decisions.yaml
+++ b/decisions.yaml
@@ -53,12 +53,12 @@
schema_version: 1
in_force:
- source: P-03-rev19.2
- date: 2026-10-15
+ source: P-03-rev19.6
+ date: 2026-10-18
sources:
Alex decision 2026-10-16:
- title: Platform decision of 16 October 2026 (base camera pose, imu_link and LiDAR stack as built, from CAD Rev B, platform-hw #20; imu_link pose and orientation from platform-sw #70); to be recorded in the next P-03 revision, item 19 D3, D4 and D5
+ title: Platform decision of 16 October 2026 (base camera pose, imu_link and LiDAR stack as built, from CAD Rev B, platform-hw #20; imu_link pose and orientation from platform-sw #70); recorded in P-03 rev19.4 item 19 D3, D4 and D5
evidence: decision record, not held in any repository; provenance only, CI never reads it
Alex decision 2026-10-12:
title: Platform decision of 12 October 2026 (sensor layout, base camera, IMU, column position, LiDAR mount, drive track); history, recorded in P-03 rev19.0 item 19
@@ -73,8 +73,17 @@ sources:
P-03-rev18.4:
title: P-03 Decision Addendum, revision 18.4 (earlier revision)
evidence: plan-set document, not held in any repository; cited by item
+ P-03-rev19.6:
+ title: "OpenAMRobot 2.0 Decision Addendum rev19.6, 18 October 2026 (the addendum in force; item 22: Gigavac GX11CAC contactors and the item 22 controller I/O)"
+ evidence: plan-set document, not held in any repository; cited by item
+ E-01-rev1.3:
+ title: E-01 Safety and Power Distribution Baseline rev1.3, 18 October 2026 (detail for P-03 rev19.6 item 22)
+ evidence: plan-set document, not held in any repository; provenance only, CI never reads it
P-03-rev19.2:
- title: "OpenAMRobot 2.0 Decision Addendum rev19.2, 15 October 2026 (item 20: E-stop scope, single RESET button, wireless charging, battery faults)"
+ title: "OpenAMRobot 2.0 Decision Addendum rev19.2, 15 October 2026 (earlier revision; item 20: E-stop scope, single RESET button, wireless charging, battery faults)"
+ evidence: plan-set document, not held in any repository; cited by item
+ P-03-rev19.4:
+ title: "OpenAMRobot 2.0 Decision Addendum rev19.4, 16 October 2026 (earlier revision; item 19 updates of 16 October: base camera D3, LiDAR mount D4, imu_link D5, from CAD Rev B)"
evidence: plan-set document, not held in any repository; cited by item
E-01-rev1.1:
title: E-01 Safety and Power Distribution Baseline rev1.1, 15 October 2026 (detail for P-03 item 20)
@@ -106,8 +115,11 @@ sources:
P-00-rev18.1:
title: P-00 Master Coordination Plan, revision 18.1
evidence: plan-set document, not held in any repository; cited by text line
+ BOM-Issue-7.10:
+ title: OpenAMRobot 2.0 Detailed Hardware BOM, Issue 7.10, 18 October 2026 (canonical per P-03 rev19.6)
+ evidence: not held in any repository; provenance only, CI never reads it
BOM-Issue-7.8:
- title: OpenAMRobot 2.0 Detailed Hardware BOM, Issue 7.8, 15 October 2026 (canonical per P-03 rev19.2)
+ title: OpenAMRobot 2.0 Detailed Hardware BOM, Issue 7.8, 15 October 2026 (earlier issue; canonical per P-03 rev19.2)
evidence: not held in any repository; provenance only, CI never reads it
BOM-Issue-7.7:
title: OpenAMRobot 2.0 Detailed Hardware BOM, Issue 7.7, 12 October 2026 (earlier issue; canonical per P-03 rev19.0)
@@ -140,16 +152,17 @@ exclude:
decisions:
- id: BOM-ISSUE-IN-FORCE
title: Canonical hardware BOM issue for OpenAMRobot 2.0
- summary: "BOM Issue 7.8 is the canonical OpenAMRobot 2.0 hardware BOM."
- fix_hint: "Name Issue 7.8 as canonical, or label older issues (Issue 6, Issue 7 to 7.7, B-01) as superseded or earlier."
+ summary: "BOM Issue 7.10 is the canonical OpenAMRobot 2.0 hardware BOM."
+ fix_hint: "Name Issue 7.10 as canonical, or label older issues (Issue 6, Issue 7 to 7.9, B-01) as superseded or earlier."
kind: value
status: recorded
- value: OpenAMRobot 2.0 Detailed Hardware BOM, Issue 7.8
+ value: OpenAMRobot 2.0 Detailed Hardware BOM, Issue 7.10
unit: none
- date: 2026-10-15
- review_by: 2026-11-26
- source: {document: P-03-rev19.2, item: "BOM issue in force (BOM Issue 7.8)"}
+ date: 2026-10-18
+ review_by: 2026-11-29
+ source: {document: P-03-rev19.6, item: "BOM issue in force (BOM Issue 7.10)"}
supersedes:
+ - {value: Issue 7.8, source: "P-03-rev19.2 BOM issue in force (BOM Issue 7.8)"}
- {value: Issue 7.7, source: "P-03-rev19.0 BOM issue in force (BOM Issue 7.7)"}
- {value: Issue 7.6, source: "P-03-rev18.9 item 16 (BOM Issue 7.6 carries the change)"}
- {value: Issue 7.3, source: P-03-rev18.7 BOM issue in force}
@@ -162,15 +175,15 @@ decisions:
check:
- pattern: '(?P(?:canonical|in force|of record)[^\n]{0,40}\bIssue\s*6\b|\bIssue\s*6\b[^\n]{0,40}\b(?:canonical|in force|of record))'
unless: 'supersed|replaced|previous|earlier'
- message: BOM Issue 7.8 is the canonical hardware BOM (P-03 rev19.2)
+ message: BOM Issue 7.10 is the canonical hardware BOM (P-03 rev19.6)
- pattern: '(?PB-01[^\n]{0,60}\b(?:canonical|current))'
unless: 'supersed'
message: B-01 is superseded
- - pattern: '(?P(?:canonical|in force|of record)[^\n]{0,40}\bIssue\s*7(?!\.8)(?:\.\d+)?\b|\bIssue\s*7(?!\.8)(?:\.\d+)?\b[^\n]{0,40}\b(?:canonical|in force|of record))'
+ - pattern: '(?P(?:canonical|in force|of record)[^\n]{0,40}\bIssue\s*7(?!\.10\b)(?:\.\d+)?\b|\bIssue\s*7(?!\.10\b)(?:\.\d+)?\b[^\n]{0,40}\b(?:canonical|in force|of record))'
unless: 'supersed|replaced|previous|earlier|historical'
- message: BOM Issue 7.8 is the canonical hardware BOM (P-03 rev19.2)
+ message: BOM Issue 7.10 is the canonical hardware BOM (P-03 rev19.6)
verification:
- machine: Issue 6, Issue 7 to 7.7 or B-01 presented as the canonical BOM; citations of P-03 rev18.1 line 7
+ machine: Issue 6, Issue 7 to 7.9 or B-01 presented as the canonical BOM; citations of P-03 rev18.1 line 7
human: {reviewer: platform-lead, evidence: the BOM file header and issue number in the released BOM}
owner: platform-lead
@@ -331,7 +344,7 @@ decisions:
unit: none
date: 2026-10-16
review_by: 2026-11-27
- source: {document: "Alex decision 2026-10-16", item: "Alex decision 16 Oct 2026 (platform-sw #70); P-03 next revision, item 19 D5"}
+ source: {document: P-03-rev19.4, item: "item 19 D5 update (Alex decision 16 Oct 2026, platform-sw #70)"}
supersedes:
- {value: "(0.0544, 0, 0.133), rpy 0", source: "measured against a displaced base plate in the CAD; superseded by Alex decision 16 Oct 2026 (platform-sw #70)"}
- {value: "(0.195, 0, -0.044) plus board stack", source: "Alex decision 12 Oct 2026, superseded by Alex decision 16 Oct 2026 (CAD Rev B, platform-hw #20)"}
@@ -590,7 +603,7 @@ decisions:
unit: none
date: 2026-10-16
review_by: 2026-11-27
- source: {document: "Alex decision 2026-10-16", item: "Alex decision 16 Oct 2026; P-03 next revision, item 19 D3"}
+ source: {document: P-03-rev19.4, item: "item 19 D3 update (Alex decision 16 Oct 2026)"}
supersedes:
- {value: "base camera Orbbec Gemini 336L, housing centre on the old camera centre, 142.5 mm above the floor, base_camera_link (0.376, 0, 0.0445) from base_link; front-panel opening about 126 x 36 mm on that centre; up-tilt 5, 10 or 15 degrees, baseline 10", source: "Alex decision 12 Oct 2026, superseded by Alex decision 16 Oct 2026 (CAD Rev B)"}
- {value: "base camera tilted about 10 degrees upward; head camera identity open", source: P-00-rev18.1 txt 85 and 97}
@@ -760,27 +773,29 @@ decisions:
- id: SAFETY-PROCUREMENT
title: Safety-chain procurement boundary (record only; this register implements no safety function)
- summary: "Exactly two E-stops, dual channel into a Pilz PNOZ s3 with monitored reset; K1, K2 LEV100H in series."
- fix_hint: "Name the two E-stops, PNOZ s3 and LEV100H K1/K2; no automotive relays; the EDM variant is gate EDM-STOP."
+ summary: "Two E-stops into a Pilz PNOZ s3 with monitored reset; K1, K2 Gigavac GX11CAC with linked NC auxiliaries."
+ fix_hint: "Name the PNOZ s3 and Gigavac GX11CAC K1/K2; label LEV100H and K1/K2 firmware feedback as superseded."
kind: limit
status: recorded
values:
- exactly two E-stops; base front Schneider XB4BS8445 with one ZBE-102 block; chest button from the OpenArm kit
- dual channel into a Pilz PNOZ s3 24 V DC (750103) with monitored manual reset
- - K1 and K2 TE KILOVAC LEV100H, normally open, in series; auxiliary NC contacts in the reset circuit (EDM)
- - the linked-auxiliary variant is gate EDM-STOP before ordering
+ - K1 and K2 Gigavac GX11CAC (150 A, 24 V coil with internal suppression), normally open, in series; each with one SPST-NC auxiliary, mechanically linked, in the PNOZ reset loop
+ - ordering (BUY-32) is gated on the GX11CAC datasheet checks
- CTL-004 is bench-only until an installed solution is qualified (P-03-rev18.1 item 5, unchanged)
unit: none
- date: 2026-10-15
- review_by: 2026-11-26
- source: {document: P-03-rev19.2, item: "items 5 and 20; detail in E-01-rev1.1"}
+ date: 2026-10-18
+ review_by: 2026-11-29
+ source: {document: P-03-rev19.6, item: "item 22 (contactors); E-stops and PNOZ per P-03-rev19.2 items 5 and 20; detail in E-01-rev1.3"}
supersedes:
+ - {value: "K1 and K2 TE KILOVAC LEV100H, normally open, in series; auxiliary NC contacts in the reset circuit (EDM); the linked-auxiliary variant is gate EDM-STOP before ordering", source: "P-03-rev19.2 items 5 and 20, E-01-rev1.1"}
+ - {value: "separate K1/K2 contactor feedback read by the firmware", source: "earlier contactor design; replaced by the linked auxiliaries in the PNOZ reset loop, P-03-rev19.6 item 22"}
- {value: "two installed E-stops, dual normally-closed channels into a monitored safety relay; K1 and K2 from the LEV100 family, linked-feedback (EDM) variant unselected under one CONTACTOR gate", source: P-03-rev18.1 items 4 and 5 lines 12-13}
applies_to: {repositories: ["*"], files: ["**/*.md", "**/*.yaml", "**/*.yml", "**/*.html"]}
check:
- pattern: '(?P(?:EDM|linked[- ]feedback) variant[^\n]{0,30}\b(?:selected|chosen|decided))'
- unless: '\bnot\b|unselected|open|EDM-STOP'
- message: the EDM variant is not selected; it is gate EDM-STOP before ordering
+ unless: '\bnot\b|unselected|open|EDM-STOP|GX11CAC|BUY-32'
+ message: the linked-auxiliary contactor is the Gigavac GX11CAC; ordering (BUY-32) is gated on the datasheet checks (P-03 rev19.6 item 22)
- pattern: '(?Pfine for prototyp\w*|single[- ]contact[^\n]{0,30}e-?stop)'
message: no single-channel or uncertified E-stop recommendation
- pattern: '(?PCTL-004[^\n]{0,60}\b(?:installed|robot interface))'
@@ -788,10 +803,41 @@ decisions:
message: CTL-004 is bench-only
- pattern: '(?Pautomotive relays?[^\n]{0,40}\b(?:E-?stop|K1|K2|contactors?)\b|\b(?:E-?stop|K1|K2)\b[^\n]{0,40}automotive relays?)'
unless: 'supersed|legacy|historical|removed|dropped|no longer|earlier|previous|v0\.0\.1|\bnot\b|never|Gate A'
- message: K1 and K2 are TE KILOVAC LEV100H contactors; automotive relays are not the 2.0 E-stop (P-03 rev19.2 item 20)
+ message: K1 and K2 are Gigavac GX11CAC contactors; automotive relays are not the 2.0 E-stop (P-03 rev19.6 item 22)
+ - pattern: '(?P\bLEV100H?\b)'
+ unless: 'supersed|legacy|historical|replaced|removed|dropped|no longer|earlier|previous|v0\.0\.1'
+ message: K1 and K2 are Gigavac GX11CAC contactors; label LEV100H material as superseded (P-03 rev19.6 item 22)
verification:
- machine: text claiming the EDM variant is chosen, recommending a single-channel or uncertified E-stop, presenting CTL-004 as installed, or naming automotive relays as the 2.0 E-stop
- human: {reviewer: platform-lead, evidence: safety-chain design and component certificates; two human approvals per the repository ruleset}
+ machine: text claiming the EDM variant is chosen without the GX11CAC or BUY-32, recommending a single-channel or uncertified E-stop, presenting CTL-004 as installed, naming automotive relays as the 2.0 E-stop, or LEV100H outside superseded or historical context
+ human: {reviewer: platform-lead, evidence: "safety-chain design, GX11CAC datasheet checks for BUY-32 and component certificates; two human approvals per the repository ruleset"}
+ owner: electrical-owner
+
+ - id: SAFETY-CHAIN-IO
+ title: Controller I/O for the safety chain and charging (item 22)
+ summary: "Y32 via one ISO1212; E-stop spare NO, RESET NC and charger fault inputs; TPL7407L for RESET lamp and KCHG."
+ fix_hint: "Read Y32 through the ISO1212; no separate K1/K2 feedback input; label older contactor feedback as superseded."
+ kind: configuration
+ status: recorded
+ values:
+ - Y32 read through one ISO1212 module
+ - base E-stop spare NO contact as a diagnostic input
+ - RESET NC contact input
+ - charger fault input
+ - TPL7407L outputs for the RESET lamp and KCHG
+ unit: none
+ date: 2026-10-18
+ review_by: 2026-11-29
+ source: {document: P-03-rev19.6, item: "item 22 (controller I/O); detail in E-01-rev1.3"}
+ supersedes:
+ - {value: "separate K1/K2 contactor feedback read by the firmware", source: "earlier contactor design; replaced by the linked auxiliaries in the PNOZ reset loop, P-03-rev19.6 item 22"}
+ applies_to: {repositories: ["*"], files: ["**/*.md", "**/*.yaml", "**/*.yml", "**/*.html"]}
+ check:
+ - pattern: '(?P\b(?:K1|K2|contactors?)\b[^\n]{0,40}\bfeedback\b[^\n]{0,40}\b(?:firmware|STM32|MCU|GPIO)\b|\b(?:firmware|STM32|MCU)\b[^\n]{0,40}\b(?:K1|K2|contactors?)\b[^\n]{0,20}\bfeedback\b)'
+ unless: 'supersed|legacy|historical|replaced|removed|dropped|no longer|earlier|previous|v0\.0\.1|\bno\b|\bnot\b|never|without|PNOZ'
+ message: there is no separate K1/K2 feedback to the firmware; the linked auxiliaries sit in the PNOZ reset loop and the controller reads Y32 (P-03 rev19.6 item 22)
+ verification:
+ machine: K1/K2 or contactor feedback wired to the firmware, STM32, MCU or a GPIO outside superseded or historical context
+ human: {reviewer: platform-lead, evidence: "E-01 rev1.3 controller I/O allocation (ISO1212, TPL7407L) and the safety-chain test record; two human approvals per the repository ruleset"}
owner: electrical-owner
- id: ESTOP-SCOPE
@@ -917,10 +963,11 @@ decisions:
- main fuse F0 110 A Class T, then a lockable battery disconnect
- no circuit breaker
- branch fuses per the B-02 fuse schedule
+ - F-LIFT 15 A with 2.5 mm2 cable
unit: none
- date: 2026-10-15
- review_by: 2026-11-26
- source: {document: P-03-rev19.2, item: "item 20; detail in E-01-rev1.1"}
+ date: 2026-10-18
+ review_by: 2026-11-29
+ source: {document: P-03-rev19.6, item: "item 22 (F-LIFT 15 A with 2.5 mm2 cable); main protection per P-03-rev19.2 item 20; detail in E-01-rev1.3"}
applies_to:
repositories: ["openamr-platform-*", "openamrobot-docs"]
files: ["**/*.md", "**/*.yaml", "**/*.yml", "**/*.html"]
@@ -930,7 +977,7 @@ decisions:
message: main protection is fuse F0 110 A Class T and a lockable disconnect; no circuit breaker (P-03 rev19.2 item 20)
verification:
machine: a main or battery circuit breaker in the 2.0 power path
- human: {reviewer: platform-lead, evidence: "E-01 rev1.1 single-line diagram and the B-02 fuse schedule"}
+ human: {reviewer: platform-lead, evidence: "E-01 rev1.3 single-line diagram and the B-02 fuse schedule, including F-LIFT"}
owner: electrical-owner
- id: COMPUTE
@@ -968,7 +1015,7 @@ decisions:
backup: RPLIDAR S2E, only if the S3 is unavailable
date: 2026-10-16
review_by: 2026-11-27
- source: {document: "Alex decision 2026-10-16", item: "Alex decision 16 Oct 2026; P-03 next revision, item 19 D4"}
+ source: {document: P-03-rev19.4, item: "item 19 D4 update (Alex decision 16 Oct 2026)"}
supersedes:
- {value: "MMP.07 bracket and 10 mm standoffs with a 7.1 mm spacer plate; scan plane 222.0 mm above the floor", source: "Alex decision 12 Oct 2026, superseded by Alex decision 16 Oct 2026 (CAD Rev B, platform-hw #20)"}
- {value: Hokuyo UST-10LX, source: P-03-rev18.3 item 11 (dropped on cost)}
diff --git a/tests/test_check_decisions.py b/tests/test_check_decisions.py
index 6ff750c..bec93cb 100644
--- a/tests/test_check_decisions.py
+++ b/tests/test_check_decisions.py
@@ -401,12 +401,12 @@ def test_bom_issue_in_force(self):
self.assertEqual(self.ids("docs/a.md", "BOM per P-03 rev18.1 line 7.\n", "x"), ["BOM-ISSUE-IN-FORCE"])
self.assertEqual(self.ids("docs/a.md", "Issue 7.6 is canonical; Issue 6 is superseded.\n", "x"), [])
- def test_bom_issue_7_8_in_force(self):
- for text in ("The canonical BOM is Issue 7.\n", "BOM Issue 7.2 is the BOM of record.\n",
- "BOM Issue 7.6 is canonical.\n", "BOM Issue 7.7 is canonical.\n"):
+ def test_bom_issue_7_10_in_force(self):
+ for text in ("The canonical BOM is Issue 7.\n", "BOM Issue 7.1 is the BOM of record.\n",
+ "BOM Issue 7.8 is canonical.\n", "BOM Issue 7.9 is canonical.\n"):
self.assertEqual(self.ids("docs/a.md", text, "x"), ["BOM-ISSUE-IN-FORCE"], text)
- for text in ("BOM Issue 7.8 is canonical.\n", "Issue 7.7 was canonical until Issue 7.8 superseded it.\n",
- "The earlier canonical BOM was Issue 7.7.\n"):
+ for text in ("BOM Issue 7.10 is canonical.\n", "Issue 7.8 was canonical until Issue 7.10 superseded it.\n",
+ "The earlier canonical BOM was Issue 7.8.\n"):
self.assertEqual(self.ids("docs/a.md", text, "x"), [], text)
# P-03 rev19.2 item 20 (E-01 rev1.1): each check flags the stale wording and accepts a
@@ -424,7 +424,7 @@ def test_automotive_relays_are_not_the_2_0_estop(self):
for text in ("K1 and K2 are automotive relays.\n", "Use automotive relays for the E-stop contactors.\n"):
self.assertEqual(self.ids("docs/a.md", text, "x"), ["SAFETY-PROCUREMENT"], text)
for text in ("Automotive relays as K1 and K2 (superseded; v0.0.1 only).\n",
- "K1 and K2 are TE KILOVAC LEV100H contactors.\n"):
+ "K1 and K2 are Gigavac GX11CAC contactors.\n"):
self.assertEqual(self.ids("docs/a.md", text, "x"), [], text)
def test_edm_variant_is_gate_edm_stop(self):
@@ -432,6 +432,27 @@ def test_edm_variant_is_gate_edm_stop(self):
self.assertEqual(self.ids("docs/a.md", "The EDM variant is decided at gate EDM-STOP before ordering.\n",
"x"), [])
+ # P-03 rev19.6 item 22 (E-01 rev1.3): Gigavac GX11CAC contactors, linked auxiliaries in the PNOZ reset loop.
+ def test_linked_auxiliary_variant_is_the_gx11cac(self):
+ self.assertEqual(self.ids("docs/a.md", "The EDM variant is selected: Gigavac GX11CAC, BUY-32 pending.\n",
+ "x"), [])
+
+ def test_lev100h_is_superseded(self):
+ for text in ("K1 and K2 are TE KILOVAC LEV100H contactors.\n", "Contactor: LEV100 family, normally open.\n"):
+ self.assertEqual(self.ids("docs/a.md", text, "x"), ["SAFETY-PROCUREMENT"], text)
+ for text in ("K1 and K2 were LEV100H (superseded by the Gigavac GX11CAC).\n",
+ "Historical: TE KILOVAC LEV100H in rev19.2.\n"):
+ self.assertEqual(self.ids("docs/a.md", text, "x"), [], text)
+
+ def test_no_separate_k1_k2_firmware_feedback(self):
+ for text in ("K1 and K2 feedback is read by the firmware on two inputs.\n",
+ "The STM32 monitors K1/K2 feedback.\n", "Contactor feedback goes to an STM32 GPIO.\n"):
+ self.assertEqual(self.ids("docs/a.md", text, "x"), ["SAFETY-CHAIN-IO"], text)
+ for text in ("K1/K2 feedback to the firmware (superseded by P-03 rev19.6 item 22).\n",
+ "The K1 and K2 auxiliaries sit in the PNOZ reset loop; the firmware reads Y32.\n",
+ "There is no K1/K2 feedback input to the firmware.\n"):
+ self.assertEqual(self.ids("docs/a.md", text, "x"), [], text)
+
def test_estop_cuts_actuator_power_only(self):
repo = "openamr-platform-hw"
for text in ("The E-stop cuts all power to the robot.\n", "Pressing the E-stop shuts down the Jetson.\n"):