Each left after its host cases passed (forgectrl 1dc85f6) and with
the coverage lint clean at the pins, its only failure the known
setup.check-lens entry on src/lensfind.*:
- forgectrl.tokens: host_routes.sh's scoped tokens (a route refused to a
token not given it, neither token in the list or the store), with
tokens_test and auth_scoped_test.
- update.product-gate: host_update.sh's product gate on the upload, with
fwproduct_test.
- setup.first-run-page: tests/wizard_walk.py.
- setup.check-sensors, setup.check-intakes, setup.check-cameras,
setup.check-flow-verify, setup.check-envelope, setup.floor:
host_setup.sh's checks and the floor burn, with wizcalc_test.
envelope_test.py's cases are unchanged. setup.floor's emission stays
with setup.focus and laser.emission-witness.
- motion.job: jobpost_test, with jobrun_test and lease_test; jobpost.* is
covered by exthost.motion-job, which stays.
- exthost.motion-jog: host_routes.sh's credential case.
Two HOST_TESTED rows, each a binary forgectrl's build.yml runs at the pin
c274f19 that proves the path the lint named: src/fwproduct.* to
fwproduct_test, src/grblport.* to grblport_test.
exthost.motion-job now requires motion.jog-roundtrip in place of
motion.job. bedsize.py held setup.check-envelope alone and goes;
forgectrl.py loses _words_of and its hw import, motion.py the job
runner's helpers, setup_burns.py FLOOR_KEY and FLOOR_KEYS.
forgetest's own tests: test_setup_dark.py loses the sensors and intakes
judges and the departed ids; test_setup_burns.py loses the floor's cases,
and the guards burn() and preview_ok() hold for the focus burn (the
program's tail and reach, the thickness in inches and the one refused, a
prompt not answered, the witnesses) run on setup.focus.
Stay: forgectrl.auth (the fuse view's button refusal on the real
button); forgectrl.settings-bounds (the lid lamp: cam.c writes
/sys/glowforge/pic/lid_led, not under GF_SYSFS_ROOT); forgectrl.panel-serves
(src/ui.h, which no binary at the pin proves; Z inside the lens reach is
setup.check-lens's); logs.routing; setup.account-login (the account's
render and its home, image content); setup.ssh-until-reboot
(src/paths.h); setup.machine-name (udhcpc -x hostname and no mDNS
responder, image content); setup.first-run-flow (src/button.*, led.*,
advisories.*, hooks.h and the four advisory documents); exthost.motion-job
(jobpost.*, which no binary at the pin proves).
Proof: the coverage lint, 55 tests; pyflakes; test_setup_burns,
test_setup_dark, test_takeover_position and test_image (54 OK).
Shared text moved the fingerprints of exthost.armed-freeze,
exthost.platform, exthost.service, forgectrl.auth,
forgectrl.panel-serves, forgectrl.settings-bounds, laser.armed-kill,
laser.emission-witness, laser.pause-resume-lid-cancel,
motion.cancel-abort, motion.deadman, motion.jog-roundtrip,
motion.liveness-probe, motion.microstep-modes, motion.pacing,
motion.release, motion.step-timing-under-load, setup.account-login,
setup.check-airflow, setup.check-lens, setup.check-motion,
setup.check-switches, setup.cloud-header-capture, setup.first-run-flow,
setup.focus, setup.machine-name, setup.ssh-until-reboot and
update.slots-and-signature; exthost.motion-job's own text moved with its
requires.
- baseline: the lid lamp fades to a new level (the kernel's smooth
trigger), so the hand-back reads it until it holds the wanted level
twice in a row, for up to 3 s, before it is a leftover.
motion.deadman failed its hand-back reading 232 against 236 0.05 s
after the supervisor re-applied 236 to a respawned controller.
- setup.check-lens and setup.focus: grblHAL reads the lens window and
the edge only at its start, and their restore came after the wizard
had restarted the controller on the test's values. Each test now waits
for the step to end, puts the settings back, and restarts the
controller (stop, start, running and verified with a new pid) on every
exit path; cloud mode restarts nothing.
- setup.focus and setup.floor: the served program ends with G0 Z<edge>,
G0 X0 Y0, G92.1, M2; setup.floor requires setup.focus and checks the
scrap's thickness against the lens reach; the burns cover lenshome.
- setup.check-intakes: the two assertions that could not fail are gone;
an intake-count prompt fails the test unanswered (the bench
reference's intakes both turn). The precheck's refusal names no
setting.
- setup.check-airflow: the machine's count rules (intake 2 turning
writes 2; silent on a one-fan machine, the count is not written).
Shared text: setup_dark.py's precheck string (all setup_dark tests,
setup_burns, setup.check-envelope), setup_burns.py's imports, covers,
docstring and preview check, cooling_intake.py's docstring; every test
they move covers paths forgectrl changed in the same work.
Proof: the forgetest host suite passes (548), with new host tests for
the lamp's fade, the restarts on pass, fail and abort, the floor's Focus
refusal and reach, the tail without G92.1, the intakes prompt, and the
airflow count rules; pyflakes is clean on the changed modules.
Acceptance: these are the tests.
setup.focus and setup.floor follow forgectrl: a burn counts on the tube
current and the kernel's LASER_ON samples, and its result records the
beam sensor's rise and beam_sensor_seen, never requiring a rise (a head
may give no output from the sensor). The check reads that both are
recorded and logs them; the descriptions name the two witnesses.
Proof: the setup host tests (74) and the manifest tests pass, two of
them new: a burn whose sensor gave no output passes, and a result that
does not record the sensor fails, each with the settings put back.
Acceptance: these are the tests.
The catalog follows forgectrl's setup (openglow-org/forgefirm#4): the
gate is the advisories with the press, the account, the required steps
(preferences, machine, cloud), and the intake fan count; every other
step is recommended; the setup sheet is retired for two self-contained
burns and a dark lens travel check; the override file is gone.
- setup.gate-blocks-controllers installs four records: without consent,
without the account, and without the three required steps the
controller is gated with the reason naming the cause; with them done
the gate opens, the controller runs, and the other steps are
recommended as not run. Clearing cool_intake_fans closes the gate live
with its reason, and putting it back as found reopens it.
- setup.override-until-reboot is deleted with its helpers, and
forgetest.init no longer writes the override file at boot.
- setup.first-run-flow follows the reason from the three required steps
to open; setup.first-run-page walks the choice screen after them;
setup.what-changed reads the one-level map with the gate unmoved.
- New setup.check-intakes (the count by the tachs equals the machine's,
the setting put back as found) and setup.check-lens (the window
written equals the stops found or the fallback, and the settings and
/status hold it; both keys restored). A precheck refuses the intake
and airflow checks while cool_intake_fans is unset, so neither can
leave it unset in the middle of a campaign.
- setup_burns.py replaces setup_sheet.py: setup.focus and setup.floor
answer the gantry stops, the home, the scrap and the thickness, and
keep the preview, emission and window checks; motion.tray starts the
focus burn for its tray-out refusal.
Proof: the forgetest host suite (529 before the required-steps edits,
and the full suite after them) and the manifest load pass; pyflakes
reports no undefined names. The coverage lint is clean against
forgectrl's working tree; against the current pin, setup.check-lens's
src/lensfind.* glob selects no file until the forgectrl pin moves to the
commit that adds it.
Acceptance: these are the tests themselves; the campaign runs them with
cool_intake_fans set on the bench.