From b132965e151eef942fda2dcdbc89fe43303908b2 Mon Sep 17 00:00:00 2001 From: ScottW514 Date: Wed, 2 Sep 2026 08:15:12 -0400 Subject: [PATCH] docs: the runbook's settings inventory and the bench page's help links are current BRINGUP named nine cool_* tunables (there are thirty), a cool_fire_ir_delta key nothing reads, and panel source files that no longer exist; the inventory is the present one. The bench page's help popovers pointed at a documentation host and paths that do not exist; they open the site. --- docs/BRINGUP.md | 21 ++++++++++++++------- forgetest/forgetest/ui/help.js | 12 ++++++------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/docs/BRINGUP.md b/docs/BRINGUP.md index c8e8dcc..e172958 100644 --- a/docs/BRINGUP.md +++ b/docs/BRINGUP.md @@ -440,7 +440,7 @@ One ulfius daemon serves it all: - `GET /` — the tabbed control panel (**Status / Machine / GF Cloud / GRBL / Diagnostics / Logs / System**; sources in `forgectrl/src/ui/`, - `index.html` + `panel.css` + `panel.js`, bundled into the binary by + `index.html`, `panel.js`, `forms.js`, `help.js` and `theme.css`, bundled into the binary by `embed.cmake`; `tools/devserver.py` and the repo's `.devcontainer/` serve the same panel on a workstation against a live board or a mock). Status carries the controller-mode selector, the operational dashboard, a scaled lid @@ -461,11 +461,10 @@ One ulfius daemon serves it all: and 409 while a diagnostic owns the hardware; a multi-key POST lands as one atomic replace. Keys: `controller_mode`, `homing_mode`, `gfcloud_home_x/y/z`, `gfcloud_home_timeout_s`, `gf_serial`, `gf_password`, `ui_units`, - `wifi_country`, the nine `cool_*` tunables, `laser_button_timeout_s`, + `wifi_country`, the thirty `cool_*` tunables, `laser_button_timeout_s`, `laser_disarm_s`, `rail_settle_s`, `lid_lamp_idle`, `lid_policy`, - `cloud_pause_backtrack_ticks`, `cloud_resume_lead_ticks`, the twelve + `cloud_pause_backtrack_ticks`, `cloud_resume_lead_ticks`, `cloud_hold_max_s`, the twelve `log__disk|_remote` levels and `syslog_server|port|proto`. - `cool_fire_ir_delta` is a hand-edited conf key, not a panel setting. - `GET /mode`, `POST /mode?controller=grbl|cloud` — the supervisor: current mode, controller state (`running | stopped | standby | motion-fault`), pid, and the motion-liveness verdict (`verified | unverified | fault`); the POST is @@ -592,9 +591,17 @@ hard-abort at 48 °C downstream: gates between; reports both bands and recommends threshold = (flow max + no-flow min)/2 with an Apply button, or refuses when the gap is under 3 °C. -**Cooling tunables are conf-backed**: the nine `cool_*` keys (`flow_rise`, -`flow_heater_pct`, `flow_check_s`, `recheck_s`, `confirm_max_s`, `temp_max`, -`temp_resume`, `cooldown_s`, `cooldown_max_s`) live in `/data/forgefirm.conf` +**Cooling tunables are conf-backed**: the thirty `cool_*` keys (the flow +check: `flow_rise`, `flow_heater_pct`, `flow_check_s`, `recheck_s`, +`confirm_max_s`, `laser_heat_cw`, `laser_heat_density`, `aa_offset_counts`; +the temperatures: `temp_max`, `temp_resume`, `temp_critical_c`, `temp_min`, +`temp_start`; the TEC: `tec_present`, `tec_on_c`, `tec_off_c`; the fire +watch: `fire_q1_alert`, `fire_q1_critical`, `fire_q2_alert`, +`fire_q2_critical`; the crash watch: `accel_x_alert`, `accel_y_alert`, +`accel_abort`; the cooldown: `cooldown_s`, `cooldown_max_s`; the airflow +gates: `tach_exhaust_min_rpm`, `tach_intake_min_rpm`, +`tach_air_assist_min_rpm`, `purge_min_current`, `fan_grace_s`) live in +`/data/forgefirm.conf` (Machine tab, validated ranges), and the cooling engine re-reads them at **every run start** (env `GFCOOL_*` > conf > compiled default; env stays the bench override and wins for the process lifetime). diff --git a/forgetest/forgetest/ui/help.js b/forgetest/forgetest/ui/help.js index 5ea2b1f..4b6f0f2 100644 --- a/forgetest/forgetest/ui/help.js +++ b/forgetest/forgetest/ui/help.js @@ -13,11 +13,11 @@ * What the operator must read mid-run (the steps, prompts, notices and * the live-laser acknowledgment) stays in the page and never moves here. */ -var DOC_BASE = 'https://docs.openglow.org/forgefirm/'; +var DOC_BASE = 'https://docs.forgefirm.org/'; var HELP = { campaign: { t: 'Campaign', - d: 'acceptance/campaign', + d: 'developers/acceptance/', p: [ 'A release is authorized when a campaign is open on this image and every catalog test is satisfied: by a PASS in the campaign, or (never for the core) by an earlier PASS whose domain fingerprint is unchanged. A FAIL ends the campaign.', 'The manifest identity is the image, the catalog hash is the test set; either changing starts the count over.' @@ -25,7 +25,7 @@ var HELP = { }, queues: { t: 'Run what is left', - d: 'acceptance/queues', + d: 'developers/acceptance/', p: [ 'Each queue takes every test of its kind that the campaign does not already count as satisfied, runs them one at a time in prerequisite order, and stops on the first result that is not a PASS.', 'The unattended queue needs nobody in the room; with the bench fixture up, the operator tests it can perform by itself run there too. The other one does: it prompts, and it fires the laser. Stop-the-queue cancels what is still waiting and lets the run in progress finish; Abort ends that one too.' @@ -33,7 +33,7 @@ var HELP = { }, actions: { t: 'Campaign actions', - d: 'acceptance/actions', + d: 'developers/acceptance/', p: [ 'Export builds the release artifact the release gate reads (acceptance.json, with acceptance.md for people) from the campaign as it stands. The raw log is the append-only record; the journal is the daemon\'s own.', 'Invalidate all forces a full campaign; give the reason. Reset campaign closes the open campaign without invalidating anything: earlier passes stay inheritable under the campaign rules, and the next Start opens a new one.' @@ -41,14 +41,14 @@ var HELP = { }, ignore: { t: 'Ignore prerequisites', - d: 'acceptance/prerequisites', + d: 'developers/acceptance/', p: [ 'A test\'s requires list only orders the runs. With the switch on, any test starts alone and its record notes which prerequisites were unmet; the release still needs every test satisfied.' ] }, bench: { t: 'Bench diagnostics', - d: 'bench/tools', + d: 'developers/bench/', p: [ 'The bench tools under scripts/bench, run on the board with their output in the Run pane. Nothing here enters a campaign. Tools not yet ported are listed for completeness.', 'Live tools need the operator acknowledgment; takeover and scope tools stop forgectrl for the duration and start it again when they finish.'