Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ are in [AGENTS.md](AGENTS.md).
- Do not change E-stop, brake, contactor, watchdog, motor-enable or charge-inhibit logic
unless the platform lead has agreed it in the issue; such changes need two human reviewers.

**Hardware and procurement.** Every part in a BOM or procurement list must be available from
stock at two or more independent suppliers. A single-source part may appear only as a named
option next to a second-sourced alternative, and a part with no stock is not selected. The rule
is recorded as COMPONENT-AVAILABILITY in [decisions.yaml](decisions.yaml) (P-03 rev20.2 item
26). The automated check reads wording only; the reviewer checks the supplier columns.

## 4. Open a draft pull request

Open the PR as a **draft** and fill in every section of the template: work package,
Expand Down
39 changes: 39 additions & 0 deletions STATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# STATE

Read this file before any work in this repository and update it in the same PR as the work.
The PR evidence check fails when STATE.md exists and a PR neither updates it nor says
"no change" with a reason. Keep it under 60 lines; facts only, each with a date or SHA.

## Repository

- Type and lifecycle: governance, active
- Readiness: not recorded
- Owner role: platform-lead (decisions.yaml); ci-owner (tools/, workflows)
- Verification: `bash rollout/verify.sh`, `python3 tools/check_decisions.py --decisions decisions.yaml --maintainers maintainers.yaml --validate-only`, `python3 tools/check_agent_rules.py --canonical agent-rules/SHARED_RULES.md --file AGENTS.md`; last PASS on main not recorded here (file added 2026-11-01; branch rebased on ed98001)

## Register in force

