<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ida-tui.git/docs/CODEMODE_PORT.md, branch main</title>
<subtitle>tui for headless ida</subtitle>
<id>https://git.sl0p.foo/ida-tui.git/atom/docs/CODEMODE_PORT.md?h=main</id>
<link rel='self' href='https://git.sl0p.foo/ida-tui.git/atom/docs/CODEMODE_PORT.md?h=main'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/'/>
<updated>2026-08-07T13:29:49Z</updated>
<entry>
<title>docs: drop two stale files, correct the two the README links, cut sharp edges</title>
<updated>2026-08-07T13:29:49Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-08-07T13:29:37Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=8fef561903e9501281ebcc58cdb33ee4d9116fd0'/>
<id>urn:sha1:8fef561903e9501281ebcc58cdb33ee4d9116fd0</id>
<content type='text'>
README: "Known sharp edges" removed.

docs/GRAPH_VIEW.md pointed the graph's one backend call at
server/patch_server.py, a file the port deleted. It is
idatui/codemode_client.py now. This matters because GRAPH_VIEW.md is one of
only two docs the README links -- a wrong path in a linked doc is worse than
no doc.

docs/RPC.md was missing five verbs rpc.py serves: ping/methods/quit (now a
Session table) and trace/binaries/switch (with the semantic verbs). The trace
verb drives a whole feature the README advertises, so its absence was the real
gap. Every verb in rpc.py's METHODS table is now documented, checked
mechanically -- the remainder of what looked missing turned out to be values
of the "move" verb's dir parameter, not verbs.

Deleted:

- docs/CODEMODE_PORT.md. Written mid-port, and its Result section claims the
  port covered "the complete current TUI feature set". It did not: the graph
  view was dead, the operand-format keys were dead, pseudocode comments never
  appeared, and bulk rename was broken. Keeping a doc that states the opposite
  of what we found is worse than having none, and docs/CODEMODE_UPSTREAM.md
  carries the accurate account of the API limits.
- docs/TUI_DRIVING_BLUEPRINT.md. A design sketch for generalizing the
  drive-a-TUI-over-a-socket pattern to other programs, with gdb as the main
  example -- which now exists for real in ~/dev/gdb-driver. Superseded by the
  thing it proposed.

Nothing linked either file. Both remain in git history.
</content>
</entry>
<entry>
<title>Rebase MISTER EXO's ida-codemode port onto the current tree</title>
<updated>2026-08-07T10:40:14Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-08-07T10:39:54Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=c9208de05d8583b677117fe43c9d3567e89eb2ce'/>
<id>urn:sha1:c9208de05d8583b677117fe43c9d3567e89eb2ce</id>
<content type='text'>
Mechanical part of the port: the 27-file patch was cut against a base ~148
commits behind us, so it did not apply. Resolved 11 conflicts (all of them
diff drift, not semantic clashes) and the three file deletions:

- app.py: the patch re-inserted _do_rename/_do_name_addr/_seek_split etc. as
  "theirs" because our tree moved them to edit_ctl.py/trace_ctl.py. Kept ours
  and applied the real intent (WorkerClient-&gt;CodeModeClient, .call-&gt;.invoke,
  _open_worker_client-&gt;_open_database_client) at their current homes.
- domain.py: kept Head as a NamedTuple -- the patch reverted it to a frozen
  dataclass, which the perf work measured at 2.9us vs 1.9us per row on a
  quarter-million-row walk. Dropped _fetch_output (no download_url under Code
  Mode) and its now-dead urllib/json imports.
- pane.py: the patch's deletion swallowed our zellij support along with the
  worker-reaping block it meant to remove. Kept zellij, removed the reaping.
- test_scenarios.py: the idb_save-&gt;save_database teardown hunk belongs to
  tests/_fixtures.py in our tree; applied it there and kept our pc_num_format
  scenario that the drift landed on.

Three defects in the patch itself, fixed here:

- It made "import idatui" hard-require ida_codemode, so every offline suite
  died at import -- including the pure ones (graph/index/trace) that are the
  house rule for "tests/run.py --fast". The import is now deferred and gated
  on the binding, which is also what lets the port's own contract tests
  inject a fake DatabaseHandle.
- project.stage() inlined an ida_codemode.registry import and treated "library
  not installed" as "someone owns this database", which broke IDA-free project
  staging. Ownership lookup moved to codemode_client.database_owner().
- tests/test_codemode_client.py had no NEEDS_IDA marker, which tests/run.py
  rejects outright.

Offline suite: 301 passed, 0 failed. Against master's 344 the whole delta is
accounted for: -40 worker_client (module deleted), -18 launch sweep checks
(behaviour deliberately removed) +3 guarding that it stays removed, +2 pool
(GUI-save semantics), +13 new codemode_client contract tests.

NOT yet done, and the port is not functional without it: the adapter is
missing five operations our tree grew since the patch's base (flowchart,
op_format, pc_nums, pc_num_format, survey_binary) and its "heads" predates
back-walking and digest/expect.
</content>
</entry>
</feed>
