Files
rea/experiments/atomic-codemode/storage-study.md
T

194 lines
13 KiB
Markdown

# Native architecture storage facts
An exact storage coordinate needs its space and width before it can name a
register. The previous SSH task exposed this gap: the caller uses two-byte
register:0x8 (CX), whereas the callee has eight-byte register:0x8 (RCX).
Call argument value storage and passing storage are also separate facts.
Two shared queries, `spaces` and `registers`, expose a native architecture
catalog. Queries select names/indices/exact tuples, fields and pages; identity,
architecture, provenance and coverage remain inline. Missing exact map entries
are not absent hardware storage. No containing-register substitution, SSA
equality, stack rebase, alias or live-value inference is performed. Empty names
and null spaces survive; undecodable names retain exact bytes. Names come from
the native canonical varnode_xref map, not every translator alias or symbol.
The exporter reads the existing native AddrSpaceManager and Sleigh register-map
owners. It bootstraps the selected binary with embedded specs and disabled
listing/fast function discovery, and decompiles no function. Bootstrap still
loads binary/metadata; this is not a header-only read. A bounded streaming writer
admits encoded growth before allocation. One immutable 8 MiB maximum source
backs both queries per lease, with parsed immutable views and no query-key or
cross-lease cache. Successful close clears it; failed cleanup retains its owner.
Existing function/string catalogs use the same fixed-key capture owner. Catalog
sources and decoded facts cannot be mutated by SDK consumers. SDK, CLI and both
MCP adapters share the same named contracts; common coordinate identity has one
owner. There are nineteen methods, twenty-two direct tools or four Code Mode
tools. Stock Kuna integration and other provider parity are not established.
The experiment refreshed main through `f9ccacca2` before this work. Native
upstream remains `fe01d6294eb0d1053ce343c8943646df88e143fc`, with overlay SHA-256
`d4eb3f245359f4421294e1f9c4f476ed5b58da04cc34637b5a3ca90d0e857b71`.
The copied immutable embed-specs/opt1 engine SHA-256 is
`c48ad95784ce7b26beb966b054fe103b11922c8aa8cbe7c4144f3daa1d5d45fe`.
The overlay passes forward-index and reverse-worktree application checks.
The older pinned 770ac3f2 engine returns typed `execution_failure` for the new
native command; stock 1.833 returns `capability_unavailable` before launch.
Neither failure becomes an empty register catalog.
## Real-provider checks before models
Both actual MCP adapters read the stripped Debian x86-64 `/usr/bin/ssh`, digest
`04f2ff5f506a3f332e7adeb1478a4c551ae74acdd328e6fb5c2495664d4064e6`.
All nine spaces and 1,440 register rows match their complete retained source
through public paging and Evidence reads, with source digest verification.
Exact batch lookup distinguishes CX/ECX/RCX, RDI/R15/R9D, an unmatched
three-byte slice and stack storage. Empty selections remain empty. Both queries
reuse exactly one catalog source without a function snapshot. An intentionally
unusable ambient SLEIGHHOME does not override embedded spec selection.
| Selected query | Direct wall / CPU ms | Code Mode wall / CPU ms |
| -------------------------- | -------------------- | ----------------------- |
| First space capture | 432.2 / 422.2 | 509.4 / 498.5 |
| Same-lease repeated spaces | 3.5 / 3.5 | 41.4 / 41.4 |
| Same-lease register batch | 4.0 / 4.0 | 21.3 / 21.2 |
These are actual MCP reads, not model-task measurements. CPU includes the
local verifier/client/server/native family; first captures have fresh leases
and private native caches, while OS caches are uncontrolled. Warm queries
reuse the same immutable source. Response bytes alone are not token counts.
The [Debian AArch64 OpenSSH package](https://deb.debian.org/debian/pool/main/o/openssh/openssh-client_10.0p1-7+deb13u4_arm64.deb)
was downloaded over HTTPS, extracted and neither installed nor executed.
Package digest is `e900c13c9a5267714fc2c2c1f369fe4a667c7dd4031266b1480250320f0bfcfb`;
binary digest is `de352e4ace7028d9816fd0ee9d22936bc1b5622c400d5b0b7df660df3426b068`.
Package signatures were not verified. Independent ELF headers select AArch64/LE;
the native model reports AARCH64:LE:64:v8A:default with nine spaces and 634
register rows. Full paging matches retained native source. Native x0/w0 use
register:0x4000 with widths eight/four, unlike x86 coordinates. This verifies
another real architecture catalog; big-endian binaries and comprehensive
architecture/register/alias coverage remain untested.
| Executed pre-model check | Wall s | Family CPU s | Kernel family peak MiB |
| ------------------------------------------------ | ------ | ------------ | ---------------------- |
| Storage native CLI build | 26.494 | 26.104 | 538.1 |
| Two native serializer/admission tests | 43.054 | 33.317 | 483.5 |
| 87 experiment JS tests | 5.154 | 4.939 | 82.7 |
| Direct complete catalog verifier | 1.830 | 1.618 | 198.0 |
| Code complete catalog verifier | 2.132 | 1.880 | 204.6 |
| AArch64 complete catalog verifier, initial | 8.920 | 5.523 | 194.4 |
| SDK existing zlib catalog/cache regression | 4.572 | 3.203 | 129.7 |
| Public CLI storage composition | 3.660 | 2.520 | 119.6 |
| SDK injected cleanup-failure/retry | 5.080 | 3.724 | 123.0 |
| Old pinned engine failure | 2.666 | 1.675 | 54.0 |
| Stock capability failure | 2.151 | 1.328 | 47.7 |
| Real MCP prototypes/full prior-function fidelity | 28.233 | 20.870 | 305.1 |
| Both SDK-converted MCP catalogs/schemas | 1.831 | 1.573 | 137.9 |
These resource-run receipts use one CPU, 4 GiB hard/3 GiB early-stop memory,
TasksMax192 and swap disabled. Peaks are kernel process-family accounting,
including charged file cache, not RSS. Payload-exit observations verify counters,
zero OOM events and descendant cleanup. Final whole-scope counters are unavailable.
No global repository/native corpus gate is claimed. An initial direct verifier
attempt failed at startup after moving a shared schema without its local
snapshot binding; it retained its failed receipt, was fixed before models, and
is excluded from successful-query timings. No native operation ran in that
attempt. Whole model tasks below must charge all their own attempts.
The final repeat of all 87 JS tests passes (5.052 s wall, 4.855 s CPU,
83.0 MiB family peak). A final AArch64 run also verifies exact x0/w0 named
queries against the pinned native SLEIGH definitions at AARCH64instructions.sinc
(register definitions beginning at 0x4000), in addition to complete-source
fidelity (1.932 s wall, 1.561 s CPU, 196.2 MiB peak). Both have zero OOM
events and verified payload cleanup.
## Frozen real-model comparison
The [question](storage-boundary-question.txt) and [oracle](storage-boundary-oracle.md)
extend the earlier native prototype task with exact storage-name and space
metadata requirements. Both complete actual catalogs are available. Model
runtime is frozen at `577ca5a0ae84d61a00f576feed7306b6cf54949c`; both isolated
Codex 0.161.0 runs request gpt-6.1-sol/high, in Direct → Code order. Neither
client feature flag establishes the available client tools: both lanes actually
have the common client JavaScript executor. This compares the MCP calling
adapters inside that common client surface.
Both complete answers pass the frozen oracle. They identify the owner/caller,
report all fourteen native prototype entries, native model/lock/return/error
flags, the 3/44 raw inputs and exact parameter matches, and preserve missing
matches without inferring original arity. Both use the native catalog for
CX versus RCX, R9D and the return RAX, distinguish R15 value storage from RDI
passing storage, and leave stack tuples without fabricated register names.
Code/register/stack descriptors remain separate metadata observations. Both
retain snapshot-local SSA identities, machine corroboration, unknowns and close.
Scripted checks verify every cited source against the delivered trace, retained
digest, target/engine identity, complete previous function records, prototypes
and exact input matches: ten Direct sources and twelve Code sources. Each lane
cites one native catalog and one capture per selected function. Additional
input-space counts, selected call argument/value/passing tuples and nine
independent ELF instruction sites agree; relative call/LEA destinations are
decoded from file-backed ELF segments. This source/fidelity check is separate
from reviewing the complete natural-language answer against the oracle; both
were performed. It does not prove all native recovery is machine-equivalent.
| Whole completed task | Direct | Code Mode |
| -------------------------------------------- | --------- | --------- |
| Required answer | pass | pass |
| Cumulative input tokens | 415,450 | 307,888 |
| Cached input, included above | 359,936 | 273,664 |
| Uncached input | 55,514 | 34,224 |
| Output tokens | 7,170 | 6,575 |
| Reasoning tokens, included in output | 1,802 | 1,226 |
| Actual unique model responses | 13 | 12 |
| Client executor / wait calls | 12 / 0 | 11 / 0 |
| MCP attempts, including discovery/open/close | 28 | 12 |
| Direct fact reads / Code inner API reads | 25 | 32 |
| Spaces / registers reads | 1 / 2 | 1 / 2 |
| Parameters reads | 2 | 4 |
| API / transport failures | 0 / 0 | 0 / 0 |
| Model wall seconds | 158.116 | 142.153 |
| Family wall seconds | 158.992 | 142.658 |
| Local family CPU seconds | 18.232034 | 20.391465 |
| Kernel family peak MiB | 672.0 | 636.9 |
All attempts are retained and charged; there are no failed model attempts or
retries in this pair. Summed unique per-response usage matches the runner totals.
Both use fresh leases/private native caches, preserve target/engine/runtime
fingerprints, remove isolated profiles and verify payload cleanup with zero OOM
events. Native catalog reuse is warm within the lease; remote model/OS caches,
resolved model build, remote compute and host contention remain uncontrolled
or unmeasured. The native caller capture itself took 4.432 s Direct / 5.859 s
Code; whole CPU differences cannot be attributed solely to adapter overhead.
In this one pair, Code uses 25.9% less cumulative input, 38.4% less uncached
input and 10.1% less model wall time, while local family CPU is 11.8% higher.
It performs more fact reads, including repeated cached prototypes and joins,
and only one fewer model response despite sixteen fewer MCP requests. The
earlier studies retain their mixed results. This new task adds metadata
requirements, so old question timings are not an equivalent before/after test.
No stable Code Mode advantage, traditional-provider superiority or general
complex-software effectiveness follows from this sample.
Local raw records are `ssh-storage-{direct,codemode}-v1/`, sibling `.log`,
`.trace.jsonl`, `.providers.json`, `.tools.json` and `-evidence/` under
`.cache/atomic-codemode/`. Derived checks are `storage-model-costs.json`,
`storage-answer-checks.json` and `storage-answer-review.json`. Final answer
SHA-256 values are Direct
`d5b64cfec3236cae4357160148578b597e7fe8115b62e57bc77fee7eb027d022`, Code
`0d2937dc1054e3e8405a4bbd428a3f753d2ab07c6a839d7ee798bfe7f642f69f`.
These hashes identify the reviewed answers, not an automated correctness proof.
## Resource-limited repository gate
The separate full `npm run check:fast` did not finish. The guarded run stopped
at the 3 GiB early threshold after 44.290 s; a serial retry using the installed
Turbo 2.11.7 documented `--concurrency=1` option also stopped there after
26.823 s during typecheck. Last sampled memory.events have zero OOM/kill/max
events. Payload-exit/final counters are unavailable for these aborted runs;
neither is reported as a passing full gate. The guards remained enabled and
the model trials ran after these checks terminated. Changed-module lint and
format checks, all 87 experimental JS tests and the real-provider checks above
pass. Production-wide type checking remains unverified within this resource
budget; no unrelated main code was changed to bypass it.