<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ida-tui.git/.fastfeedback, branch main</title>
<subtitle>tui for headless ida</subtitle>
<id>https://git.sl0p.foo/ida-tui.git/atom/.fastfeedback?h=main</id>
<link rel='self' href='https://git.sl0p.foo/ida-tui.git/atom/.fastfeedback?h=main'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/'/>
<updated>2026-08-07T19:23:47Z</updated>
<entry>
<title>SPEED.md: the 85ms keypress, and what settle() still cannot see</title>
<updated>2026-08-07T19:23:47Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-08-07T19:23:47Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=3e7ce78a109e32d0605c82a4a93b20459880d98a'/>
<id>urn:sha1:3e7ce78a109e32d0605c82a4a93b20459880d98a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>SPEED.md: where the last 2ms goes, and why batching is not worth building</title>
<updated>2026-08-07T13:07:09Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-08-07T13:07:09Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=be42c4ffa039440caf674c12f4343f08d4c48b9d'/>
<id>urn:sha1:be42c4ffa039440caf674c12f4343f08d4c48b9d</id>
<content type='text'>
Measured so nobody re-derives it: HTTP is 0.165ms of the 2.0ms floor and
execute_sync marshalling onto IDA's main thread is the other 1.86ms, inside
IDA's own serve() loop. Call volume is already minimal (8 calls to scroll 2000
rows, 4 for a 1060-block graph), so a batch endpoint would save single-digit ms
on flows costing hundreds. The largest single operation in the app -- decompiling
a 17KB function -- is 10806ms here and 10723ms on the worker: pure Hex-Rays,
0.8% apart, no transport in it.
</content>
</entry>
<entry>
<title>SPEED.md: record the post-fix backend numbers and the 2ms round-trip floor</title>
<updated>2026-08-07T13:02:22Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-08-07T13:02:22Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=3cddb622697e241bc6d9c4a99da6380eb7267b22'/>
<id>urn:sha1:3cddb622697e241bc6d9c4a99da6380eb7267b22</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Record the test-speed findings in .fastfeedback/SPEED.md (force-added)</title>
<updated>2026-08-07T12:54:25Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-08-07T12:54:25Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=a2c345aa8260fa7e9805474e0b68cdc96bd86a9d'/>
<id>urn:sha1:a2c345aa8260fa7e9805474e0b68cdc96bd86a9d</id>
<content type='text'>
The suite went from ~9m20s (with thumb_ui crashing and rawimage_rpc failing) to
146s, 788 passed / 0 failed, without deleting a single check. Every second of
that came from four mistakes, all of which will be made again by the next person
who does not know about them, so they are written down next to the commands:

1. waiting on a signal that can no longer happen (model-identity gates, after
   edits were changed to keep the listing's walk) -- 30s in blob_ui, 4x60s in
   thumb_ui, each followed by a check that then passed vacuously;
2. waiting on a signal that is set too early (app._t is assigned before the
   navigation it starts) -- a race master's millisecond backend won and Code
   Mode's loses;
3. regenerating a fixture with os.urandom into a temp dir, so the pristine
   database cache could never apply;
4. deleting a database and reopening the same path, which races the lease of
   the worker that still owns it.

It also records the per-suite timings, which suite owns which behaviour (batch
rename lives ONLY in test_rawimage_rpc -- four full pilot runs missed that bug),
and two harness traps: `bgrun run` blocks the agent's tool call unless launched
with setsid and all three fds redirected, and `pkill -f` matches the agent's own
command line and kills the shell issuing it.

Force-added over the .gitignore entry: this is the kind of thing that is worth
more to the next reader than it costs in repo noise. Drop the file and the
ignore rule together if that judgement is wrong.
</content>
</entry>
</feed>