- `in_force`: P-03-rev20.2, 2026-11-01 (change request #77); on main ed98001 (#73 merged) it is P-03-rev20.1, 2026-10-30
- Canonical BOM: Issue 7.14 (BOM-ISSUE-IN-FORCE), from 2026-11-01

## Current work

| Work package | Branch or PR | Status | Next step |
|---|---|---|---|
| #77 | #78 (claude/optimistic-sagan-oqc2lu) | draft, rebased on ed98001 | owner review of the P-03 rev20.2 item 26 values and the OPERATOR-PANEL portrait change |
| P-03 rev20.1 | #73 | merged as ed98001 (2026-11-01) | none; its OPERATOR-PANEL portrait check is narrowed in #78 |
| PLATFORM-PIN | #74 | open, not merged (2026-11-01) | touches decisions.yaml; rebase after whichever merges first |

## Decisions this repository implements

This repository holds the register (decisions.yaml) and its checkers; it implements no robot values.

## Known gaps

- Safety-path register updates (precharge fitted, K1/K2 decision 2 Nov 2026) left to the electrical owner; SAFETY-PROCUREMENT and SAFETY-CHAIN-IO unchanged since 71c439e
- "Chest E-stop" wording retirement (P-03 rev20.2 item 26) not recorded; it belongs to SAFETY-PROCUREMENT

## Not verified

- Register values against the P-03 rev20.2 source document (held outside any repository), since 2026-11-01
- Scans of consumer repositories against the new patterns, since 2026-11-01
12 changes: 7 additions & 5 deletions WATCHDOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,19 +121,19 @@ identical to the register.
<!-- BEGIN ACCEPTED WORDS -->
| Decision | Status | Accepted on the same line (any one; case does not matter) |
|---|---|---|
| BOM-ISSUE-IN-FORCE | recorded | *BOM Issue 7.10 is the canonical hardware BOM*: `supersed (superseded, supersedes)`, `replaced`, `previous`, `earlier`<br>*B-01 is superseded*: `supersed (superseded, supersedes)`<br>*BOM Issue 7.10 is the canonical hardware BOM*: `supersed (superseded, supersedes)`, `replaced`, `previous`, `earlier`, `historical`<br>*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 |
| BOM-ISSUE-IN-FORCE | recorded | *BOM Issue 7.14 is the canonical hardware BOM*: `supersed (superseded, supersedes)`, `replaced`, `previous`, `earlier`<br>*B-01 is superseded*: `supersed (superseded, supersedes)`<br>*BOM Issue 7.14 is the canonical hardware BOM; Issue 7 to 7.13 (including 7.10 and 7.11) are retired*: `supersed (superseded, supersedes)`, `replaced`, `previous`, `earlier`, `historical`<br>*superseded source still cited (P-03-rev18.1 line 7); cite P-03-rev20.2*: 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` |
| MAX-ASSEMBLED-HEIGHT | recorded | *maximum assembled height is 1700 mm*: no label; correct the line or add a decision-allow marker<br>*1700 mm is the assembled-height envelope, not a shoulder height or mast position*: `max`, `envelope`, `not shoulder, not the shoulder`, `higher`, `supersed (superseded, supersedes)` |
| DATUM-HEIGHT-STACK | recorded | *the steel chassis deck top is 294 mm above the floor*: `supersed (superseded, supersedes)`, `historical`, `legacy`, `earlier`, `previous`<br>*the lift base-plate top face is 304 mm above the floor, the reference for lift and shoulder heights*: `supersed (superseded, supersedes)`, `historical`, `legacy`, `earlier`, `previous` |
| FRAMES-REP105 | recorded | *base_link is at the drive-axle midpoint and axle height; base_footprint is on the floor*: `base_footprint`, `not`, `never`, `supersed (superseded, supersedes)`, `historical`, `legacy`<br>*base_footprint is on the floor under the drive-axle midpoint*: `not`, `never`, `supersed (superseded, supersedes)`, `historical`, `legacy`<br>*imu_link sits on the centreline away from motor magnetic fields*: `away`, `not`, `never`, `supersed (superseded, supersedes)`, `historical`, `legacy` |
| FRAMES-REP105 | recorded | *base_link is at the drive-axle midpoint and axle height; base_footprint is on the floor*: `base_footprint`, `not`, `never`, `supersed (superseded, supersedes)`, `historical`, `legacy`<br>*base_footprint is on the floor under the drive-axle midpoint*: `not`, `never`, `supersed (superseded, supersedes)`, `historical`, `legacy`<br>*imu_link sits on the centreline away from motor magnetic fields*: `away`, `not`, `never`, `supersed (superseded, supersedes)`, `historical`, `legacy`<br>*the imu_link board is the TDK EV_ICM-42688-P; MIKROE-4237 is superseded*: `supersed (superseded, supersedes)`, `replac`, `historical`, `legacy`, `earlier`, `previous`, `no longer`, `was`, `instead of` |
| NEAR-FIELD-FRAMES | recorded | *the ToF cliff pitch is 10 degrees down, not 20*: `supersed (superseded, supersedes)`, `replac`, `previous`, `earlier`, `historical`, `instead of`, `was 20`, `from 20`<br>*the 10 degree ToF pitch is confirmed only by the bench test*: `bench`, `until` |
| BATTERY-PLACEMENT | recorded | `supersed (superseded, supersedes)`, `historical`, `previous`, `earlier`, `rev 18.1 to rev 18.6` |
| SPEED-CEILING | recorded | *1.5 m/s is a command ceiling, not an operating limit*: `ceiling`, `analytical`<br>*1.5 m/s is not an accepted operating speed*: `ceiling`, `analytical`, `not` |
| DRIVETRAIN | recorded | *the selected motor variant is ZLLG80ASM250-L-B*: no label; correct the line or add a decision-allow marker<br>*ZLTECH is the selected 2.0 drivetrain, not an option*: no label; correct the line or add a decision-allow marker<br>*brake fail-safe function and ratings are open supplier-evidence gates*: `pending`, `F2A`, `verif`, `not yet`, `unverified` |
| DRIVETRAIN | recorded | *the selected motor variant is ZLLG80ASM250-L-B*: no label; correct the line or add a decision-allow marker<br>*ZLTECH is the selected 2.0 drivetrain, not an option*: no label; correct the line or add a decision-allow marker<br>*brake ratings are recorded (ZLTECH 18 Oct 2026); the fail-safe behaviour still needs verification evidence*: `pending`, `F2A`, `verif`, `not yet`, `unverified` |
| RS485-NOT-IN-2-0 | recorded | *RS485 is not provisioned in 2.0*: `not used`, `no RS485`, `not provisioned`, `without`, `legacy`, `Gate A`, `removed`, `not in 2.0`<br>*CAN1 and CAN2 are dedicated; no upper-body serial link to the base*: no label; correct the line or add a decision-allow marker |
| BASE-CONTROLLER-GATES | recorded | *Teensy is the Gate A controller and the release fallback, not a bench target*: no label; correct the line or add a decision-allow marker<br>*the Gate A IMU is the MPU6500*: `would return`, `labeled`, `labelled`, `assumed`, `not a real`, `instead of`, `USE_MPU6050`, `driver` |
| BASE-CONTROLLER-GATES | recorded | *Teensy is the Gate A controller and the release fallback, not a bench target*: no label; correct the line or add a decision-allow marker<br>*the Gate A IMU is the MPU6500*: `would return`, `labeled`, `labelled`, `assumed`, `not a real`, `instead of`, `USE_MPU6050`, `driver`<br>*the 2.0 IMU board is the TDK EV_ICM-42688-P on SPI4; MIKROE-4237 is superseded*: `supersed (superseded, supersedes)`, `replac`, `historical`, `legacy`, `earlier`, `previous`, `no longer`, `was`, `instead of` |
| BASE-CONTROLLER-IO | recorded | *the base controller is the STM32H723ZG on the NUCLEO-H723ZG; label STM32H743 / NUCLEO-H743ZI2 material as superseded*: `supersed (superseded, supersedes)`, `legacy`, `historical`, `replaced`<br>*the ultrasonic sensors are four MaxBotix MB7060 on dedicated STM32 UARTs at 9600 8N1; no sensor I2C*: `supersed (superseded, supersedes)`, `legacy`, `historical`, `replaced`<br>*micro-ROS runs over UDP on Ethernet between MCU and Jetson; USB is for the bench only*: `bench`, `legacy`, `Gate A`, `Teensy`, `supersed (superseded, supersedes)`, `historical`<br>*the base has four MaxBotix MB7060 (edge holes) and two TF-Luna ToF cliff sensors (centre holes)*: `supersed (superseded, supersedes)`, `legacy`, `historical` |
| IMU-TOPIC-OWNERSHIP | recorded | *firmware publishes /imu/data_raw; /imu/data belongs to the host filter*: `host`, `filter (not unfiltered)`, `EKF`, `madgwick`, `must not`, `never`, `outdated`, `older revision(s)`<br>*firmware must not publish filtered /imu/data*: no label; correct the line or add a decision-allow marker |
| CAMERAS | recorded | *the base camera is the Orbbec Gemini 336L*: `legacy`, `historical`, `previous`, `not used`, `replaced`<br>*the base camera tilts about 10 degrees up*: no label; correct the line or add a decision-allow marker<br>*the 2.0 base camera is the Orbbec Gemini 336L*: `legacy`, `Gate A`, `historical`<br>*the Gemini 336L up-tilt positions are 5, 10 and 15 degrees, baseline 10*: `supersed (superseded, supersedes)`, `historical`, `legacy`<br>*the base camera is not at 243 mm; base_camera_link is (0.387, 0, 0.046) from base_link*: `supersed (superseded, supersedes)`, `historical` |
Expand Down Expand Up @@ -163,8 +163,10 @@ identical to the register.
| UI-MANUAL-VELOCITY-INPUT | open | not scanned until the decision is taken |
| STATUS-VOCABULARY | recorded | `not`, `never`, `only`, `hardwired`, `STOPPED \(SOFTWARE\)` |
| STOP-SCOPE | recorded | *E-stop means only the hardwired buttons; the UI control is Stop (software), a functional stop*: `not`, `never`, `no`, `supersed (superseded, supersedes)`, `historical`<br>*Stop (software) covers base motion only today and is labelled base-only*: `target`, `planned`, `future`, `will`, `not`, `base[- ]only`<br>*Stop (software) is a functional stop, not a safety function*: `not`, `never`, `functional` |
| OPERATOR-PANEL | recorded | *the operator panel is the Getac ZX80, 8 inch, 1920 x 1200, landscape*: `supersed (superseded, supersedes)`, `replac`, `historical`, `earlier`, `previous`, `was`<br>*the ZX80 operator panel is used in landscape*: `not`, `never` |
| OPERATOR-PANEL | recorded | *the operator panel is the Getac ZX80, 8 inch, 1920 x 1200*: `supersed (superseded, supersedes)`, `replac`, `historical`, `earlier`, `previous`, `was`<br>*the ZX80 is landscape by default; portrait is the second locked position*: `supersed (superseded, supersedes)`, `historical`, `not`, `was`, `landscape \(?(?:by )?default` |
| UI-GATE-A | recorded | `partial`, `A1`, `supersed (superseded, supersedes)`, `historical`, `was`, `6 Nov` |
| COMPONENT-AVAILABILITY | recorded | `option`, `alternative`, `second[- ]source`, `not`, `never`, `supersed (superseded, supersedes)`, `historical` |
| TABLET-MOUNT | recorded | *the tablet mount default is landscape; portrait is the second locked position*: `supersed (superseded, supersedes)`, `historical`, `not`, `was`, `landscape \(?(?:by )?default`<br>*the tablet position is a mount setting, not a configuration ID*: `not`, `never`, `supersed (superseded, supersedes)`, `historical` |
<!-- END ACCEPTED WORDS -->

## Approved public contacts
Expand Down
Loading