sots-re/verify/results/shim/aidesign/sd-t15-p1.txt
alex 254ce7c156 SD: the ship-design composer 0x006ad700 -- a word-cost model, verified where it could be
Lane PAR localised the AI's RNG variance to this function and stopped. This
reads it from the instruction stream (0x006ad700..0x006ae61a, swept to the next
function start; the padding confirms Ghidra's size is right on this one) and
measures it live with a sub-bracket on VM145.

THE MODEL. Nine live draw sites plus two provably dead. Only three of the nine
can cost more than one word, and only through NextInt's rejection loop; the four
cl_Chance probabilities are all strictly inside (0,1), so neither zero-word
early-out is reachable anywhere in the function. The loop-carried draw fires
once per SMALL STANDARD WEAPON BANK selected by

  f  = 1.00 / 0.75 / 0.50 by request flags, hull size and one 0.3 coin
  M  = (int)(N * f);  D' = max(1, (N+1)/M)
  L  = #{ bank j : PointDefence section, or j mod D' == 0 }

which is not monotone in N -- at f=0.75, N=4 costs 4 words and N=5 costs 3.

VERIFIED. Client 32's seven turn-1 words decompose as TWO composer calls: a
costOnly=1 price query (3 words) and a costOnly=0 build (4). That was predicted
from two push literals at 0x006cda9a/0x006cdb17 and committed before the probe
existed. Two pinned runs in fresh processes agree row for row. The probe's bank
counts 3/1/2 match the Tarkas section catalog's bank counts exactly -- a hooked
pointer walk and a parsed data file agreeing from opposite directions. The
detour is behaviour-neutral: unpinned it reproduces the published
d59bb9f2fd0eb535.

NOT VERIFIED, and this is the part worth reading. The loop-carried draw has
NEVER FIRED -- six composer calls across four runs, zero. On turn 1 the weapon
lookups gate it; on turn 15 every composer call is a price query that returns
nine steps earlier. Five of the nine sites have never fired and two of nine
exits have ever been taken. The formulas for those are read, not measured, and
section 6 says so.

CORRECTS roll-parity.md: its site table omits a live draw site (0x00691e9b,
which the same lane measured live at 0x00691ea0), so the AI turn has 22 live
sites and not 21; and 'six of seven turn-1 words come from the composer' is
five from its body plus two from a helper it calls -- all seven are in its
subtree.

NEW: on turn 15 the composer is 10 of 16 words, not 16 of 16. The task
system's coin at 0x0069086a fires four times and never fired on turn 1.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ARBgSooAfokKUy6wKUKEyZ
2026-09-08 20:50:03 -04:00

107 lines
10 KiB
Text

airng: bracket StrategyClient::OnResumePlaying rva=0x00377480 va=012b7480 create=MH_OK enable=MH_OK
airng: out=C:\SOTS\shim.airng.txt pin_seed=off:00000000
airng: facade cl_Chance rva=0x00178cf0 va=010b8cf0 create=MH_OK enable=MH_OK
airng: facade cl_RandRange rva=0x001798e0 va=010b98e0 create=MH_OK enable=MH_OK
aidesign: composer 0x006ad700 rva=0x002ad700 va=011ed700 create=MH_OK enable=MH_OK
airng seq=1 pid=16 agent=0x00000000 rng=0x0db85a48 pin=off:00000000 left=624->624 idx=0->0 left_delta=0 observed=0 calls=0 residual=0 foreign_words=0 foreign_calls=0 sites=0 overflow=0 life_in=0 life_out=0
aidesign seq=2 dseq=1 rc=0 dry=1 size=0 budget=0.000 role=3 flags=0x00000000 words=3 sub_words=3 left=605->602 N=0 q=0/0/0 pd=000 f=0.50 M=0 D=1 H_pred=0 H_obs=0 model=HOLDS
aidesignsite seq=2 dseq=1 A_randfloat=1 B_hull=1 C_cmd=1 D_chance=0(t0) E_pick=0 F_chance=0(t0) G_chance=0(t0) H_loop=0(t0) sub_overflow=0
aidesignpart seq=2 dseq=1 part=0 sec=0x0d976100 mounts=0 qual=0 pd=0 name=DEColonizer
aidesignpart seq=2 dseq=1 part=1 sec=0x0d9abb40 mounts=0 qual=0 pd=0 name=DEStrafe
aidesignpart seq=2 dseq=1 part=2 sec=0x0d975548 mounts=0 qual=0 pd=0 name=DEPulsedFission
aidesign seq=2 dseq=2 rc=0 dry=1 size=0 budget=0.000 role=3 flags=0x00000000 words=3 sub_words=3 left=602->599 N=0 q=0/0/0 pd=000 f=0.50 M=0 D=1 H_pred=0 H_obs=0 model=HOLDS
aidesignsite seq=2 dseq=2 A_randfloat=1 B_hull=1 C_cmd=1 D_chance=0(t0) E_pick=0 F_chance=0(t0) G_chance=0(t0) H_loop=0(t0) sub_overflow=0
aidesignpart seq=2 dseq=2 part=0 sec=0x0d976100 mounts=0 qual=0 pd=0 name=DEColonizer
aidesignpart seq=2 dseq=2 part=1 sec=0x0d977c58 mounts=0 qual=0 pd=0 name=DEHammerHead
aidesignpart seq=2 dseq=2 part=2 sec=0x0d975548 mounts=0 qual=0 pd=0 name=DEPulsedFission
aidesign seq=2 dseq=3 rc=0 dry=1 size=0 budget=9.000 role=5 flags=0x00000000 words=4 sub_words=4 left=599->595 N=0 q=0/0/0 pd=000 f=0.50 M=0 D=1 H_pred=0 H_obs=0 model=HOLDS
aidesignsite seq=2 dseq=3 A_randfloat=1 B_hull=1 C_cmd=1 D_chance=0(t0) E_pick=0 F_chance=0(t0) G_chance=0(t0) H_loop=0(t0) sub_overflow=0
aidesignpart seq=2 dseq=3 part=0 sec=0x0d98ec38 mounts=0 qual=0 pd=0 name=DETanker
aidesignpart seq=2 dseq=3 part=1 sec=0x0d977c58 mounts=0 qual=0 pd=0 name=DEHammerHead
aidesignpart seq=2 dseq=3 part=2 sec=0x0d975548 mounts=0 qual=0 pd=0 name=DEPulsedFission
airng seq=2 pid=32 agent=0x348a01a0 rng=0x35da9408 pin=off:00000000 left=611->595 idx=13->29 left_delta=16 observed=16 calls=14 residual=0 foreign_words=0 foreign_calls=0 sites=4 overflow=0 life_in=13 life_out=29
airngsite seq=2 pid=32 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=7 words=9 zero=0
airngsite seq=2 pid=32 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=4 words=0 zero=0
airngsite seq=2 pid=32 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=4 words=4 zero=0
airngsite seq=2 pid=32 ret_rva=0x002ad878 va=0x006ad878 entry=NextFloat calls=3 words=3 zero=0
airngcall seq=2 pid=32 ret_rva=0x002a849a va=0x006a849a facade=cl_RandRange calls=1 trues=0
airngcall seq=2 pid=32 ret_rva=0x0029086f va=0x0069086f facade=cl_Chance calls=4 trues=1
airngcall seq=2 pid=32 ret_rva=0x002ad94c va=0x006ad94c facade=cl_RandRange calls=3 trues=0
airngcall seq=2 pid=32 ret_rva=0x00291ea0 va=0x00691ea0 facade=cl_RandRange calls=3 trues=0
airngen seq=2 rng=0x01636e58 life_words=3 life_calls=3
airngen seq=2 rng=0x35da9408 life_words=29 life_calls=24 <-- this bracket
airngen seq=2 rng=0x35adde50 life_words=417 life_calls=287
airngen seq=2 rng=0x0db65a10 life_words=427 life_calls=289
airngcensus seq=2 rng=0x01636e58 ret_rva=0x00384f9e va=0x00784f9e entry=NextUInt calls=3 words=3
airngcensus seq=2 rng=0x35da9408 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=11 words=0
airngcensus seq=2 rng=0x35da9408 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=11 words=11
airngcensus seq=2 rng=0x35da9408 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=8 words=10
airngcensus seq=2 rng=0x35da9408 ret_rva=0x0029dc02 va=0x0069dc02 entry=NextInt calls=1 words=4
airngcensus seq=2 rng=0x35da9408 ret_rva=0x0029dc2e va=0x0069dc2e entry=NextInt calls=1 words=1
airngcensus seq=2 rng=0x35adde50 ret_rva=0x002cd02f va=0x006cd02f entry=NextInt calls=120 words=160
airngcensus seq=2 rng=0x35adde50 ret_rva=0x002cd062 va=0x006cd062 entry=NextInt calls=160 words=246
airngcensus seq=2 rng=0x35adde50 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=4 words=0
airngcensus seq=2 rng=0x35adde50 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=4 words=4
airngcensus seq=2 rng=0x35adde50 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=1 words=5
airngcensus seq=2 rng=0x35adde50 ret_rva=0x0029dc02 va=0x0069dc02 entry=NextInt calls=1 words=1
airngcensus seq=2 rng=0x35adde50 ret_rva=0x0029dc2e va=0x0069dc2e entry=NextInt calls=1 words=1
airngcensus seq=2 rng=0x0db65a10 ret_rva=0x002cd02f va=0x006cd02f entry=NextInt calls=120 words=147
airngcensus seq=2 rng=0x0db65a10 ret_rva=0x002cd062 va=0x006cd062 entry=NextInt calls=160 words=271
airngcensus seq=2 rng=0x0db65a10 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=6 words=0
airngcensus seq=2 rng=0x0db65a10 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=6 words=6
airngcensus seq=2 rng=0x0db65a10 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=1 words=1
airngcensus seq=2 rng=0x0db65a10 ret_rva=0x0029dc02 va=0x0069dc02 entry=NextInt calls=1 words=1
airngcensus seq=2 rng=0x0db65a10 ret_rva=0x0029dc2e va=0x0069dc2e entry=NextInt calls=1 words=1
airngcensus seq=2 rng=0x35da9408 ret_rva=0x002ad878 va=0x006ad878 entry=NextFloat calls=3 words=3
airng seq=3 pid=496 agent=0x348a0528 rng=0x35adde50 pin=off:00000000 left=207->207 idx=417->417 left_delta=0 observed=0 calls=0 residual=0 foreign_words=0 foreign_calls=0 sites=0 overflow=0 life_in=417 life_out=417
airngen seq=3 rng=0x01636e58 life_words=3 life_calls=3
airngen seq=3 rng=0x35da9408 life_words=29 life_calls=24
airngen seq=3 rng=0x35adde50 life_words=417 life_calls=287 <-- this bracket
airngen seq=3 rng=0x0db65a10 life_words=427 life_calls=289
airngcensus seq=3 rng=0x01636e58 ret_rva=0x00384f9e va=0x00784f9e entry=NextUInt calls=3 words=3
airngcensus seq=3 rng=0x35da9408 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=11 words=0
airngcensus seq=3 rng=0x35da9408 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=11 words=11
airngcensus seq=3 rng=0x35da9408 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=8 words=10
airngcensus seq=3 rng=0x35da9408 ret_rva=0x0029dc02 va=0x0069dc02 entry=NextInt calls=1 words=4
airngcensus seq=3 rng=0x35da9408 ret_rva=0x0029dc2e va=0x0069dc2e entry=NextInt calls=1 words=1
airngcensus seq=3 rng=0x35adde50 ret_rva=0x002cd02f va=0x006cd02f entry=NextInt calls=120 words=160
airngcensus seq=3 rng=0x35adde50 ret_rva=0x002cd062 va=0x006cd062 entry=NextInt calls=160 words=246
airngcensus seq=3 rng=0x35adde50 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=4 words=0
airngcensus seq=3 rng=0x35adde50 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=4 words=4
airngcensus seq=3 rng=0x35adde50 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=1 words=5
airngcensus seq=3 rng=0x35adde50 ret_rva=0x0029dc02 va=0x0069dc02 entry=NextInt calls=1 words=1
airngcensus seq=3 rng=0x35adde50 ret_rva=0x0029dc2e va=0x0069dc2e entry=NextInt calls=1 words=1
airngcensus seq=3 rng=0x0db65a10 ret_rva=0x002cd02f va=0x006cd02f entry=NextInt calls=120 words=147
airngcensus seq=3 rng=0x0db65a10 ret_rva=0x002cd062 va=0x006cd062 entry=NextInt calls=160 words=271
airngcensus seq=3 rng=0x0db65a10 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=6 words=0
airngcensus seq=3 rng=0x0db65a10 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=6 words=6
airngcensus seq=3 rng=0x0db65a10 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=1 words=1
airngcensus seq=3 rng=0x0db65a10 ret_rva=0x0029dc02 va=0x0069dc02 entry=NextInt calls=1 words=1
airngcensus seq=3 rng=0x0db65a10 ret_rva=0x0029dc2e va=0x0069dc2e entry=NextInt calls=1 words=1
airngcensus seq=3 rng=0x35da9408 ret_rva=0x002ad878 va=0x006ad878 entry=NextFloat calls=3 words=3
airng seq=4 pid=512 agent=0x3489de50 rng=0x0db65a10 pin=off:00000000 left=197->197 idx=427->427 left_delta=0 observed=0 calls=0 residual=0 foreign_words=0 foreign_calls=0 sites=0 overflow=0 life_in=427 life_out=427
airngen seq=4 rng=0x01636e58 life_words=3 life_calls=3
airngen seq=4 rng=0x35da9408 life_words=29 life_calls=24
airngen seq=4 rng=0x35adde50 life_words=417 life_calls=287
airngen seq=4 rng=0x0db65a10 life_words=427 life_calls=289 <-- this bracket
airngcensus seq=4 rng=0x01636e58 ret_rva=0x00384f9e va=0x00784f9e entry=NextUInt calls=3 words=3
airngcensus seq=4 rng=0x35da9408 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=11 words=0
airngcensus seq=4 rng=0x35da9408 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=11 words=11
airngcensus seq=4 rng=0x35da9408 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=8 words=10
airngcensus seq=4 rng=0x35da9408 ret_rva=0x0029dc02 va=0x0069dc02 entry=NextInt calls=1 words=4
airngcensus seq=4 rng=0x35da9408 ret_rva=0x0029dc2e va=0x0069dc2e entry=NextInt calls=1 words=1
airngcensus seq=4 rng=0x35adde50 ret_rva=0x002cd02f va=0x006cd02f entry=NextInt calls=120 words=160
airngcensus seq=4 rng=0x35adde50 ret_rva=0x002cd062 va=0x006cd062 entry=NextInt calls=160 words=246
airngcensus seq=4 rng=0x35adde50 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=4 words=0
airngcensus seq=4 rng=0x35adde50 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=4 words=4
airngcensus seq=4 rng=0x35adde50 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=1 words=5
airngcensus seq=4 rng=0x35adde50 ret_rva=0x0029dc02 va=0x0069dc02 entry=NextInt calls=1 words=1
airngcensus seq=4 rng=0x35adde50 ret_rva=0x0029dc2e va=0x0069dc2e entry=NextInt calls=1 words=1
airngcensus seq=4 rng=0x0db65a10 ret_rva=0x002cd02f va=0x006cd02f entry=NextInt calls=120 words=147
airngcensus seq=4 rng=0x0db65a10 ret_rva=0x002cd062 va=0x006cd062 entry=NextInt calls=160 words=271
airngcensus seq=4 rng=0x0db65a10 ret_rva=0x004e6e09 va=0x008e6e09 entry=NextFloat calls=6 words=0
airngcensus seq=4 rng=0x0db65a10 ret_rva=0x00178d15 va=0x00578d15 entry=Chance calls=6 words=6
airngcensus seq=4 rng=0x0db65a10 ret_rva=0x00179915 va=0x00579915 entry=NextInt calls=1 words=1
airngcensus seq=4 rng=0x0db65a10 ret_rva=0x0029dc02 va=0x0069dc02 entry=NextInt calls=1 words=1
airngcensus seq=4 rng=0x0db65a10 ret_rva=0x0029dc2e va=0x0069dc2e entry=NextInt calls=1 words=1
airngcensus seq=4 rng=0x35da9408 ret_rva=0x002ad878 va=0x006ad878 entry=NextFloat calls=3 words=3