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.
This commit is contained in:
ScottW514
2026-09-02 08:15:12 -04:00
parent d9a0990510
commit b132965e15
2 changed files with 20 additions and 13 deletions
+14 -7
View File
@@ -440,7 +440,7 @@ One ulfius daemon serves it all:
- `GET /` — the tabbed control panel (**Status / Machine / GF Cloud / GRBL / - `GET /` — the tabbed control panel (**Status / Machine / GF Cloud / GRBL /
Diagnostics / Logs / System**; sources in `forgectrl/src/ui/`, 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 `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 same panel on a workstation against a live board or a mock). Status carries
the controller-mode selector, the operational dashboard, a scaled lid 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 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`, atomic replace. Keys: `controller_mode`, `homing_mode`, `gfcloud_home_x/y/z`,
`gfcloud_home_timeout_s`, `gf_serial`, `gf_password`, `ui_units`, `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`, `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_<logger>_disk|_remote` levels and `syslog_server|port|proto`. `log_<logger>_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 - `GET /mode`, `POST /mode?controller=grbl|cloud` — the supervisor: current
mode, controller state (`running | stopped | standby | motion-fault`), pid, mode, controller state (`running | stopped | standby | motion-fault`), pid,
and the motion-liveness verdict (`verified | unverified | fault`); the POST is 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 + 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. 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`, **Cooling tunables are conf-backed**: the thirty `cool_*` keys (the flow
`flow_heater_pct`, `flow_check_s`, `recheck_s`, `confirm_max_s`, `temp_max`, check: `flow_rise`, `flow_heater_pct`, `flow_check_s`, `recheck_s`,
`temp_resume`, `cooldown_s`, `cooldown_max_s`) live in `/data/forgefirm.conf` `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 (Machine tab, validated ranges), and the cooling engine re-reads them at **every
run start** (env `GFCOOL_*` > conf > compiled default; env stays the bench run start** (env `GFCOOL_*` > conf > compiled default; env stays the bench
override and wins for the process lifetime). override and wins for the process lifetime).
+6 -6
View File
@@ -13,11 +13,11 @@
* What the operator must read mid-run (the steps, prompts, notices and * What the operator must read mid-run (the steps, prompts, notices and
* the live-laser acknowledgment) stays in the page and never moves here. * 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 = { var HELP = {
campaign: { campaign: {
t: 'Campaign', t: 'Campaign',
d: 'acceptance/campaign', d: 'developers/acceptance/',
p: [ 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.', '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.' '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: { queues: {
t: 'Run what is left', t: 'Run what is left',
d: 'acceptance/queues', d: 'developers/acceptance/',
p: [ 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.', '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.' '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: { actions: {
t: 'Campaign actions', t: 'Campaign actions',
d: 'acceptance/actions', d: 'developers/acceptance/',
p: [ 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.', '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.' '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: { ignore: {
t: 'Ignore prerequisites', t: 'Ignore prerequisites',
d: 'acceptance/prerequisites', d: 'developers/acceptance/',
p: [ 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.' '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: { bench: {
t: 'Bench diagnostics', t: 'Bench diagnostics',
d: 'bench/tools', d: 'developers/bench/',
p: [ 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.', '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.' 'Live tools need the operator acknowledgment; takeover and scope tools stop forgectrl for the duration and start it again when they finish.'