io-cli 0.18.0 - #48
Merged
Merged
Conversation
Task: US-IO-CLI-0.18.0-T01
Task: US-IO-CLI-0.18.0-T03
Task: US-IO-CLI-0.18.0-T04
Task: US-IO-CLI-0.18.0-T02
Task: US-IO-CLI-0.18.0-T05
Task: US-IO-CLI-0.18.0-T10
Task: US-IO-CLI-0.18.0-T11
Task: US-IO-CLI-0.18.0-T06
Task: US-IO-CLI-0.18.0-T08
The five files were written by hand across several tasks and reflowed in one pass, so the formatting change is separated from the code it formats rather than folded into a task's own commit.
ratatui 0.30 made `Terminal::insert_before` end in `Terminal::clear`, and 0.30's `clear` snapshots the cursor before clearing so it can restore it (`ratatui-core-0.1.2/src/terminal/buffers.rs:147`). 0.29's wrote the escape and asked nothing. So a commit now queries the terminal, the reply arrives on stdin, and io-cli's keyboard reader thread takes it — leaving the query to time out after two seconds. The call that failed was the commit of the splash, so every session died before its first prompt. The stand-aside `stdin` already provides was written for exactly this hazard, but it was applied at the two explicit placement sites because in 0.29 those were the only places that queried. It now goes where the queries are: `attach_raw`, `commit`, `commit_raw`, `resize`, and the one `draw` where the recorded size moved. A still screen takes no lock, so an unchanged frame still writes no bytes. `stdin::placing()` becomes reentrant, because `main` holds a guard around the larger operations that are built out of these sites and a second acquisition on one thread would wait for itself forever. A thread-local records which guard is the holder rather than a depth count, so releasing out of order is still correct. Found by driving the built binary. The whole suite passes on the broken binary — nothing under tests/ drives a real pty.
The release binary is built after this so the pty captures name the version they are evidence for.
The masking tests typed a string beginning `sk-or-v1-`, which is OpenRouter's own key prefix. It is obviously synthetic to a reader and not to a secret scanner, and a repository that trips its own scanning on every push teaches people to wave the alerts through. Same length and the same word boundary, so the mask-width and `Ctrl+W` assertions are unchanged.
`the_user_path_is_written_literally_and_not_as_a_substitution` was red on
windows-latest only. It asserted `!text.contains('~')`, and a temporary directory
on Windows comes back in 8.3 short form — so the path this crate wrote correctly
and literally was `C:\Users\RUNNER~1\AppData\Local\Temp\…`. The tilde was the
operating system's, in a path that resolves, and the assertion called it a
shorthand.
The property the criterion is about is io-cli writing `~` as a stand-in for a
home directory it declined to resolve, which can only appear at the start of an
entry. Every entry is a quoted string, so `"~` is that and nothing else.
The sealed record is not amended: nothing it claims became false. Its evidence
line quotes the macOS suite, and the operational claim it makes about the
three-platform matrix is the one this commit makes true.
io-cli 0.18.0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release PR for io-cli 0.18.0 — the memory release, and the release that got this product off an unmaintained dependency.
/rememberwrites a line of guidance into a markdown file the operator owns, at a scope they choose when they write it:AGENTS.mdfor the team,AGENTS.local.mdfor the checkout,~/.io-cli/IO.mdfor every project. The complete[instructions]list is installed in the one scope that is never committed, because naming files there replaces the default rather than adding to it. The line takes effect on the next turn of the same session — and so does an edit made in another editor — because the configuration is discovered again for every turn; a file that stops parsing leaves the last good one in force and names itself rather than ending the session./memoryshows both memories in one place: the three files with what each holds and which are actually being read, and beside them the durable memory the agent wrote for itself — key, kind, pinned, run and step, draw count, both scopes, caps per scope. Entries are pinned so they survive eviction, or forgotten with a restore point rather than deleted.tui-textareais gone. The composer and the wizard run on an editing model io-cli owns, ratatui moves to 0.30, crossterm stays at 0.28, and every editing behaviour survives — including undo and redo at one step per character.Gates
cargo test— 74 binaries, 989 passed, 0 failedcargo fmt --checkclean,cargo clippy --all-targets -- -D warningssilentTwo things the process caught that the suite could not
The audit before any code falsified three roadmap claims, all in the direction of the dependency giving less than the entry assumed.
And running the built binary found a release blocker with 989 tests green and clippy clean: ratatui 0.30 made
Terminal::insert_beforeend inTerminal::clear, and 0.30'sclearsnapshots the cursor where 0.29's asked nothing — so a commit queries the terminal, io-cli's keyboard reader takes the reply, and every session died two seconds after the splash. Nothing undertests/drives a real pty, so no gate here could have seen it.The release record is sealed and pinned. The tag, the Release and the post-release smoke follow this merge.