Skip to content

chore(release): v1.4.0 - #83

Merged
BernardJen merged 1 commit into
mainfrom
chore/release-v1.4.0
Sep 14, 2026
Merged

BernardJen merged 1 commit into
mainfrom
chore/release-v1.4.0

Conversation

@BernardJen

Copy link
Copy Markdown
Contributor

Cuts v1.4.0: CHANGELOG.md [Unreleased][1.4.0] - 2026-09-14, and package.json /
package-lock.json bumped 1.3.0 → 1.4.0. No code changes — the lockfile diff is the two version
fields and nothing else.

What's in it

Idle motor power-down with a re-zero wizard (#81, merged as #82). The steppers no longer sit at
holding current around the clock: after a configurable idle period — default 1 hour, 0 to never —
the daemon sends $MD. The timer is gated on the existing isPlotting() predicate, so it cannot
fire while a plot is streaming, queued, paused, in Run/Hold, or held at a pen change.

The half that makes that safe ships with it. With no limit switches and no encoder feedback,
freeing the gantry also loses the work origin while the controller goes on reporting the old
coordinates. The daemon now marks the position untrusted the moment the motors drop, stops
persisting it, writes trusted: false into the state file so a restart cannot reinstate it as the
origin, and refuses Plot and Go to home for every connected client. A wizard walks the operator
back to the paper's top-left corner.

Why minor, not patch

New behaviour on a machine that previously never powered its motors down, a new shared setting
(motorIdleMin), and a new field in the gateway snapshot.

Nothing breaks on upgrade. A state file written by an older daemon carries no trust flag and is
still restored, so no machine loses its remembered home to the upgrade.

After merge

Tagging v1.4.0 on the merge commit triggers .github/workflows/release.yml, which verifies the
tag matches package.json, builds the arm64 .deb under QEMU and attaches it to the Release — the
artifact the in-app updater installs.

Still outstanding

Hardware verification of the new feature. The four ⚙ HARDWARE tasks in
openspec/changes/idle-motor-power-down/tasks.md are unchecked and the OpenSpec change is
deliberately not archived until the operator confirms on the UUNA TEK. Releasing ahead of that is
the normal route here — the Pi gets the build through the in-app updater, which is how it gets
verified at all.

🤖 Generated with Claude Code

Idle motor power-down with a re-zero wizard (#81, #82). The steppers no longer
sit at holding current around the clock: after a configurable idle period,
default 1 hour, the daemon de-energizes them.

The half that makes it safe rather than dangerous ships with it. This machine
has no limit switches and FluidNC has no encoder feedback, so freeing the gantry
also loses the work origin while the controller goes on reporting the old
coordinates. The daemon now marks the position untrusted the moment the motors
drop, stops persisting it, writes `trusted: false` into the state file so a
restart cannot reinstate it, and refuses Plot and Go to home for every connected
client. A wizard walks the operator back to the paper's corner.

Minor, not patch: new behaviour on a machine that previously never powered its
motors down, a new shared setting, and a new field in the gateway snapshot.
Nothing breaks on upgrade — a state file written by an older daemon carries no
trust flag and is still restored, so no machine loses its remembered home.

Hardware verification is still outstanding (see the unchecked ⚙ HARDWARE tasks
in openspec/changes/idle-motor-power-down/tasks.md); the change is deliberately
not archived until the operator confirms it on the UUNA TEK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@BernardJen
BernardJen merged commit 8a54844 into main Sep 14, 2026
2 checks passed
@BernardJen
BernardJen deleted the chore/release-v1.4.0 branch September 14, 2026 15:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant