diff --git a/docs/release-notes/v0.7.1.md b/docs/release-notes/v0.7.1.md new file mode 100644 index 0000000..91170b1 --- /dev/null +++ b/docs/release-notes/v0.7.1.md @@ -0,0 +1,49 @@ +# v0.7.1 — `sendlnretry`: stop losing commands to a booting device + +## 🐛 Bug fixes + +**Scripts no longer hang forever when a device swallows a command** +* A device that is still booting can silently **discard console input** the moment its shell takes over the tty. The line you sent is gone — the device never echoes it and never runs it — so the `wait` that follows blocks forever and your test rig sits dead until someone notices. +* This is a race, not a delay: adding `pause` before `sendln` only lowers the odds of hitting the window, it can never close it. In a 45-cycle overnight power-cycle run, 3 cycles hung this way — and the sends that got swallowed landed at *exactly* the same moment as the ones that worked. + +## ✨ New features + +**New TTL command: `sendlnretry`** +``` +sendlnretry '' '' [max attempts] +``` +* Sends the text, then **waits for proof the device actually ran it** — and **resends** if that proof doesn't arrive. Omit the attempt count and it retries until it gets through. +* On success `result = 1`. If it runs out of attempts, `result = 0` and **the script keeps going**, so you can handle it yourself: + +``` +wait 'root@(none):/#' +sendlnretry 'tpm2' 'TPM 2p0' ; retry until the DUT really runs it +wait 'PASS' + +sendlnretry 'tpm2' 'TPM 2p0' 3 ; or cap it and handle failure +if result = 0 then + dispstr 'tpm2 got no response after 3 tries' +endif +``` + +* Pick a confirm keyword from the command's **output** (`TPM 2p0`), not its echo (`tpm2`) — a tty echo comes from the kernel and doesn't prove the shell ever read the line. +* Each send clears the receive buffer first, so a match can only come from *this* send; on a hit it consumes only up to the **first** occurrence, leaving the rest for your next `wait`. +* Per-attempt timeout follows `timeout` / `mtimeout` if you set them, otherwise **3 seconds**. (Unlike `wait`, `0` doesn't mean "wait forever" here — that would mean never retrying.) + +Full command reference: [TTL Script Reference → 送出並確認](https://github.com/ETWen/ETTerms/blob/main/docs/ttl-script-reference.md#送出並確認sendlnretry) + +## 📦 Downloads + +| Build | Needs .NET Runtime? | Notes | +|---|---|---| +| **ETTerms_v0.7.1** (Standard) | ✅ Requires .NET 8 Desktop Runtime | Smaller download | +| **ETTerms_v0.7.1_portable** (Portable) | ❌ Runtime included | Unzip and run anywhere, no admin | + +Run `ETTerms v0.7.1.exe`. + +## 🔗 Links + +* [TTL script reference](https://github.com/ETWen/ETTerms/blob/main/docs/ttl-script-reference.md) +* [Architecture](https://github.com/ETWen/ETTerms/blob/main/ARCHITECTURE.md) + +**Full changelog:** [v0.7.0...v0.7.1](https://github.com/ETWen/ETTerms/compare/v0.7.0...v0.7.1) diff --git a/src/ETTerms/ETTerms.csproj b/src/ETTerms/ETTerms.csproj index 6c80eb1..58f18ca 100644 --- a/src/ETTerms/ETTerms.csproj +++ b/src/ETTerms/ETTerms.csproj @@ -10,7 +10,7 @@ ETTerms - 0.7.0 + 0.7.1 ETTerms ETTerms Project