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
2 changes: 1 addition & 1 deletion docs/DERP_REACHABILITY_INVESTIGATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ does endpoint *learning* but not the full validation/fallback state machine —

Ranked cheap→involved:
1. **Fleet-configured peer (cheapest, test FIRST).** It may be enough to have
**pstop-fleet configure the DUT with a peer** (the management host / a
**the management backend configure the DUT with a peer** (the management host / a
machine) so the DUT initiates + maintains the link *outbound*, which is the
direction that already works. The OTA-push channel already proves the DUT
pulls config outbound. **If this alone restores reachability, document it
Expand Down
2 changes: 1 addition & 1 deletion docs/MACHINE_ESP32_DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ carries **no safety responsibility**.
- The machine runs the same fleet check-in code but registers with
**`device_type: "machine"`** in the check-in payload (new field,
remotes implicitly `"remote"`).
- **Server-side enforcement (required, fleet-console work):** the console
- **Server-side enforcement (required, management-console work):** the console
must refuse to assign remote firmware to `device_type != remote` —
machines get their own image lineage or nothing. This needs a handoff
item to the console session before any machine unit ships.
Expand Down
2 changes: 1 addition & 1 deletion docs/MACHINE_ROS2_NODE_DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ ros2 run protective_stop_machine machine_bridge_node \
# Optional fleet console check-in (software backend only, both default
# DISABLED on an empty url). Prefer the ENVIRONMENT for the secrets:
# PSTOP_ANNOUNCE_URL / PSTOP_ANNOUNCE_KEY_FILE and
# PSTOP_FLEET_CHECKIN_URL / PSTOP_FLEET_API_KEY_FILE override these.
# PSTOP_CHECKIN_URL / PSTOP_CHECKIN_API_KEY_FILE override these.
announce: # lightweight overview check-in
url: '' # read_only; empty = disabled
key_file: '' # read_only; chmod-600 bearer token
Expand Down
2 changes: 1 addition & 1 deletion firmware/components/dcs_support/src/dcs_admin_html.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ static const char k_index_html[] =
"<link rel='icon' href=\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>"
"<text y='.9em' font-size='90'>" DCS_PAGE_ICON
"</text></svg>\">"
/* Palette + component styles adopted from the pstop-fleet console so the
/* Palette + component styles adopted from the management console so the
* two consoles read as one system. Same CSS custom properties/tokens. */
"<style>*{box-sizing:border-box}"
":root{--bg:#0d1117;--panel:#161b22;--panel2:#1b212a;--line:#30363d;"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2026 Polymath Robotics, Inc.
// SPDX-License-Identifier: Apache-2.0
//
// FleetCheckin — optional periodic DEVICE CHECK-IN to pstop-fleet so a software
// FleetCheckin — optional periodic DEVICE CHECK-IN to the management backend so a software
// machine registers there EXACTLY like an ESP32 machine does: a
// `device_type:"machine"` device with full metadata, not just the lighter
// [announce] overview ping. It mirrors the ESP32's fleet_ota_checkin()
Expand Down Expand Up @@ -43,7 +43,7 @@ namespace protective_stop_machine
{

// Deployment values for the fleet check-in. Prefer the environment for the base
// URL + key file (PSTOP_FLEET_CHECKIN_URL / PSTOP_FLEET_API_KEY_FILE) so the
// URL + key file (PSTOP_CHECKIN_URL / PSTOP_CHECKIN_API_KEY_FILE) so the
// proprietary fleet URL/key stay out of committed config. Disabled when the base
// URL is empty. `base_url` is a BASE (e.g. http://fleet.example:8000); the client
// appends `/api/v1/checkin` itself, exactly as the ESP32 hardcodes that path.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class MachineBridgeNode : public rclcpp_lifecycle::LifecycleNode
uint32_t machine_id_{0};

// Fleet DEVICE check-in (optional, opt-in, software backend only). Registers
// the software machine with pstop-fleet like an ESP32 machn; resolved at
// the software machine with the management backend like an ESP32 machn; resolved at
// configure time, the thread runs only while ACTIVE. Additive to the announcer.
FleetCheckinConfig fleet_cfg_;

Expand Down
6 changes: 3 additions & 3 deletions ros2/protective_stop_machine/src/machine_bridge_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,19 +88,19 @@ bool MachineBridgeNode::build_backend(std::string & error)

// Resolve the optional fleet DEVICE check-in (software machine only — the
// ESP32 machn checks itself in). This registers the software machine with
// pstop-fleet as a device_type="machine" device, mirroring the chip's
// the management backend as a device_type="machine" device, mirroring the chip's
// fleet_ota_checkin(); it is additive to the lighter announce above. The
// [60, 300] cadence is enforced declaratively by the params bounds<>. Env
// overrides the params so the proprietary URL/key stay out of committed config.
fleet_cfg_.base_url = params_.fleet.checkin_url;
fleet_cfg_.key_file = params_.fleet.api_key_file;
fleet_cfg_.interval_s = static_cast<int>(params_.fleet.check_interval_s);
if (const char * env_url = std::getenv("PSTOP_FLEET_CHECKIN_URL");
if (const char * env_url = std::getenv("PSTOP_CHECKIN_URL");
env_url && env_url[0] != '\0')
{
fleet_cfg_.base_url = env_url;
}
if (const char * env_key = std::getenv("PSTOP_FLEET_API_KEY_FILE");
if (const char * env_key = std::getenv("PSTOP_CHECKIN_API_KEY_FILE");
env_key && env_key[0] != '\0')
{
fleet_cfg_.key_file = env_key;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,14 +140,14 @@ protective_stop_machine:
gt_eq<>: 1

# Optional fleet DEVICE CHECK-IN (software backend only). Registers this
# software machine with pstop-fleet EXACTLY like an ESP32 machine does — a
# software machine with the management backend EXACTLY like an ESP32 machine does — a
# `device_type:"machine"` device record with full metadata — by POSTing the
# ESP32 check-in schema to <checkin_url>/api/v1/checkin every check_interval_s
# (plus an immediate boot check-in). Complementary to announce.* (which feeds
# the live overview); default DISABLED (empty url). Entirely off the safety
# path: a dead fleet only logs, and no firmware OTA is ever attempted. Prefer
# the ENVIRONMENT for the secrets — PSTOP_FLEET_CHECKIN_URL and
# PSTOP_FLEET_API_KEY_FILE override the two keys below so the proprietary fleet
# the ENVIRONMENT for the secrets — PSTOP_CHECKIN_URL and
# PSTOP_CHECKIN_API_KEY_FILE override the two keys below so the proprietary fleet
# URL/key stay out of committed config.
fleet:
checkin_url:
Expand Down
2 changes: 1 addition & 1 deletion ros2/protective_stop_machine/test/test_fleet_checkin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// disabled-when-empty guard on the real FleetCheckin (which never posts when the
// base URL is empty). Locks in that the body matches the ESP32
// fleet_ota_checkin() schema (device_type="machine" + the required metadata) so
// pstop-fleet registers a software machine identically to a chip.
// the management backend registers a software machine identically to a chip.
#include <gtest/gtest.h>

#include <string>
Expand Down
2 changes: 1 addition & 1 deletion tools/hil/ONBOARDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ path there:
unit into download mode over HTTP and flashes over USB. Needs the
(git-ignored) `production_image/` secrets baked locally on the runner.
Fleet-server URL and API key are PROPRIETARY: provide them to the runner
as environment/secret (`PSTOP_FLEET_URL`, key file) — they must never
as environment/secret (`PSTOP_CHECKIN_URL`, `PSTOP_CHECKIN_API_KEY_FILE`) — they must never
appear in committed files (same rule as `sdkconfig.credentials`).
3. **Flash verification — DONE (firmware >= 4c90711)**: `state.json`
reports `fw_ver` (git short hash) and `fw_sha` (truncated ELF SHA-256).
Expand Down
Loading