R.6

Index of figures

Every figure of this manual, in order, by the one claim its caption makes.

Each row links to its figure, and the claim is the bold sentence that opens the caption. Every number in a figure comes from our captured runs, and the source of each figure is linked from its section. The colours follow the palette of the front matter:

  • blue is rea, its CLI, its MCP server, and its domain layer
  • violet is the Ghidra provider
  • green is the fixture files and their bytes
  • plum is the agent and its model calls
  • olive is scripted and managed code
  • indigo is MCP messages and sessions
  • amber is a lifecycle state, such as a claim status
  • teal is a durable record, such as an Evidence bundle
  • rose is a failure or a refused claim
  • grey is the host, the compiler, and the reader
Fig.The claim it makes
0.1Each of the eight arrow styles marks one kind of exchange, and every label except the model call is a real name or message from the recorded session.
1.1rea owns the adapters, the session, and the Evidence record, and Ghidra owns import, analysis, and decompilation, with one JSON line per question between them.
1.2One command opens the file, binds Ghidra, launches a headless JVM on a private copy, asks one question on a socket, and returns one Evidence record.
1.3Every field of the record is either identity, provenance, the answer, or a limit on the answer, and the id covers all of them except the display names.
2.1Five questions from 17 USC 1201(f), Directive 2009/24/EC, Sega, and Connectix stand before the first command, and the fixtures of this manual answer all five by construction.
2.2rea doctor runs nine checks for the Ghidra scope in a fixed order, and on the capture Mac every one passed with the path or version it found.
2.3A capability group answers four questions before any call: is the operation available, what does it start, what does it write, and what does it change.
2.4Every Ghidra operation declares launches_process and may_write_filesystem, three also declare mutates_artifact, and no operation in the capture declares changes_permissions or requires_root.
3.1One cheap read gives a hashed subject, a one-node inventory, and an explicit branch that names open_binary as the next probe.
3.2The same host refuses one layout reader on platform and answers the other with 17 load commands, because each reader names its own prerequisites.
3.3Four segments map 33872 file bytes into three address ranges, and every other load command points into the last one by file offset.
3.4The segment rule, the section rule, and Ghidra's source mapping give the same byte, 1304, and that byte starts the first instruction of _grade.
3.5The same four functions give 13 procedures in a linked executable and 4 in a relocatable object, because stubs, externals, and an entry point exist only after linking.
4.1The open call returns after the readiness checks with no import, the first question waits seconds for the headless import, and the next takes under 100 ms.
4.2One session owns one directory with the project, the hashed target copy, the descriptor, the socket, and the logs, and close_binary deletes it.
4.3Five internal functions fill the 576 bytes of __text without a gap, four thunks fill __stubs, and four externals live in a block Ghidra made.
4.4Ghidra's basic_blocks split the fifteen instructions at the one conditional branch, and both leaf blocks end in ret with no successor.
4.5entry calls three of the four functions, the function starts table refers to all four, and nothing calls _grade because its body was inlined.
4.6At -O0 an indirect jump through five relocated entries reaches five case blocks, and at -O1 one load from five values replaces all of them.
4.7Ten of the 39 strings are the program's text, and the other 29 are names and paths that the loader and the linker keep in the file.
4.8One record holds the identity, the text, the edges, the blocks, the signature facts, and the value flow of one function, each with its own limits.
4.9Four source lines became fourteen lines of pseudocode, and the three marked lines describe only the registers.
5.1The id hashes every field of the record except subject.name and subject.local_path, so the same observation of the same bytes gets the same id anywhere.
5.2An empty callees array with complete coverage, a zero unknown count, and a one-sided bundle record each prove that nothing was observed, never that nothing exists.
5.3An unknown keeps its id across revisions, each revision names the digest of the one before, and each change writes its own Evidence record.
5.4A cacheable call becomes a query id over target, binding, operation, and parameters, and a mutating call turns the cache off before it reaches Ghidra.
5.5One canonical file leaves the session, and the CLI summary, the CLI export, the CLI import, and a second MCP session all read it without Ghidra.
5.6The compiler left _percent_change the same on seven dimensions with references unknown, changed _total on five, and rea reports counts without saying why.
6.1The graph links the package entry point to three IPC handlers and one network endpoint, and each edge names whether it was observed or inferred.
6.2rea copies the module, runs three WABT programs with checked versions, and returns one observed record that the CLI and MCP share.
7.1Each claim takes its status from one dimension of one comparison record, and the total claims also carry the unknown that compare_functions recorded.
7.2Leg one runs the original and the candidate over 92 cells, and leg two compares 46 masked bytes, one relocation record, and five table entries.
7.3Three candidates stop at the size check, one passes every byte check and fails on the table it points at, and four reach pass.
8.1open_binary returns in 1,632 ms without a Ghidra import, and list_procedures pays 6,349 ms for the import before the session answers in milliseconds.
8.2The 60 s client default covers the 6.3 s first call on this Mac, the 64 s Linux call fails it, and rea waits up to 330 s.
8.3Four tool calls produced four Evidence records, and the ledger built from them answers the question only up to the two tables nobody read.
8.4Five claims rest on recorded Evidence ids, and four stay unknown until read_bytes or analyze_function runs on the addresses the dossiers already name.

rea (rea-agents) with the Ghidra provider rea-agents 6.7.0, Ghidra 12.1.4 · 27dc42d · 2026-10-18 · Edition 2026.10