Skip to content

Fix what a review of dot_firmware.py's newer features found - #110

Merged
bboe merged 5 commits into
mainfrom
dot-firmware-review-fixes
Oct 10, 2026
Merged

bboe merged 5 commits into
mainfrom
dot-firmware-review-fixes

Conversation

@bboe

@bboe bboe commented Oct 10, 2026

Copy link
Copy Markdown
Owner

Fixes what a review of the five features firebreak ported from dot_firmware.py found: a /system stream with no deadline, a bad cached slice that fails every run, a boot0 note shown for another Dot, a report that stops on a damaged table, and write-test verdicts that blame the wrong part. Support now goes to the EchoMuse Discord.

🤖 Generated with Claude Code

bboe and others added 5 commits October 9, 2026 13:43
The stream's deadline covered only the wait after stdin closed, so an adb
that stopped reading hung the run on its writes. One thread now feeds the
slices and another drains adb's output, and the process is killed when the
30 minutes run out.

A slice that passed its md5 on the Dot and still answered gunzip-failed can
only be bad on the host. It is now deleted, and the loop stops, so the next
run rebuilds the image instead of failing the same way three times.

The markers are matched on the last line only, not anywhere in the output.
The 0x1a probe's adb call gets a 60-second limit. The docs drop the claim
that the gzip-magic check catches a half-built cache: the rename after the
md5 file does that.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
root() armed the boot0 note before its first probe, so an error before the
Dot was seen could speak for a stale marker. It is now armed after the probe
that removes a marker a booted Dot or one in fastboot left behind.

A failed fastboot erase of boot0 removes the marker, because boot0 is then
intact. The note says "may", and names a Dot that restarts before the last
step, because the marker also stands where boot0's read-back did not answer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1_recovery read unlock_status once, and anything but "false" went on to
flash tee2, which a locked LK refuses with a raw error. It now reads up to
three times until fastboot answers true or false, and stops with a message
when it never does.

The note no longer says the run writes amonet v1.1.0, because the target
decides what follows v2.0.0's recovery.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--report reads a Dot whose table may be damaged, and the root run's probe
stops on a table it cannot read. into_recovery now reads fastboot, adb
get-state, the TWRP version and USB config, and root, on its own. It leaves
any recovery alone, stops for one that is not TWRP and for Fire OS without
root, and keeps waiting while TWRP finishes starting. The report's state
lines catch the probe's exit and print its first line, masked.

/proc/partitions and the by-name listing now end in markers, and a cut
answer is not matched to claims. The dmesg window uses sed, so an uptime
past 9,999 s reads right. The card's boot line is read on its own, so a long
log still says it reaches the boot. The heading for unmatched names says
they point outside the table, which is what was measured. Both reports end
by saying the Dot stays in its recovery.

The hint and both headers send people to #support-device-unlocking in the
EchoMuse Discord, not to an issue.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each verdict blamed the other leg, so two passing legs said a failed
install was the cable and also the card. Each now clears only what it
tested.

An md5sum with no digest, and a card answer whose last line is not card:,
now read as a test that did not run, not as a fault. A card write that does
not answer leaves cache alone, because dd may still be writing, instead of
formatting under it. /tmp/usb-test goes from the Dot at the end on every
path, and the host's pattern file goes in a finally. "adb push said" strips
adb's trailing newline, which printed an empty line instead of the error.
The by-name listing and /proc/partitions end in markers, and a cut answer
skips the eMMC leg.

The docs now say the pattern overwrites ^sparse_super's backup superblocks,
and what a write that times out leaves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bboe
bboe merged commit 5cb5a8d into main Oct 10, 2026
5 checks passed
@bboe
bboe deleted the dot-firmware-review-fixes branch October 10, 2026 07:32
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