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"):