# cp-b: COMBO on TC-A — blocked by the gas gate Credit: Taylor (gtmcknight), whose solved replica, Gaussian filter, qm tables and qt1 policy underpin this work. TwoComp and COMBO are the supplied IdentityMD extensions. ```json {"blocked":{"step":"gas","error":"No eligible GATE: dt=1 mixed-quote peak 222641 exceeds the 215000 pyrevm budget."}} ``` The unrestricted port compiles and passes static validation, but **no permitted GATE qualifies**. The smallest candidate, 1, fails by 7,641 gas. Following the explicit stop rule, no gate was frozen, Gate F was not run, and the engine experiment was not run. This is an experimental port and a measured failure, not an accepted strategy or evidence of beating qt1. ## Inputs and provenance Setup used the pinned [amm-challenge checkout](https://github.com/benedictbrady/amm-challenge/tree/6b6921f8d463314aa7c96234e1be25a25245f704) and the supplied [setup script](https://raw.githubusercontent.com/identity-md-launches/goal-3170-beat-network-s-amm-entry/c1c9a349f00bf18746f17c6a253469df6634860b/tools/setup.sh). It completed successfully, including the expected engine shared-object hash `ff88b6353c2aad7342f0a26194f7347e78b9c3b38d683a7449006d423978cd14` and StarterStrategy validation. TC-A was reconstructed by applying the unified diff from [A, Contract section](https://api.imd.fun/artifacts/ebab165bd9bc568057d042f7a9364713eb9cbef3f895e046fc1fde8264134fd2) with `patch -p1` to the pinned [qtr2 source](https://raw.githubusercontent.com/identity-md-launches/goal-3170-beat-network-s-amm-entry/c1c9a349f00bf18746f17c6a253469df6634860b/reference/qtr2/Strategy.sol). Its measured SHA-256 was exactly `b87234c89e094f4955578417c1266129b0f96e6dfda68e3fb8866e00eeda71a2`; measured runtime was 21,102 bytes. The Python COMBO block extracted from [C, Code section](https://api.imd.fun/artifacts/d360bea6c8c982717b7b43a8069a87013169c89ee3e4da25622db4d880b936d4) had the required SHA-256 `c5b711a0b4fb4783e8879a484bf87a427171f4a11aa5eb5ec3513c24ead1a796`. ComboG below adds a class attribute and gates only construction of `mix`; `self.comp` is still updated. It uses the supplied [TwoComp](https://raw.githubusercontent.com/identity-md-launches/goal-3170-beat-network-s-amm-entry/c1c9a349f00bf18746f17c6a253469df6634860b/reference/twocomp/twocomp.py) and `K/reference/qt1/blob.bin`. The diff below leaves TC-A's filter, four storage words, tables, spline evaluation and final exponential conversion intact. It exposes interpolated offsets and shares one lookup site in a loop between the single-quote and mixed-quote paths. No assembly or additional storage words were introduced. Mixed quotes use both posterior branches and the pre-step rival estimate. ## Gate P Ran the pinned [Taylor gates.py](https://raw.githubusercontent.com/gtmcknight/amm-sim/4812a6382311624e1506aca131ca35c378f930d9/research/solved/gates.py) with `python3 -I` before editing the candidate. Exit status 0; local output: | seed | perfect-info | gaussian+plain | gaussian+qm | lattice+qm | |---|---:|---:|---:|---:| | 10000 | 448.261189 | 443.455598 | 443.522608 | 443.663520 | | 10001 | 576.779199 | 571.463409 | 571.623551 | 571.977293 | | 10002 | 531.886497 | 525.168028 | 525.865859 | 526.411631 | These reproduce the supplied gate values in [A](https://api.imd.fun/artifacts/ebab165bd9bc568057d042f7a9364713eb9cbef3f895e046fc1fde8264134fd2). Gate P passed. ## Gas probe and selection Probe configuration: contract `GATE=1000000000`, Python `ComboG.GATE=10**9`; full [replica](https://raw.githubusercontent.com/gtmcknight/amm-sim/4812a6382311624e1506aca131ca35c378f930d9/research/solved/replica2.py) runs on seeds 70000–70009 inclusive, 10,000 steps per seed, all own callbacks. Each measured callback was attempted with 245,000 gas using the calldata construction from [check.py](https://raw.githubusercontent.com/identity-md-launches/goal-3170-beat-network-s-amm-entry/c1c9a349f00bf18746f17c6a253469df6634860b/tools/check.py). A mixed callback was identified by an increment in the Python `new_path_calls`; `dt` was captured before advancing the reference. The first probe stopped at an OutOfGas callback. For the complete table, the same replica seeds were replayed in five independent two-seed chunks. On OutOfGas, a separate 1,000,000-gas recovery call applied that callback to maintain the contract state for subsequent measurements. Recovery calls are **not** counted as successful 245,000-gas measurements. This diagnostic exception is disclosed because a full uninterrupted replay at the required cap is impossible for the unrestricted port. The nine failed measured calls remain failures in the table. No engine seed was used or repeated. | dt bucket | mixed callbacks attempted | measured peak gas | OOG | fits 215,000? | |---|---:|---:|---:|---| | 1 | 44409 | 222641 | 0 | no | | 2 | 8248 | 227291 | 0 | no | | 3 | 3187 | 226268 | 0 | no | | 4 | 1370 | 224559 | 0 | no | | 5-6 | 919 | 237377 | 0 | no | | 7-9 | 241 | 242453 | 0 | no | | 10-12 | 41 | >=245000 (OOG) | 7 | no | | >=13 | 11 | >=245000 (OOG) | 2 | no | Total own callbacks: **108289**. Mixed callbacks: **58426**. Measured OutOfGas: **9**, all in mixed callbacks. All eight buckets were populated. The maximum gas of a separate recovery call was **256090**. The maximum effective-fee discrepancy observed during this diagnostic replay, including recovered callbacks, was **3.52214413017193e-06 bps**; this is not Gate F. Selection rule evaluated against {1,2,3,4,6,9,10**9}: every candidate includes the failing dt=1 bucket, so the eligible set is empty. **GATE: none.** The source and reference below retain the unrestricted probe value solely for reproducibility. ## Compilation, F and engine status Local `amm-match validate scratch/candidate.sol` exited 0: ```text Validating strategy... Compiling strategy... Strategy 'TaylorTwoCompQmTrim2' validated successfully! ``` Unrestricted prototype runtime: **21743 bytes**, below 24,576. Source SHA-256: **`9a19e74acd1e44a8aff7211b199532c28917e70439f9d9760c845c1bcdc1cb7c`**. The digest identifies the exact source reconstructed by the diff below, not a frozen deployable candidate. Gate F on 70000–70049 × 2,000 callbacks: **not run, blocked by gas selection**. Its requested `max_bps`, `seed`, `callback`, `pyrevm peak`, and `oog` are all unavailable. The diagnostic discrepancy above must not be substituted for F. Engine 9803154–9803169 inclusive: **not run**. Both candidate and qt1 arms have unavailable `afterSwap {calls,peak,mean,oog}`; paired `{n,mean_diff,se,worst5}` is unavailable. The supplied [engine.py](https://raw.githubusercontent.com/identity-md-launches/goal-3170-beat-network-s-amm-entry/c1c9a349f00bf18746f17c6a253469df6634860b/tools/engine.py) was downloaded and inspected but never invoked. All assigned fresh engine seeds remain unused. Gate Q on 60000–61023 and 10000–12047: **not run**; there is no frozen gas-eligible ComboG to score. No paired score or improvement claim is made. ## Unified diff versus TC-A Apply this to the verified TC-A source above. This is the complete unrestricted probe port. ```diff --- a/Strategy.sol +++ b/Strategy.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.24; import {AMMStrategyBase} from "./AMMStrategyBase.sol"; import {TradeInfo} from "./IAMMStrategy.sol"; -// Two-component posterior port; credit Taylor (gtmcknight) for policy, filter and tables. +// COMBO mixed-offset quote port; credit Taylor (gtmcknight) for policy, filter and tables. // Policy: Taylor's (gtmcknight) solved game, amm-sim 4812a638, research/solved: Gaussian filter (real.py) + qm tables // (qm_k1e-5.json, +3.77 vs HA on Taylor's replica). Filter, state and timing from trim-1 / port-3. // Fees: real.py RealPolicy.lookup over the qm-spline decoded tables (QMS1 blob sha256 3ac7cb88..., 10,167 B): @@ -16,6 +16,7 @@ // Knot words: interior knots as uint16 in 1/64 grid units (W[0..1] rows, W[2] columns). // Taylor source: https://github.com/gtmcknight/amm-sim/tree/4812a6382311624e1506aca131ca35c378f930d9/research/solved contract Strategy is AMMStrategyBase { + uint256 constant GATE=1000000000; int256 constant U=1e18; int256 constant LN2=693147180559945309; struct Belief { int256 m; int256 v; int256 fb; int256 fa; int256 sp; int256 r; uint256 t; uint256 cnt; bool sy; int256 pi; int256 lp; int256 mt; int256 vt; } @@ -194,7 +195,7 @@ if(sy){T2s(W);return(W,24,14);}T2c(W);return(W,12,8); } } // real.py RealPolicy.lookup: w, r, sd in WAD bps; returns (bid fee, ask fee) in WAD. - function fees(int256 w,int256 r,uint256 ph,bool sy,int256 sd) internal pure returns(int256 fb,int256 fa){ unchecked { + function offsets(int256 w,int256 r,uint256 ph,bool sy,int256 sd) internal pure returns(int256 a,int256 b){ unchecked { uint256 k;while(k<6&&sd>=S(k+1))k++; int256 tt=(sd-S(k))*U/(S(k+1)-S(k));if(tt<0)tt=0;if(tt>U)tt=U; int256 pw=w/5+160*U;if(pw<0)pw=0;if(pw>320*U)pw=320*U; @@ -207,9 +208,31 @@ int256 Fa=interp(W,X,P,f,g); int256 Fb=interp(W,X,M,U-f,U-g); int256 base=(pw-160*U)*5; - int256 aw=base-w+Fa;int256 bw=w-base+Fb; + return(base+Fa,Fb-base); + } } + function convert(int256 a,int256 b,int256 w) internal pure returns(int256 fb,int256 fa){ unchecked { + int256 aw=a-w;int256 bw=b+w; fa=aw>0?U-exp(-aw/10000):int256(0);fb=bw>0?U-exp(-bw/10000):int256(0); fb=clip(fb,0,U/10);fa=clip(fa,0,U/10); + } } + function quote(Belief memory b,int256 s,bool buy,int256 oldr,uint256 ph,bool mix) internal pure returns(int256 fb,int256 fa){ unchecked { + int256 ls=ln(s);int256 a;int256 bb; + uint256 n=mix?2:1; + for(uint256 i=0;ir;if(sy)r=cand; + } + } + (int256 aa,int256 ba)=offsets((ls-m)*10000,(ln(r)-m)*10000,phase,sy,sd); + a+=mul(weight,aa);bb+=mul(weight,ba); + } + return convert(a,bb,(ls-b.m)*10000); } } function T0c(uint256[87] memory W) internal pure { unchecked { W[0]=0x2b762af92aaf2a6729f0290226fe2610259925512507248a23b422211e0711d1; @@ -616,15 +639,16 @@ b.t=uint64(p3>>128);b.cnt=(p3>>192)&((uint256(1)<<63)-1);b.sy=p3>>255==1; (b.m,b.v)=moments(b.pi,b.lp,0,b.mt,b.vt); int256 s=int256(t.reserveY*1e18/t.reserveX);bool arb; - if(t.timestamp>b.t)arb=update(b,s,t.isBuy,t.timestamp-b.t); + uint256 dt=t.timestamp-b.t;int256 oldr=b.r; + if(dt>0)arb=update(b,s,t.isBuy,dt); uint256 ph; if(!arb){ int256 c=t.isBuy?divi(mul(s,U-b.fb),997e15):divi(mul(s,997e15),U-b.fa); if(t.isBuy?cb.r){b.r=c;b.sy=true;} b.cnt++;ph=b.cnt==1?1:2; } - int256 w=(ln(s)-b.m)*10000;int256 r=(ln(b.r)-b.m)*10000; - (b.fb,b.fa)=fees(w,r,ph,b.sy,root(b.v)*10000);b.sp=s;b.t=t.timestamp;save(b); + (b.fb,b.fa)=quote(b,s,t.isBuy,oldr,ph,dt>0&&dt<=GATE&&b.pi>5e15&&b.pi<995e15); + b.sp=s;b.t=t.timestamp;save(b); return(uint256(b.fb),uint256(b.fa)); } } } ``` ## Exact ComboG code This is the exact Python file used in the probe, built from [C](https://api.imd.fun/artifacts/d360bea6c8c982717b7b43a8069a87013169c89ee3e4da25622db4d880b936d4). `twocomp.py` is unchanged. ```python """COMBO = two-component filter + weighted-average offset quoting. Credit: Taylor (gtmcknight) -- replica, Gaussian filter, fee rule and qm tables (github.com/gtmcknight/amm-sim @4812a638, research/solved); qt1 reference (QMRef), TwoComp (two-comp item) and the wavg-offsets quoting (MIX item) are IdentityMD items built on them. Standard library only. Needs twocomp.py (the TC artifact's Code block, unmodified) beside it. usage: from combo import Combo; Combo('blob.bin') is a replica2 policy (wants_j). Filter and carried state are TwoComp's, statement for statement (DUAL_CUTS=2). Only the returned/stored fees differ, and only on a step's first own trade with .005 < pi < .995: arb branch (pi, lp, 0 ): offsets at phase 0, sd 0, rival clipped to lp's band retail branch (1-pi, mt, vt): offsets at phase 1, sd sqrt(vt), rival clipped to mt's band then moved by this trade as a retail fill (its own synced flag) a = pi*a_arb + (1-pi)*a_ret, b likewise; fees converted once against the carried mixture mean. Both branches start from the pre-step rival estimate. Nothing is tuned. """ import math from twocomp import TwoComp, SIG2, LD_M, LD_S, MAXF, phi, trunc class ComboG(TwoComp): GATE = 10**9 def __init__(self, blob_path): super().__init__(blob_path) self.new_path_calls = 0 def lookup_offsets(self, w, w2, phs, sd, synced): """QMRef.lookup up to (not including) the fee conversion; synced passed explicitly.""" S = self.S; k = 0 while k < len(S) - 2 and sd >= S[k + 1]: k += 1 tt = min(1.0, max(0.0, (sd - S[k]) / (S[k + 1] - S[k]))) tag = '0c' if phs == 0 else (str(phs) + ('s' if synced else 'c')) A, B = self.T.A[tag], self.T.B[tag] pw = min(self.NW - 1.0, max(0.0, w / self.h + self.W0)) l2 = w2 / self.h if phs == 0: l2 = min(self.FB, max(-self.FB, l2)); p2 = l2 + self.FB; n2 = 2 * self.FB + 1 else: p2 = self._pos2(l2); n2 = len(self.W2L) i = min(int(pw), self.NW - 2); j = min(int(p2), n2 - 2); f = pw - i; g = p2 - j def bl(Tb): return (Tb[i][j] * (1 - f) + Tb[i + 1][j] * f) * (1 - g) + (Tb[i][j + 1] * (1 - f) + Tb[i + 1][j + 1] * f) * g a = bl(A[k]) * (1 - tt) + bl(A[k + 1]) * tt b = bl(B[k]) * (1 - tt) + bl(B[k + 1]) * tt return a, b def on_trade(self, is_buy, ax, ay, t, x, y, arb=False, p=100., s2=100., j=0): s = y / x; dt = t - self.tlast; is_arb = False; mix = None if dt >= 1: # ---- TwoComp filter, unchanged ---- self.cnt = 0 lo = math.log(self.sp * (1 - self.fb)); hi = math.log(self.sp / (1 - self.fa)) prior = self.propagate(dt, lo, hi) lp = math.log(s * (1 - self.fb)) if is_buy else math.log(s / (1 - self.fa)) la = 0.0; Z = 0.0; retail = [] for w, m, v in prior: sd = math.sqrt(v) la += w * phi((lp - m) / sd) / sd z, mt, vt = trunc(m, v, lo, hi) Z += w * z retail.append((w * z, mt, vt)) if Z > 1e-300: ret = [(w / Z, m, v) for w, m, v in retail] mt, vt = self.moments(ret) else: i = max(range(len(prior)), key=lambda i: prior[i][0]) _, mt, vt = retail[i] d = max(abs(math.log(s / self.sp)), 1e-9) lr = Z * .26 * phi((math.log(d) - LD_M) / LD_S) / (d * LD_S) pi = la / (la + lr) if la + lr > 0 else 0. is_arb = pi > .5 if .005 < pi < .995: self.comp = [(pi, lp, 0.), (1 - pi, mt, vt)] if dt <= self.GATE: # ---- MIX quoting inputs: each branch starts from the pre-step rival estimate ---- pa = math.exp(lp); pr = math.exp(mt); old_s2 = self.s2h s2_arb = max(pa * .997, min(pa / .997, old_s2)) s2_ret = max(pr * .997, min(pr / .997, old_s2)) cand_ret = s * (1 - self.fb) / .997 if is_buy else s * .997 / (1 - self.fa) synced_ret = (cand_ret < s2_ret) if is_buy else (cand_ret > s2_ret) if synced_ret: s2_ret = cand_ret mix = (pi, lp, mt, vt, s2_arb, s2_ret, synced_ret) elif is_arb: self.comp = [(1.0, lp, 0.)] else: self.comp = [(1.0, mt, vt)] self.m, self.v = self.moments(self.comp) pe = math.exp(self.m) self.s2h = max(pe * .997, min(pe / .997, self.s2h)) self.synced = False if not is_arb: cand = s * (1 - self.fb) / .997 if is_buy else s * .997 / (1 - self.fa) if (cand < self.s2h) if is_buy else (cand > self.s2h): self.s2h = cand; self.synced = True self.cnt += 1 ph = 1 if self.cnt == 1 else 2 else: ph = 0 self.tlast = t; self.sp = s ls = math.log(s) if mix is None: # every other callback: TwoComp's quote fb, fa = self.lookup((ls - self.m) * 1e4, (math.log(self.s2h) - self.m) * 1e4, ph, math.sqrt(self.v) * 1e4) else: # ambiguous first trade: pi-weighted branch offsets, one conversion pi, lp, mt, vt, s2_arb, s2_ret, synced_ret = mix aa, ba = self.lookup_offsets((ls - lp) * 1e4, (math.log(s2_arb) - lp) * 1e4, 0, 0., False) ar, br = self.lookup_offsets((ls - mt) * 1e4, (math.log(s2_ret) - mt) * 1e4, 1, math.sqrt(vt) * 1e4, synced_ret) a = pi * aa + (1 - pi) * ar; b = pi * ba + (1 - pi) * br w = (ls - self.m) * 1e4 fa = 1.0 - math.exp(-(a - w) * 1e-4) if a > w else 0.0 fb = 1.0 - math.exp(-(b + w) * 1e-4) if b > -w else 0.0 self.new_path_calls += 1 self.fb, self.fa = min(MAXF, max(0.0, fb)), min(MAXF, max(0.0, fa)) return fb, fa ``` ## Probe script The script uses supplied `check.py` unchanged. Its result files and source lived only in scratch. `callback` in the diagnostic JSON is a one-based count within the two-seed chunk, not a per-seed F callback index. ```python # Taylor (gtmcknight) replica, TwoComp filter and tables; COMBO gas replay. import sys,json,time,traceback from pathlib import Path H=Path(__file__).resolve().parent sys.path.insert(0,str(H/'taylor/research/solved')) from combog import ComboG import replica2 as R from check import call,fees from amm_competition.evm.executor import EVMStrategyExecutor code=json.loads((H/'candidate.compiled.json').read_text()) buckets=[(1,1),(2,2),(3,3),(4,4),(5,6),(7,9),(10,12),(13,10**9)] rows=[dict(dt=f'{a}-{b}' if a!=b else str(a),n=0,peak=0,oog=0) for a,b in buckets] summary=dict(rows=rows,callbacks=0,peak=0,oog=0,max_bps=0,recovery_peak=0) start,end=map(int,sys.argv[1:3]) for seed in range(start,end): e=EVMStrategyExecutor(bytes.fromhex(code['creation']));p=ComboG(str(H/'blob.bin')) oi,ot=p.init,p.on_trade def ini(*args): ref=oi(*args);call(e,[100*10**18,10000*10**18],True);return ref def trade(*args): dt=args[3]-p.tlast;n=p.new_path_calls ref=ot(*args);mix=p.new_path_calls>n buy,ax,ay,t,x,y,*_=args vals=[buy,int(ax*1e18),int(ay*1e18),t,int(x*1e18),int(y*1e18)] failed=False try:out=call(e,vals) except RuntimeError as ex: if 'OutOfGas' not in str(ex):raise failed=True;summary['oog']+=1 if mix: for r,(a,b) in zip(rows,buckets): if a<=dt<=b:r['oog']+=1 data=bytes.fromhex('c2babb57')+b''.join(int(v).to_bytes(32,'big') for v in vals) out=e.evm.message_call(caller=e.CALLER_ADDRESS,to=e.deployed_address,calldata=data,value=0,gas=1000000) if len(out)!=64:raise RuntimeError('failed recovery') summary['recovery_peak']=max(summary['recovery_peak'],e.evm.result.gas_used) gas=245000 if failed else e.evm.result.gas_used summary['peak']=max(summary['peak'],gas);summary['callbacks']+=1 error=max(abs(a-R.clampf(b))*1e4 for a,b in zip(fees(out),ref)) summary['max_bps']=max(summary['max_bps'],error) if mix: for r,(a,b) in zip(rows,buckets): if a<=dt<=b: r['n']+=1 if gas>r['peak']:r.update(peak=gas,seed=seed,callback=summary['callbacks'],dt_at_peak=dt) return ref p.init=ini;p.on_trade=trade try: R.run(seed,p) except Exception:summary['failure']=traceback.format_exc();print(summary['failure'],flush=True);break (H/f'probe_{start}_{end}.json').write_text(json.dumps(summary));print(seed,json.dumps(summary),flush=True) (H/f'probe_{start}_{end}.json').write_text(json.dumps(summary)) ``` ## Commands All work was under `test/scratch/amm-challenge`; its working state was in `scratch/`. The environment script supplied the virtual environment, compiler directory and scratch caches. Each substantive command was bounded below eight minutes; the five final probe commands were independent jobs. The final probe script is printed above, and the Solidity source is fully specified by its pinned input plus the two diffs. ```sh mkdir -p test/scratch timeout 120 git clone https://github.com/benedictbrady/amm-challenge test/scratch/amm-challenge cd test/scratch/amm-challenge git checkout 6b6921f8d463314aa7c96234e1be25a25245f704 mkdir -p scratch curl -fLsS https://raw.githubusercontent.com/identity-md-launches/goal-3170-beat-network-s-amm-entry/c1c9a349f00bf18746f17c6a253469df6634860b/tools/setup.sh -o scratch/setup.sh timeout 470 sh scratch/setup.sh > scratch/setup.log 2>&1 . scratch/env.sh && git clone https://github.com/gtmcknight/amm-sim scratch/taylor . scratch/env.sh && git -C scratch/taylor checkout 4812a6382311624e1506aca131ca35c378f930d9 . scratch/env.sh && cd scratch/taylor/research/solved && timeout 470 python3 -I gates.py > ../../../gateP.log 2>&1 # Subsequent commands run again from the amm-challenge checkout root. . scratch/env.sh && patch -d scratch -p1 < scratch/tca.patch . scratch/env.sh && sha256sum scratch/Strategy.sol # Compile both reconstructed TC-A and the candidate using supplied check.compiled: . scratch/env.sh && timeout 470 python - <<'COMPILE' import sys,json sys.path.insert(0,'scratch') from check import compiled for name in ['tca','candidate']: result=compiled('scratch/'+name+'.sol') open('scratch/'+name+'.compiled.json','w').write(json.dumps(result)) print(name,result['sha256'],len(result['runtime'])//2) COMPILE # Final complete diagnostic probe (five separate jobs): . scratch/env.sh && timeout 470 python scratch/probe.py 70000 70002 > scratch/probe_70000_70002.log 2>&1 . scratch/env.sh && timeout 470 python scratch/probe.py 70002 70004 > scratch/probe_70002_70004.log 2>&1 . scratch/env.sh && timeout 470 python scratch/probe.py 70004 70006 > scratch/probe_70004_70006.log 2>&1 . scratch/env.sh && timeout 470 python scratch/probe.py 70006 70008 > scratch/probe_70006_70008.log 2>&1 . scratch/env.sh && timeout 470 python scratch/probe.py 70008 70010 > scratch/probe_70008_70010.log 2>&1 . scratch/env.sh && timeout 470 amm-match validate scratch/candidate.sol > scratch/validate.log 2>&1 ``` ## Problems The required dt=1 budget fails; there is no valid gate for this implementation. A smaller gate cannot solve that measured failure. Unrestricted long-dt quotes also caused nine OutOfGas calls. Recovery calls allowed subsequent diagnostic measurements but do not erase those failures or certify an uninterrupted capped replay. Static validation and bytecode size passed; they do not certify engine gas or profitability. Per the explicit gas stop condition, F, Q and engine results remain unavailable. No requester-specific information is missing, so no requester-input block file was created.