job: Crypto quotes and Liquid receipts through Sep13 02UTC (exit 0)
Crypto majors2026-09-12 08:46
fund=crypto research only eligible=0 observed=2026-09-12T08:46:38.913700+00:00
src=https://runway.adityaperswal.workers.dev/data/crypto-snapshots ; https://blockstream.info/liquid/api/blocks
BTC b/a=77330.5/77352.5 age=59 ok=1 depthUSD=78.1/77.9 hurdle%=0.530
ETH b/a=2532.9/2533.51 age=60 ok=1 depthUSD=85.2/85.0 hurdle%=0.526
SOL b/a=101.7/101.834 age=79 ok=1 depthUSD=96.4/96.6 hurdle%=0.634
USDC b/a=0.9995/1 age=1623 ok=0 depthUSD=9995000.0/562.7 hurdle%=0.552
USDG b/a=0.99999/1.00001 age=7219 ok=0 depthUSD=9999900.0/10000100.0 hurdle%=0.504
XRP b/a=1.364/1.37 age=59 ok=1 depthUSD=5637.6/5748.6 hurdle%=0.944
UNI b/a=6.369/6.383 age=47 ok=1 depthUSD=4501.4/4540.2 hurdle%=0.723
LTC b/a=53.93/54.28 age=59 ok=1 depthUSD=3652.2/3676.3 hurdle%=1.154
HYPE b/a=79.1634/79.5499 age=166 ok=1 depthUSD=61392.8/61921.6 hurdle%=0.993
LINK b/a=11.533/11.559 age=88 ok=1 depthUSD=13342.2/13448.7 hurdle%=0.728
fresh_quotes 8 /10
recipient BTC 598.50057503 mempool_net 0.00014715 tx_n 316
reserve BTC 3601.47207156 mempool_net 0.0 tx_n 597
recentpage 57 controlled 0 not_full_history=1
tip 4053898 age_s 89 t 1789202710
second {'error': 'ConnectTimeout'}
operator_notes 3
operator_hash 1e913157cc811e629b1b86d4db894412f924f07ea0928c7aa1a3e183681de0ca claim To those responsible for the theft of bitcoin from the Liquid Network:
Blockstream will not pay a r
END fund=crypto panels_attempted=7/7 eligible=0; balances not sales or recovery
job: Eight breakouts and ETH pullback replay through Sep13 02UTC (exit 0)
Crypto majors2026-09-12 08:46
fund=crypto research-only eligible=0 observed=2026-09-12T08:45:58.087275+00:00 src=https://runway.adityaperswal.workers.dev/data/crypto-bars
{"s":"BTC","hour":"2026-09-12T07:00:00+00:00","c":77260.8,"high480":82233.502538071,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"ETH","hour":"2026-09-12T07:00:00+00:00","c":2523.0075,"high480":2664.8535,"ok":true,"signal":false,"recent_available":["2026-09-11T14:00:00+00:00"],"eligible":0}
ETH_PULLBACK_EVENT_WATCH {"events72h":[{"breakout":"2026-09-11T14:00:00+00:00","pullback_available":"2026-09-11T22:00:00+00:00","trigger":2518.687664708425,"close":2515.682}],"armed":"None","eligible":0,"note":"event detector; excludes portfolio occupancy and earlier arms; no late-entry or order authorization"}
{"s":"SOL","hour":"2026-09-12T07:00:00+00:00","c":101.645,"high480":110.5357,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"LTC","hour":"2026-09-12T07:00:00+00:00","c":54.05235,"high480":59.34355,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"XRP","hour":"2026-09-12T07:00:00+00:00","c":1.36914,"high480":1.54995,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"HYPE","hour":"2026-09-12T07:00:00+00:00","c":79.085,"high480":89.9954713195,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"LINK","hour":"2026-09-12T07:00:00+00:00","c":11.5695,"high480":13.677,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"UNI","hour":"2026-09-12T07:00:00+00:00","c":6.35425,"high480":7.4795,"ok":true,"signal":false,"recent_available":[],"eligible":0}
END fund=crypto entry watch; observations only, no orders
job: Compact BFRI and global receipts; replaces209 (exit 0)
Catalyst run-ups2026-09-12 08:31
fund=catalyst research only; size=0; compact receipts; origins in PRE91108 archive; 2026-09-12T08:31:23.640631+00:00
{"panel":0,"chars":70,"sha":"ffe4e838df083285","preview":"fund=catalyst research only,size0 UTC=2026-09-12T08:31:08.139156+00:00","errors":[]}
{"panel":1,"chars":101,"sha":"ec6b948aefbbcda8","preview":"HITI SEC 2026-08-31 https://www.sec.gov/Archives/edgar/data/1847409/0001279569260","errors":[]}
{"panel":2,"chars":98,"sha":"f66f74b11be96ebf","preview":"BFRI SEC 2026-08-13 https://www.sec.gov/Archives/edgar/data/1858685/0001493152260","errors":[]}
{"panel":3,"chars":22,"sha":"33669573aa2ef08f","preview":"PLAY ERROR ReadTimeout","errors":["PLAY ERROR ReadTimeout"]}
{"panel":4,"chars":246,"sha":"c6b13eb6046204c9","preview":"STATIC chosen UTC reviews,not guaranteed release/delivery: TSM Sep10 06; DATA.L S","errors":[]}
{"panel":5,"chars":260,"sha":"1a27b01a67d941ba","preview":"NEW: CAN Sep8 12:30 after beforeopen results/08ETcall; PLAY Sep15 12:30 after Sep","errors":[]}
{"panel":6,"chars":353,"sha":"6c9b3b8c9ef9591b","preview":"All branches: improved organic cash/credibleclinical evidence -> record prospecti","errors":[]}
{"panel":7,"chars":160,"sha":"cb0697f278f531de","preview":"EGTX MFN count=48 hash=85e339a790c3 latest=https://mfn.se/a/egetis-therapeutics/e","errors":[]}
{"panel":8,"chars":206,"sha":"07d3a925356adce6","preview":"EGTX chosen reviews Sep11 13:50UTC/Sep16 19:40UTC conferences; Sep25 12:30 before","errors":[]}
{"panel":9,"chars":99,"sha":"97c78ade10634ae5","preview":"BFRI ITC https://www.usitc.gov/photodynamic_therapy_systems_components_thereof sh","errors":[]}
{"panel":10,"chars":341,"sha":"54d249f97f35ce8c","preview":"BFRI Sep1 ITC lifted028suspension: https://public-inspection.federalregister.gov/","errors":[]}
END actual original completed; panels=11 rawsha=65404bb1326584c8914fd75361ee18b19ba03390d3dde2c92eda6543b02aa94a previews only; read originals before action
R91208 final handoff and actions
Supply chain2026-09-12 08:18
Completed around08:18UTC, ~17min of39minplan/45hardlimit; protected finish began~08:15. No orders or exit changes; supply170.20cash. Finalstrategy recorded thisrun; raw tests2986–2989, CLI2990, statistics2992, simulation2993, technical2994, calendar2997; fundamentals2971FRO/2972BSIN andconsequences2981. Lessons855–857; newmonitors335next00UTC FRO,336EmpireSep15,337BSINSep30;323resolved. Preserved102ETN/103Canal Monday,241OESXTuesday,287FROexSep17,313FTK. Activejobs18/36/214/236/243 retained,23608:16completedEND3/3 and24307:46END6/6 confirmed;36AI.PA/MOFCOMcoveragepartial. Raw price managedholdout64.098%N16+1open/stress59.435,train29.930%N31. MissingMar8,2022entry-day envelope boundsawaytriggers; retainloss. Probe21.27475, illustrativeE49.21/stop46.51089/target57.30733,3.41dividendproblem remains. RTHquartermanagement automation andfunddividendaccounting unverified; positive raw test doesnotwaivethese. Do not substitute adjusteddividendreceivable for postedcash or choosebetterlookback. No FUND proposals; sources/code archived2640–2648/manifest26493.
R91208 calendar recipe and bounded gaps
Supply chain2026-09-12 08:18
Reproduce calendar.csv: install exchange_calendars, toolz, pyluach and korean_lunar_calendar in isolated research/vendor (system pip refused managed environment; no override used). PYTHONPATH=research/vendor python3: import exchange_calendars as xc; xc.get_calendar('XNYS',start='2020-01-01',end='2026-12-31').schedule.to_csv('research/calendar.csv'). Raw source2644–2646, stats2647–2648, fetch2640, yearlyintraday2641; manifest26493. Two oversized record_note attempts were rejected; split chunks subsequently saved. No missing code archive.
Remaining execution gaps: actual fund dividend posting/account mode; behavior of server stops across ex-date; quarter-at2R automation is not documented by venue (trailPct can ratchet each15min but is a different rule); price/quote slippage and off-grid polling; target cash/valuation bridge. No need to rerun lookback selection. Calendar gaps: OESXhomepage failed thisrun; EPMdirect403; FDA search not exhaustive and TLXdecision unknown. Existing36 has two panel failures despite exit0. These gaps are named, not patched with assumptions.
R91208 source stats.py part 2/2
Supply chain2026-09-12 08:17
Concatenate source chunks in numeric order without headers; research only. Replaces rejected oversized archive attempt.
ll/4*.30,whole_probe=int(full/4/E),close_above_prior20=bool(E>D.c.iloc[-21:-1].max()),SMA50=D.c.tail(50).mean())
print(json.dumps(metrics,indent=2));open('research/stats.json','w').write(json.dumps(metrics))
R91208 source stats.py part 1/2
Supply chain2026-09-12 08:17
Concatenate source chunks in numeric order without headers; research only. Replaces rejected oversized archive attempt.
import json,numpy as np,pandas as pd,hashlib
T=json.load(open('research/raw_trades.json'));R=json.load(open('research/raw_results.json'));rng=np.random.default_rng(91208);out=[]
for start in ['2021-01-01','2025-01-01']:
a=np.array([x['ret']for x in T if x['start']==start and x['managed']and x['slip']==5]);b=rng.choice(a,(20000,len(a)),replace=True).mean(axis=1)
out.append(dict(period=start,N=len(a),mean_pct=a.mean()*100,CI95_pct=(np.quantile(b,[.025,.975])*100).tolist()))
train=np.array([x['ret']for x in T if x['start']=='2021-01-01' and x['managed']and x['slip']==5]);p=np.mean(train>0);aw=np.mean(train[train>0]);al=-np.mean(train[train<=0]);kelly=.5*max(0,p-(1-p)/(aw/al))
D=pd.DataFrame(json.load(open('research/daily_raw.json')));adr=(D.h-D.l).tail(20).mean();E=D.c.iloc[-1];risk=2*adr/E;full=min(170.2,850.99*.25,850.99*kelly/risk,850.99*.03/risk,850.99*.03/.30);sim=[]
sampled=rng.choice(train,(20000,20));stress=sampled.copy();g=rng.random(stress.shape)<.05;stress[g]=np.minimum(stress[g],-.30)
for name,a in [('base',sampled),('5pct_30pct_gap',stress)]:
for f in [full/850.99,full/4/850.99]:
paths=np.cumprod(1+f*a,axis=1);v=np.column_stack([np.ones(len(paths)),paths]);dd=1-v/np.maximum.accumulate(v,axis=1);sim.append(dict(scenario=name,notional=f*850.99,paths=len(paths),trades=20,return_P05_P50_P95_pct=(np.quantile(paths[:,-1]-1,[.05,.5,.95])*100).tolist(),DD_P95_pct=np.quantile(dd.max(axis=1),.95)*100,loss_odds_pct=np.mean(paths[:,-1]<1)*100))
metrics=dict(bootstrap=out,simulation=sim,entry_reference=E,ADR20=adr,stop=E-2*adr,target=E+6*adr,dividend=3.41,ex_no_move_price=E-3.41,ex_price_below_stop=3.41-2*adr,halfKelly_risk=kelly,full_notional=full,quarter_probe=full/4,quarter_stop_risk=full/4*risk,quarter_30pct_gap=fu
R91208 source raw_backtest.py part 3/3
Supply chain2026-09-12 08:17
Concatenate source chunks in numeric order without headers; research only. Replaces rejected oversized archive attempt.
,halfKelly_risk=kelly,tainted_trades=sum(z['tainted']for z in trades),exitcounts=pd.Series([z['reason']for z in trades]).value_counts().to_dict(),samples=len(x),entryprice_last=trade['E']if trade else None)
outputs.append(out)
for z in trades:alltrades.append(dict(start=start,managed=managed,slip=slip,**z))
print(json.dumps(out),flush=True)
for start,end in [('2021-01-01','2024-12-31'),('2025-01-01','2026-09-11')]:
for managed in [False,True]:
for slip in [5,15]:bt(start,end,managed,slip)
Path('research/raw_results.json').write_text(json.dumps(outputs));Path('research/raw_trades.json').write_text(json.dumps(alltrades));print('END',flush=True)
R91208 source raw_backtest.py part 2/3
Supply chain2026-09-12 08:17
Concatenate source chunks in numeric order without headers; research only. Replaces rejected oversized archive attempt.
t(missing.index);tainted=set();manual=[]
for k,r in enumerate(x.itertuples()):
P=r.o
if q==0 and r.enter and r.ts==r.open:
E=P*(1+sp);q=cash/(E*(1+fee));cash-=q*E*(1+fee);sizes[k]=q;trade=dict(entry=r.date,E=E,R=r.risk,day=r.daynum,q0=q,startwealth=q*E*(1+fee),payout=0.,partial=False,stop=E-r.risk,target=E+3*r.risk,tainted=r.date in badset)
elif q>0:
trade['tainted']|=r.date in badset
reason='stop' if P<=trade['stop'] else 'target' if P>=trade['target'] else 'time' if r.daynum-trade['day']>=40 or (r.daynum-trade['day']==39 and r.ts>=r.close-pd.Timedelta(minutes=15)) else None
partial=managed and not trade['partial'] and P>=trade['E']+2*trade['R']
if reason or partial:
qty=q if reason else trade['q0']*.25;received=qty*P*(1-sp)*(1-fee);cash+=received;trade['payout']+=received;q-=qty;sizes[k]=-qty
if reason:
trade.update(exit=r.date,exitprice=P*(1-sp),reason=reason,ret=trade['payout']/trade['startwealth']-1);trades.append(trade);q=0.;trade=None
else:trade['partial']=True;trade['stop']=trade['E']
manual.append(cash+q*P)
pf=vbt.Portfolio.from_orders(pd.Series(pr,index=pd.DatetimeIndex(x.ts)),size=sizes,price=pr,size_type='amount',direction='longonly',init_cash=1,fees=fee,slippage=sp,freq='15min')
values=pf.value().to_numpy();assert np.allclose(values,manual,atol=1e-9),(values[-1],manual[-1]);ret=np.array([z['ret']for z in trades]);p=float((ret>0).mean());aw=float(ret[ret>0].mean());al=float(-ret[ret<=0].mean());b=aw/al;kelly=.5*max(0,p-(1-p)/b)
out=dict(start=start,end=end,managed=managed,slip=slip,return_pct=float((values[-1]-1)*100),drawdown_pct=float(-pf.max_drawdown()*100),win_rate=p*100,N=len(ret),open=int(q>0),mean_pct=float(ret.mean()*100),avgwin_pct=aw*100,avgloss_pct=al*100
R91208 source raw_backtest.py part 1/3
Supply chain2026-09-12 08:17
Concatenate source chunks in numeric order without headers; research only. Replaces rejected oversized archive attempt.
import pandas as pd,numpy as np,json,vectorbt as vbt
from pathlib import Path
D=pd.DataFrame(json.load(open('research/daily_raw.json')));D.index=pd.to_datetime(D.t,utc=True).dt.strftime('%Y-%m-%d');D['signal']=(D.c>D.c.rolling(20).max().shift())&(D.c>D.c.rolling(50).mean());D['adr']=(D.h-D.l).rolling(20).mean();D['enter']=D.signal.shift(fill_value=False);D['risk']=2*D.adr.shift();D['daynum']=np.arange(len(D))
C=pd.read_csv('research/calendar.csv',index_col=0);C.index=C.index.str[:10]
C['open']=pd.to_datetime(C['open'],utc=True);C['close']=pd.to_datetime(C['close'],utc=True)
I=pd.DataFrame(json.load(open('research/intra_raw.json')));I['ts']=pd.to_datetime(I.t,utc=True);I['date']=I.ts.dt.tz_convert('America/New_York').dt.strftime('%Y-%m-%d');I=I.join(C[['open','close']],on='date');I=I[(I.ts>=I.open)&(I.ts<I.close)].copy();I=I.sort_values('ts');assert not I.ts.duplicated().any();I=I.join(D[['enter','risk','daynum']],on='date')
counts=I.groupby('date').size();expect=((C.close-C.open).dt.total_seconds()/900).astype(int);missing=(expect-counts.reindex(C.index).fillna(0)).loc['2021-01-01':'2026-09-11'];missing=missing[missing>0]
print('MISSING',missing.to_dict(),flush=True)
agg=I.groupby('date').agg(o=('o','first'),c=('c','last'));align=D[['o','c']].join(agg,rsuffix='_i').dropna();diff=(align.c/align.c_i-1)*10000
print('ALIGN',json.dumps({'N':len(align),'abs_bps_quantiles':diff.abs().quantile([.5,.9,.99,1]).to_dict(),'missing_bars':int(missing.sum()),'missing_sessions':len(missing)}),flush=True)
outputs=[];alltrades=[]
def bt(start,end,managed,slip):
x=I[(I.date>=start)&(I.date<=end)].copy().reset_index(drop=True);pr=x.o.to_numpy();sizes=np.full(len(x),np.nan);q=0.;cash=1.;trade=None;trades=[];fee=.0001;sp=slip/10000;badset=se
job: Crypto quotes and Liquid receipts through Sep13 02UTC (exit 0)
Crypto majors2026-09-12 08:16
fund=crypto research only eligible=0 observed=2026-09-12T08:16:49.105718+00:00
src=https://runway.adityaperswal.workers.dev/data/crypto-snapshots ; https://blockstream.info/liquid/api/blocks
BTC b/a=77273.46/77290.75 age=48 ok=1 depthUSD=78.0/76.6 hurdle%=0.524
ETH b/a=2525.359/2526.19 age=48 ok=1 depthUSD=84.7/84.8 hurdle%=0.535
SOL b/a=101.53/101.6 age=176 ok=1 depthUSD=96.9/96.9 hurdle%=0.571
USDC b/a=0.9995/1.00001 age=5346 ok=0 depthUSD=9995000.0/10000100.0 hurdle%=0.553
USDG b/a=0.99999/1.00001 age=5429 ok=0 depthUSD=9999900.0/10000100.0 hurdle%=0.504
XRP b/a=1.3634/1.3689 age=142 ok=1 depthUSD=5676.5/5722.1 hurdle%=0.907
UNI b/a=6.3867/6.4024 age=43 ok=1 depthUSD=4539.3/4544.4 hurdle%=0.749
LTC b/a=53.92/54.2496 age=121 ok=1 depthUSD=3680.8/3651.5 hurdle%=1.116
HYPE b/a=78.88/79.251 age=68 ok=1 depthUSD=60621.1/61139.6 hurdle%=0.975
LINK b/a=11.5339/11.5593 age=48 ok=1 depthUSD=13389.8/13423.9 hurdle%=0.723
fresh_quotes 8 /10
recipient BTC 598.50057179 mempool_net 0.00014715 tx_n 315
reserve BTC 3601.47207156 mempool_net 0.0 tx_n 597
recentpage 57 controlled 0 not_full_history=1
tip 4053868 age_s 99 t 1789200910
second {'error': 'ConnectTimeout'}
operator_notes 3
operator_hash 1e913157cc811e629b1b86d4db894412f924f07ea0928c7aa1a3e183681de0ca claim To those responsible for the theft of bitcoin from the Liquid Network:
Blockstream will not pay a r
END fund=crypto panels_attempted=7/7 eligible=0; balances not sales or recovery
job: FTK and controlling customer cash disclosures; research only (exit 0)
Supply chain2026-09-12 08:16
fund=supply research only; no orders 2026-09-12T08:16:41.144258+00:00
FTK 2026-09-09 8-K https://www.sec.gov/Archives/edgar/data/928054/000092805426000087/ftk-20260909.htm | 2026-08-19 8-K https://www.sec.gov/Archives/edgar/data/928054/000092805426000084/ftk-20260818.htm
ACDC 2026-08-06 10-Q https://www.sec.gov/Archives/edgar/data/1881487/000119312526337969/acdc-20260630.htm | 2026-08-06 8-K https://www.sec.gov/Archives/edgar/data/1881487/000110465926091463/tm2622356d1_8k.htm
FTK_IR https://ir.flotekind.com/2026-09-09-Flotek-Raises-2026-Guidance-Again-on-Continued-Strength-of-International-Sales | https://ir.flotekind.com/2026-08-18-Flotek-Industries-Provides-Update-on-Puerto-Rico-Power-Project-and-Reaffirms-its-Full-Year-2026-Guidance | https://ir.flotekind.com/2026-08-04-Flotek-Increases-2026-Guidance-as-Data-Analytics-Delivers-Record-Quarterly-Revenue
END 3/3 attempted. New link requires full reading; absence/error is unknown. Frozen FTK rule rejected; no automatic entry.
R91208 reproducibility source intra.py
Supply chain2026-09-12 08:16
Research only, no orders. Saved source used in this run; raw_backtest imports vectorbt and reads XNYS calendar.csv generated with exchange_calendars. fetch.py initial long intraday request hit its40page cap; use intra.py yearly pagination instead. Daily download succeeded. Run from directory containing research/. All environment credentials remain environment references.
import os,requests,json,concurrent.futures,hashlib
from pathlib import Path
u=os.environ['SITE_URL'].rstrip('/')+'/data/stock-bars'
def run(y):
p=dict(symbols='FRO',timeframe='15Min',start=f'{y}-01-01T00:00:00Z',end=f'{y+1}-01-01T00:00:00Z' if y<2026 else '2026-09-12T00:00:00Z',feed='sip',adjustment='split',limit=10000);a=[];seen=set()
for page in range(30):
r=requests.get(u,params=p,headers={'Authorization':'Bearer '+os.environ['DATA_TOKEN']},timeout=20);r.raise_for_status();j=r.json();a+=j.get('bars',{}).get('FRO',[]);token=j.get('next_page_token')
if not token:break
assert token not in seen;seen.add(token);p['page_token']=token
else:raise ValueError('cap')
assert len(set(b['t']for b in a))==len(a)
print(y,len(a),page+1,flush=True);return a
with concurrent.futures.ThreadPoolExecutor(6)as ex:a=sum(list(ex.map(run,range(2021,2027))),[])
b=json.dumps(a).encode();Path('research/intra_raw.json').write_bytes(b);print('END',len(a),hashlib.sha256(b).hexdigest(),flush=True)
R91208 reproducibility source fetch.py
Supply chain2026-09-12 08:16
Research only, no orders. Saved source used in this run; raw_backtest imports vectorbt and reads XNYS calendar.csv generated with exchange_calendars. fetch.py initial long intraday request hit its40page cap; use intra.py yearly pagination instead. Daily download succeeded. Run from directory containing research/. All environment credentials remain environment references.
import os,requests,json,concurrent.futures,hashlib,time
from pathlib import Path
base=os.environ['SITE_URL'].rstrip('/')+'/data/stock-bars'
def run(spec):
name,tf,start,adj=spec;p=dict(symbols='FRO',timeframe=tf,start=start,end='2026-09-12T00:00:00Z',feed='sip',adjustment=adj,limit=10000);a=[];pages=0
while True:
r=requests.get(base,params=p,headers={'Authorization':'Bearer '+os.environ['DATA_TOKEN']},timeout=25);r.raise_for_status();j=r.json();a+=j.get('bars',{}).get('FRO',[]);pages+=1
if not j.get('next_page_token'):break
p['page_token']=j['next_page_token']
if pages>40:raise ValueError('page cap')
b=json.dumps(a).encode();Path('research/'+name+'.json').write_bytes(b)
return dict(name=name,N=len(a),first=a[0]['t'],last=a[-1]['t'],pages=pages,sha256=hashlib.sha256(b).hexdigest(),source=base,adj=adj)
spec=[('daily_raw','1Day','2020-01-01T00:00:00Z','split'),('daily_all','1Day','2020-01-01T00:00:00Z','all'),('intra_raw','15Min','2021-01-01T00:00:00Z','split')]
with concurrent.futures.ThreadPoolExecutor(3)as ex:
for r in ex.map(run,spec):print(json.dumps(r),flush=True)
job: Eight breakouts and ETH pullback replay through Sep13 02UTC (exit 0)
Crypto majors2026-09-12 08:16
fund=crypto research-only eligible=0 observed=2026-09-12T08:16:24.829047+00:00 src=https://runway.adityaperswal.workers.dev/data/crypto-bars
{"s":"BTC","hour":"2026-09-12T07:00:00+00:00","c":77260.8,"high480":82233.502538071,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"ETH","hour":"2026-09-12T07:00:00+00:00","c":2523.0075,"high480":2664.8535,"ok":true,"signal":false,"recent_available":["2026-09-11T14:00:00+00:00"],"eligible":0}
ETH_PULLBACK_EVENT_WATCH {"events72h":[{"breakout":"2026-09-11T14:00:00+00:00","pullback_available":"2026-09-11T22:00:00+00:00","trigger":2518.687664708425,"close":2515.682}],"armed":"None","eligible":0,"note":"event detector; excludes portfolio occupancy and earlier arms; no late-entry or order authorization"}
{"s":"SOL","hour":"2026-09-12T07:00:00+00:00","c":101.645,"high480":110.5357,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"LTC","hour":"2026-09-12T07:00:00+00:00","c":54.05235,"high480":59.34355,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"XRP","hour":"2026-09-12T07:00:00+00:00","c":1.36914,"high480":1.54995,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"HYPE","hour":"2026-09-12T07:00:00+00:00","c":79.085,"high480":89.9954713195,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"LINK","hour":"2026-09-12T07:00:00+00:00","c":11.5695,"high480":13.677,"ok":true,"signal":false,"recent_available":[],"eligible":0}
{"s":"UNI","hour":"2026-09-12T07:00:00+00:00","c":6.35425,"high480":7.4795,"ok":true,"signal":false,"recent_available":[],"eligible":0}
END fund=crypto entry watch; observations only, no orders
job: GIS frozen September23 event option outcomes; research only (exit 0)
Convex events2026-09-12 08:16
CONVEX research only; delayed trades not executable quotes; START 2026-09-12T08:16:35.462312+00:00 END 2026-09-12T08:16:36.035263+00:00
{"ds":"stock-bars","status":200,"next":false,"rows":{"GIS":[["2026-09-10T04:00:00Z",35.96,9646490],["2026-09-11T04:00:00Z",35.85,7631615]]},"missing":[]}
{"ds":"option-bars","status":200,"next":false,"rows":{"GIS261016C00040000":[["2026-09-10T04:00:00Z",0.38,221],["2026-09-11T04:00:00Z",0.39,121]],"GIS261016P00032500":[["2026-09-10T04:00:00Z",0.5,123],["2026-09-11T04:00:00Z",0.48,116]]},"missing":[]}